存储 频道

网络文件系统的建立和设置方法

  【IT168 技术】NFS为network file system 的简称,最早由sun公司研发,一般NFS广泛应用在集群服务器上,他的最大特点是能通过网络让不同的机器,不同的操作系统能彼此的共享文件,所以他能看作一个简单的文件服务器。

  在嵌入式Linux 的研发过程中,研发者需要在Linux服务器上进行所有的软件研发,交叉编译后,通用FTP方式将可执行文件下载到嵌入式系统运行,但这种方式不仅效率低下,且无法实目前线的调试。因此,能通过建立NFS,把Linux服务器上的特定分区共享到待调试的嵌入式目标系统上,就能直接在嵌入式目标系统上操作Linux服务器,同时能在线对程式进行调试和修改,大大的方便了软件的研发。因此,NFS 的是嵌入式Linux研发的一个重要的组成部分,本部分内容将周详说明怎么设置嵌入式Linux 的NFS 研发环境。

  嵌入式Linux 的NFS 研发环境的实现包括两个方面:一是Linux 服务器端的NFS 服务器支持;二是嵌入式目标系统的NFS 客户端的支持。因此,NFS 研发环境的建立需要设置linux 服务器端和嵌入式目标系统端。

  一、Linux 服务器端NFS 服务器的设置

  以root 身份登陆Linux 服务器,编辑/etc 目录下的共享目录设置文件exports,指定共享目录及权限等。

  执行如下命令编辑文件/etc/exports:

  # vi /etc/exports

  在该文件里添加如下内容:

  /home/work 192.168.0.*(rw,sync,no_root_squash)然后保存退出。

  添加的内容表示:允许ip 地址范围在192.168.0.*的计算机以读写的权限来访问/home/work 目录。

  /home/work 也称为服务器输出共享目录。

  括号内的参数意义描述如下:

  rw:读/写权限,只读权限的参数为ro;

  sync:数据同步写入内存和硬盘,也能使用async,此时数据会先暂存于内存中,而不即时写入硬盘。

  no_root_squash:NFS 服务器共享目录用户的属性,如果用户是 root,那么对于这个共享目录来说就具有 root 的权限。

  接着执行如下命令,启动端口映射:

  # /etc/rc.d/init.d/portmap start

  最后执行如下命令启动NFS 服务,此时NFS 会激活守护进程,然后就开始监听 Client 端的请求:

  # /etc/rc.d/init.d/nfs start

  用户也能重新启动Linux 服务器,自动启动NFS 服务。

  在NFS 服务器启动后,还需要检查Linux服务器的防火墙等设置(一般需要关闭防火墙服务),确保没有屏蔽掉NFS 使用的端口和允许通信的主机,主要是检查Linux服务器iptables,ipchains 等选项的设置,及/etc/hosts.deny,/etc/hosts.allow 文件。

  我们首先在Linux 服务器上进行NFS 服务器的回环测试,验证共享目录是否能够被访问。在Linux 服务器上运行如下命令:

  # mount ?t nfs 192.168.0.20:/home/work /mnt

  # ls /mnt

  命令将Linux 服务器的NFS 输出共享目录挂载到/mnt 目录下,因此,如果NFS 正常工作,应该能够在/mnt 目录看到/home/work 共享目录中的内容。

  二、嵌入式目标系统NFS 客户端的设置

  在Linux 服务器设置好后,还需要对客户端进行相关设置。在设置内核时选择Load an Alternate Configuration File输入设置文件的路径和文件名添加内核对NFS的支持:

  选中networking options-》IP:kernel level auloconfiguralion项

  选中file systems-》network file systems-》下的root file system on nfs和nfs file system support

  重新编译内核下载bootloader和kernel到研发板上

  在嵌入式目标系统的Linux Shell 下,执行如下命令来进行NFS 共享目录挂载:

  # mkdir /mnt/nfs //建立Linux 服务器输出共享目录的挂载点;

  # mount ?t nfs 192.168.0.20:/home/work /mnt/nfs ?o nolock

  # cd /mnt/nfs

  # ls

  此时,嵌入式目标系统端所显示的内容即为Linux 服务器的输出目录的内容,即Linux 服务器的输出目录/home/work 通过NFS 映射到了嵌入式目标系统的/mnt/nfs目录。用户能用增/删/修改文件的方式来验证实际效果。mount 命令中的192.168.0.20 为Linux 服务器的IP地址,/home/work 为Linux 服务器端所设置的共享输出目录,/mnt/nfs 为嵌入式设备上的本地目录。

  在研发过程中,来回输入命令非常烦人,可用这两个简单的脚本来完成nfs的启动,挂载。

  host启动nfs:

  snfs

  #!/bin/bash

  ifconfig eth0 192.168.0.20

  /etc/rc.d/init.d/portmap start

  /etc/rc.d/init.d/nfs start

  嵌入式目标机挂载nfs:

  mnfs:

  #!/bin/sh

  mount -t nfs 192.168.0.20:/home/work/nfs /mnt/nfs -o nolock

  echo “nfs ok!”

