基于Linux的嵌入式网络存储器设计
(1)NFS协议简介
NFS网络文件系统是由Sun Microsystems公司最早实现的,用于在不同的操作系统、不同的网络结构及不同的传输协议之间共享文件。NFS协议组包括NFS、RPC、XDR。NFS本身没提供其它程序可调用的过程,它通过远程过程调用和通用外部数据表示来实现。远程过程调用为远程服务提供一个接口,包括主机地址、程序号及一个远端进程的进程号,而外部数据表示提供了一套通过网络描述数据类型的方法。
在不同的操作系统中,文件系统的管理方式不同,对于目录树的深度、名字的使用以及路径的表示方法也都有不同的规定。有些操作系统的文件系统处于特定的目录下面,而有些操作系统用mount操作使所有的文件系统看起来在一个单独的目录下。尽管目录和文件在很多方面都比较类似,但是访问它们却须调用不同的程序,因此,NFS假定文件系统是分等级的,并且文件处于最低等级,NFS为目录提供一个标准的网络格式以便访问。在远程调用中,每次调用只返回一个目录,这样解决了不同文件系统之间结构不同的问题。
(2)NFS服务的配置
NFS服务器使用了5个守护进程来提供NFS服务。最基本的提供NFS服务的系统至少要运行nfsd用于处理NFS协议,而mountd用于处理客户的mount请求。此外,由于NFS使用RPC远程调用,其它三个RPC守护进程portmap、rpc_lockd、rpc_statd可以用来帮助提供更高效的服务。为了使其它系统也能使用Linux系统上的硬盘空间,在系统启动时,应载入NFS的守护进程。这需要在rc.conf中更改相应关的参数:nfs_server_enable
、rpc_statd_enable、rpc_lockd.enable和portmap_enable,这些参数对应相应的守护进程。这样,系统启动之后就具备了能共享文件的能力 ,接下来的工作是通过更改/etc/exports文件来设置需要共享的目录以及这些目录的访问权了,以保证其安全性。Exports文件的设置如下:
/usr/src/sys-maproot=guest1 ns host2
/usr/ports-ro-network 202.114.1.0
在这里我们使用绝对路径的方式定义了两个共享目录—/usr/src/sys和/usr/ports,并且对这两个目录的访问权限分别作了不同的限制,以保证其安全性。对于第一个目录,限制了客户机上的root用户等价于本机上的guest1用户,以避免客户机上的root用户拥有这个服务器上的root权力,进行非法操作,此后的ns和host2参数是主机名,只有ns和host2才能共享这个/usr/sys/src目录。第二行设置共享了/usr/ports目录,限制为只允许读取,并且也只有202.114.1.0网络上的计算机才能访问这个共享目录。在更改了exports文件之后,向mountd进程发送一个SIGHUP信号,使其重读exports文件的内容,这样关于exports文件的设置才开始生效。
结语
本文提出了一个网络存储器的基本解决方案,实现了网络存储器的基本功能。整个系统易于安装,具有可靠性较高,跨平台、跨网络的优点;同时也存在着一些不足的地方,比如对用户、磁盘的管理不太方便,这些可通过数据库技术加以改进。
《基于Linux的嵌入式网络存储器设计(第3页)》