${PageNumber}

  NFS其实能被视为一个RPC服务程式,在启动RPC程式前我们先要做好端口的映射工作这就portmap,portmap的意思是当Client要连接服务器时必须知道服务器的一个空闲端口这时Client会向服务器的portmap请求一个端口然,然后Server告诉Client这端口后才能建立连接,所以在启动NFS前要先启动portmap

  [wds@localhost ~]# rpm ?qa |grep nfs && rpm ?qa | grep portmap #查找这两个是否安装

  [wds@localhost ~]# vi /etc/exports # 这文件是NFS的主要设置文件

  [wds@localhost ~]# /usr/sbin/exportfs #这个文件是nfs共享资源命令

  [wds@localhost ~]# /usr/sbin/showmount #能查看远程服务器的共享目录

  [wds@localhost ~]# /var/lib/nfs/xtab #nfs 的日志文件

  [wds@localhost ~]# vi /etc/exports

  [你想要的共享的目录] + ip 地址(参数一,参数二) [主机名二](参数三,参数四)

  参数列表

  rw: 能写入权限

  ro: 只读权限

  no_root_squash: 登陆NFS主机共享目录的如果是root用户那么那的权限也为root不过这样并不安全

  root_squash: 登陆的用户如果为root他的权限将变成nobody

  all_squash: 不论登陆的用户是什么用户都以匿名用户的权限

  sync: 数据同步写入硬盘和内存中

  async: 数据先暂时存放在内存中,而不写入硬盘

  anounid: 这个能自己设定uid,不过必须和/etc/passwd目录中用户uid相同

  anongid: 同anonuid,不过变的是group id

  服务器端设置

  [wds@localhost ~]# service portmap start #首先打开portmap

  [wds@localhost ~]# service nfs start # 在打开 nfs

  [wds@localhost ~]#i iptables ?F #清空防火墙命令

  [wds@localhost ~]#

  比如说我要共享/var/www/html 目录 不过只是让和我一个网段的机器访问192.168.0.0/24这个网段读或写,其他的就只能读,然后在发布一个私人目录/home/wds/只开放给192.168.0.8

  这个IP

  [wds@localhost ~]# vi /etc/exports

  /var/www/html 192.168.0.0/24 (rw) *(ro)

  /home/wds 192.168.0.8(rw)

  目前想要*.chinaunix.com网段的机器登陆我的NFS,并且访问我的/home/wds/ 不过他们存储时我希望他们的uid和gid都变成40这个用户身份

  [wds@localhost ~]# vi /etc/exports

  /var/www/html 192.168.0.0/24 (rw) *(ro)

  /home/wds 192.168.0.8(rw)

  /home/wds *.chinaunix.com(rw,all)squash,anounid=40,anongid=40)

  如果我们修改/etc/exports这个文件后,是否要从新启动nfs呢?答案是不不必,只要使用exportfs来从新扫描一次/etc/exports文件,并且从新设置文件加载即可

  语法为:

  [wds@localhost ~]# exportfs [-aruv]

  参数说明:

  -a: 全部挂载(或卸载)/etc/exports 文件的设置

  -r: 从新挂载/etc/exports 里设置,此外,同步更新/etc/exports 及/var/lib/nfs/xtab的内容

  -u: 卸载某一目录

  -v: 在导出时,将共享目录显示在屏幕上

  例如:

  [wds@localhost ~]# exportfs ?rv 全部从新导出一次

  [wds@localhost ~]# exportfs ?au 全部卸载掉

  Showmount 的是显示是否有挂载

  语法为:

  [wds@localhost ~]# showmount [-ae] hostname

  参数说明:

  -a: 在屏幕上显示和当前的client连接后使用目录的状态

  -e: 显示Hostname这台机器的/etc/exports中的共享信息

  [wds@localhost log]# showmount -e localhost

  Export list for localhost:

  /var/www/html (everyone)

  Rpcinfo [-p]hostname[or ip]

  -p 显示端口和程式的信息

  [wds@localhost log]# rpcinfo -p localhost

  program vers proto port

  100000 2 tcp 111 portmapper

  100000 2 udp 111 portmapper

  100024 1 udp 1024 status

  100024 1 tcp 1024 status

  100011 1 udp 837 rquotad

  100011 2 udp 837 rquotad

  100011 1 tcp 840 rquotad

  100011 2 tcp 840 rquotad

  100003 2 udp 2049 nfs

  100003 3 udp 2049 nfs

  100003 4 udp 2049 nfs

  100003 2 tcp 2049 nfs

  100003 3 tcp 2049 nfs

  100003 4 tcp 2049 nfs

  100021 1 udp 1026 nlockmgr

  100021 3 udp 1026 nlockmgr

  100021 4 udp 1026 nlockmgr

  100021 1 tcp 1026 nlockmgr

  100021 3 tcp 1026 nlockmgr

  100021 4 tcp 1026 nlockmgr

  100005 1 udp 858 mountd

  100005 1 tcp 861 mountd

  100005 2 udp 858 mountd

  100005 2 tcp 861 mountd

  100005 3 udp 858 mountd

  100005 3 tcp 861 mountd

${PageNumber}

  Client端的设置

  Server端设置完毕,接下来就是让client端连接上server!连接server步骤如下:

  1.扫描能使用的server目录:

  2.在client端建立装载点

  3.使用mount 命令远程挂载远程共享目录

  4.解决可能发生的问题(被防火墙过滤掉了)

  Showmount是显示远程主机共享资源

  [wds@localhost ~]# showmount -e 192.168.0.8

  Export list for 192.168.0.8:

  /var/www/html (everyone)

  /home/wds *.chinaunix.com,192.168.0.6

  [wds@localhost ~]# mount -t nfs 192.168.0.8:/var/www/html /mnt 把远程的/var/www/html 挂载到本地

  [wds@localhost ~]# umount /mnt 卸载远程目录

  如果你想要开机启动时自动加载NFS服务器导出目录,我们在NFS端/etc/fstab文件中加入以下一行

  192.168.0.8:/var/www/html /mnt nfs rsize=8192,wsize=8192,timeo=14,intr

  ======================================================

  ======================================================

  (来自【IT168 服务器学院】)在192.168.16.125上修改 /etc/exports

  #

  / 192.168.16.107(rw,no_root_squash)

  注释:

  /: 接入点

  192.168.16.107: 允许的客户端

  rw: 允许读写

  no_root_squash: root不映射到匿名账户

  启动

  /etc/init.d/portmap start

  /etc/init.d/nfs start

  在192.168.16.107上执行:

  mount -o rw -t nfs 192.168.16.125:/ /mnt/nfs

  OK

  测试中忘记重新启动portmap 导致修改 exports加上读写选项部工作。

  环境:

  192.168.16.125

  Red Hat Linux release 9 (Shrike)

  192.168.16.107

  Red Hat Enterprise Linux AS release 3 (Taroon Update 3)

0
相关文章