转:NFS服务器

  categories:资料  author:

NFS(Network File System)是由升阳(Sun)最先开发,它的目标是让不同机器能够跨平台共享相同的档案资源。简单来说,可以看成是一种远程的文件系统。也因为跨平台 的目标,所以几乎所有的Unix Like平台都支持NFS,如IBM AIX、Sun Solaris、HP Unix、GNU/Linux和FreeBSD等,都可以透过NFS来共享档案和目录资源。目前在MS Windows上虽然有NFS Client可以安装,但几乎是商业软件。 所以大家常在Unix Like系统中使用NFS来共享档案资源。或许读者会奇怪,为何不用Samba网芳分享,这样MS Windows和Unix都可以互相联机?这是因为NFS效能比Samba好很多,所以常常在平行运算的超级计算机或者商业大型系统上,使用一台NFS Server,其他Server透过光纤信道联机到NFS文件服务器取得数据。

图17-1

如 图17-1,实务上常常架一台NFS Server,并且上面装有磁带机可以定时的备份文件。其他的服务器就把NFS Server share出来的目录挂载起来,实际上所有网页和数据等档案都是放在NFS Server上,这些Server就只单纯运算与响应客户端请求。这样的好处是我们只要维护好一份文件系统即可,并且备份和资源分配也会比较容易。也因为 NFS Server通常使用Raid磁盘阵列系统,所以整个架构可以达成高效能且高可靠性的服务。

NFS运作理论

NFS 有好几个版本,最新版是NFSv4。而NFSv1到NFSv4都是透过RPC来运作,所谓的RPC (Remote Procedure Call) 是远程过程调用。当跑一个程序时,该程序呼叫另外一个程序去做事情然后把结果传回来称为Procedure Call,所以当一个程序呼叫在不同主机的程序去处理事情并传回结果,我们就称为Remote Procedure Call。对于呼叫别人的程序来说,它会感觉到被呼叫的程序也是在本地执行的。所以RPC有个好处就是在写程序的时候,只要管好呼叫的部份,我们不必实际 去处理网络封包等细节,这些细节就给RPC系统处理即可,这样程序也会好写很多。故RPC程序要处理远程传输的问题,只要写好procedure call来呼叫远程主机的程序读取或写入硬盘即可,这大大简化coding的难度。 NFS的实作就是靠RPC了,所以NFS是不处理网络封包的问 题,它只从Client呼叫Server上的NFS procedure,并且告诉该remote procedure想要干嘛,而封包实际的传输就透过标准的RPC协议来达成。故在NFS系统上,Client端和Server端都要安装RPC系统,而 RPC在Linux核心里已经有内建。 察看系统上的RPC程序:

# 后面可以不加网址,查询本机RPC程序

username@ubuntu:~ $ rpcinfo -p192.1680.183

程序采用的协议连接阜

100000 2 tcp 111 portmapper

100000 2 udp 111 portmapper

100003 2 udp 2049 nfs

100003 4 tcp 2049 nfs

100005 1 tcp 806 mountd

100005 2 udp 803 mountd

100024 1 udp 887 status

100024 1 tcp890 status

???(略)???

现 在我们来谈谈Portmap Daemon这个服务!通常当一个RPC程序启动时,若要使用网络传递数据,需要先有个port吧!所以portmap就是把RPC程序启动后,所使用的 port纪录起来。因此当Client端要连到RPC程序前,会先连到portmap所使用的port 111,向它查询该RPC程序所使用的port。 这 时候就产生一个议题了,每次RPC程序向portmap注册的port可能都不一样,这样造成我们很难写防火墙规则去挡其他不开放的port,这也是为什 么使用RPC时常会让系统安全性不佳的原因。由于这种安全性议题NFS和NIS等使用portmap的RPC服务通常限制在区域网络内使用,甚至把所有使 用RPC的机器都放到虚拟IP网段内,再透过NAT来对应外部实体IP的port到内部虚拟IP想开放的port。 这个问题目前在NFSv4已经解决了,也就是不必再透过portmap来对应port和RPC程序,因为它改成使用固定的port 2049给Client连接,此时防火墙规则就很好写,不需要考虑到NFSv3 Server使用的port是不固定。 NFSv4 提供的新功能包含了完整的Unicode支持,如同Samba的CIFS协议,会在文件传输的时候采用Unicode(UTF-8)来传输档名。旧版的 NFSv3在传输档名时,是用本地端的locale来传输档名,也就是传输文件名原始数据。但这会有一个问题,如果当A机器使用Big5 Locale,B机器使用UTF-8 Locale,那么我们就无法透过NFSv3来正确传输中文档名,因为NFSv3只能传输原始locale所用的编码,不提供转码阿!所以在从前两台 Unix主机必须要使用相同的locale才能正确的传输中文档名。 但是在NFSv4的话,理论上情形就改观了!当一台机器Locale是 Big5,另外一台是UTF-8,在传输档名时,都会先转成Unicode(UTF-8)传输,到本地后再转成该机器所使用的Locale编码。因此可以 解决不同locale之间中文乱码的问题。不过转码的部份,因为笔者所有的机器都使用UTF-8,笔者没有机会去试,若读者有尝试成功的话,希望可以和笔 者分享一下 ^_^。 NFSv4还有其他的优点,例如增加了传输加密的功能(Kerberos 5),因此也更适合直接在Internet上跨不同网域架设NFS Server和Client,不必担心窃听的安全问题。不过这在本书中没有讨论到,有兴趣的读者可以上网找数据或和笔者讨论。 在 NFSv4对其他Unix主机的支持性方面,IBM AIX、Sun Sloaris和HP Unix都已经很稳定的支持,因此NFSv4和其他Unix主机沟通目前都已经没有问题。但是目前在Linux核心上NFSv4仍然被标示为 EXPERIMENTAL,也就是还在实验阶段。笔者自己使用的情况是在Ubuntu dapper 2.6.15核心没有问题,但是在自己编的官方2.6.17核心client端会不稳定,再更新到2.6.18就没有问题了,可见真的有一点实验性质。 因为它有加密的功能和容易设定防火墙的特性,在笔者管的Server是同时使用NFSv3和NFSv4。NFSv3拿来区网内使用,NFSv4拿来穿越防火墙给校外的Server加密联机。所以要使用NFSv4或NFSv3读者要自己考虑和测试!

NFS Server主机规划

设 定其实是不难,难的是资源共享的规划和权限设计。这个万一没弄好,别人有可能可以随便对你的NFS Server存取数据。所以在设定前,先想想看要怎样规划档案分享吧!读者首先要想的是NFS Server可以提供给哪些Client机器使用?基本上它不提供账号认证的方式,所以它使用IP范围来控管Client端。再来你要考虑分享出去的目录 权限问题,权限分配有以下几种方式。

1. no_root_squash: 这种权限设定就有点危险了!它的意思是若Client端账号在Server上也有的话,那么在Client端操作该分享目录时,会有该账号在Server 上的权限。危险的地方是在当Client端是root时,那么可以同时取得Server上在分享出来的目录下完整权限。若是Server端没有该账号,但 是Client端有该账号时,就会变成用nobody来操作该分享目录唷!我们通常使用root_squash会比较安全,且经常会配合NIS一起使用。

2. root_squash:这个基本上和no_root_squash一样。不同的是当Client端用root去操作时,就会变成匿名的nobody权限,所以就安全多了,Client端也无法去做大规模的破坏。通常会配合NIS一起使用。

3. all_squash:这代表了不管Client端用什么账号,在该分享目录的权限都只有nobody。在开放给所有人使用的匿名NFS Server通常会用这样的设定。

4. anonuid/anongid:当Client mount起来后,不管用什么账号,在该目录的权限只有anonuid指定的账号与anongid指定的群组。当你把anonuid和anongid都设成nobody的id时,其实和all_squash有一样的意义!

考 虑好权限问题后,读者还要考虑该目录是只能读 (ro),或者可以读写 (rw)。当要开放给大家只能抓东西,这时候都会配合ro的设定。若是配合NIS让每一部机器的账号和权限都一样的话,那可以把家目录都放在NFS Server上,并使用rw的设定,这时候不同机器可以负责不同的运算功能,例如网页和Mail Server等,但都是存放在同一个文件系统上。 接 下来要考虑可以挂载该分享目录的IP范围,这有两种表示法,一种是直接写上它的IP,笔者不建议用网址(xxx.mook.org)的方式,除非你是写死 在hosts里面,不然有可能会因为DNS Server被hack导致你的NFS Server也被攻陷!另外一种方式是用网域的表示方式。例如你想要整个192.168.1.xxx的C Class网域都可以联机到该台NFS Server,那你可以写成192.168.1.0/24。后面的24是netmask 255.255.255.0的简写,换算方式是把该netmask转成二进制后,从前面数过来看有几个1。如每一个255都由8个1bit组成,所以总共 3个255就是24了!计算结果是整个C Class简写为24,B Class简写为16,以此类推。通常要分享到整个网域时,常会把主机全部放在防火墙里面,这样NFS系统会比较安全,不然会直接指定可以存取的 Client IP。 由于NFSv3和NFSv4 Server都是使用exports这个资源共享配置文件,而NFSv4多了虚拟根目录的概念,所以若要两个同时使用的话,要把所有分享的目录bind到同 一个子目录下,故这时候exports的写法要稍微注意一下,需符合NFSv4的规则,并且bind的规则也要记得写到fstab里面,这些会在接下来的 17.3节中详细介绍。

NFS Server和Client程序安装

安装NFS Server只要输入以下指令即可。

安装NFS Server

sudo apt-get install nfs-kernel-server

安装好server后,它会把portmap,nfs-kernel-server和nfs-common依序加到runlevel里面,若要重新启动NFS服务的话,也要依照这个顺序来唷! 若只需要client端的功能,那如以下指令安装。 安装NFS Client

sudo apt-get install nfs-common

若要开机的时候预设不要自动启用NFS,请参考『深入了解Ubuntu系统』那一章,那里对于runlevel的管理有仔细的介绍。 因为NFSv3和NFSv4的设定有一点不一样,所以详细设定的地方笔者就分开来讲。读者要使用NFSv4或者NFSv3就需要依照你的网络环境来评估。

表17-3-1 NFS相关的重要配置文件
功能配置文件
设定NFS Server要分享的目录与权限/etc/exports
nfs-common的启动设定值 (NFSv4需启用IDMAPD)/etc/default/nfs-common
nfs-kernel-server的启动设定值/etc/default/nfs-kernel-server
设定client端可以自动挂载NFS Filesystem/etc/fstab
idmapd配置文件 (NFSv4 Only)/etc/idmapd.conf
表17-3-2 NFS相关的重要指令
功能指令
控制NFS Server启动或关闭的script檔/etc/init.d/nfs-kernel-server
控制NFS Client和Server共同的相关服务启动或关闭的script檔/etc/init.d/nfs-common
控制portmapper启动或关闭的script檔。(NFSv4可以不使用,但是showmount依然走NFSv3协议,所以建议打开吧)/etc/init.d/portmap
修改 /etc/exports后需重新更新分享目录exportfs -rv
察看本机目前分享的目录exportfs -v
查询该主机有哪些目录被分享出来showmount -e <主机IP>
查询该主机有哪些Client端连上和主机分享信息showmount -r <主机IP

NFSv3 Server的设定(主流稳定版)

设定NFSv3 Server最重要的就是 /etc/exports这个配置文件,我们先弄个简单的范例来看看吧!

Server配置文件 /etc/exports范例:

/home 192.168.0.0/24(rw,async,root_squash,no_subtree_check,insecure)

/tmp 192.168.0.0/24(rw,async,root_squash,no_subtree_check,insecure)

/opt 192.168.0.183(ro,root_squash,no_subtree_check,insecure)

如 以上范例,exports的格式是第一栏为要分享的目录,第二栏是开放使用的Client主机,最后(rw,async,…..)里面写一些参数。在 表17-3-1-1有NFS Server上使用的额外参数详细说明,此范例中的参数是笔者最常用的。在这个例子中,Server分享出3个目录,前两个让192.168.0.0网段 所有的计算机都可连进来,且都有读写的权限。最后一个只能由192.168.0.183那台机器连进来,并只能读取。 当设定好后,让它生效不需要重开服务,只要用以下指令即可!

重设Server分享目录:

username@ubuntu:~ $ sudo exportfs -rv # 重设分享目录列表

exporting 192.168.0.0/24:/home

exporting 192.168.0.0/24:/tmp

exporting 192.168.0.183:/opt

username@ubuntu:~ $ exportfs # 察看目前分享目录,可加 -v获得更详细信息

/home 192.168.0.0/24

/tmp 192.168.0.0/24

/opt 192.168.0.183

Client挂载 /home范例:

# mount -t -o <挂载参数> nfs <Server IP>:<分享目录> <mount point>

sudo mount -t nfs 192.168.0.180:/home /NFS/home

# 读者也可以依照以下范例使用soft mode且改变读取区块大小为8192。

sudo mount -t nfs -o soft,rsize=8192 192.168.0.180:/home /NFS/home

如 Client挂载范例,我们只需要用以上指令就可以挂载上Server的远程目录到本机的mount point上,读者可以自己用同样的方式来挂载tmp和opt。挂载时,也可以加上一些挂载参数,参数可以参考表17-3-1-2,这些参数会在 fstab那里给出笔者最长用的设定,读者可以参考看看。 若要看远程有开放哪些资源可以提供挂载,可以使用以下方式。

察看远程可分享的目录资源:

username@ubuntu:~ $ showmount -e 192.168.0.183 # 可用 -a来得知有多少Client连上

Export list for 192.168.0.183:

/export 192.168.0.0/24

/export/home 192.168.0.0/24

/export/tmp 192.168.0.0/24

表17-3-1-1 NFS Server exports重要的参数
参数功能
rw该分享目录可以读写
ro该分享目录只能读取
secure不允许Client使用大于1024的Client端port,也就是从Server传递数据到Client端的目地port要小于1024,此时Client端一定要使用root账号才能mount远程NFS Server。通常会建议使用insecure。
insecure允许Client端自行决定自己机器使用的port,笔者通常都会设这个,如此非使用root账号的clinet端才能mount NFS Server。
async允许异步写入数据,所以效能会比同步写入好。写入时会先放到内存,等硬盘有空档再写入!风险为若Server当机或不正常关机,会损失数据,但通常Server都很稳定,所以建议打开获得更好的效能!
sync同步写入,效能比较不好。
nohide当export出两个目录,而其中一个目录是另外一个目录的子目录,例如我们使用虚拟目录的例子,此时我们mount根目录时,会自动把所有子目录mount起来。建议使用这个选项比较方便,尤其在NFSv4有虚拟目录的情形。
hide当mount根目录时,export出的子目录需要自己明确的再挂载。
subtree_check当分享的目录是某个文件系统的子目录,选用这个可以确定父目录的权限可以让NFS Server分享使用。
no_subtree_check刚好和上面的相反,因为不做权限测试,效能比较好。
fsid=0定义NFSv4中的根目录,只能有一个!
root_squash在权限的地方有详细解释,代表当client用root会变成匿名权限
no_root_squash关掉root_squash功能。
all_squash在Client所有的使用者都是变成匿名身份
anonuid指定在Client中操作该目录的权限账号,如使用anouid=0,那在Client端不管是谁都有着root的权限操作该目录。
anongid同上,不过这是指定使用者群组。
表17-3-1-2 NFS Client挂载重要的参数
参数功能
rsize每次读取的大小,预设是1024 byte,在区网内设大一点会有比较好的效能。但是若网络状况不好时,设太大反而会导致丢包重传而效能低下。在区网下,笔者建议使用rsize=8192。(在NFSv4最大建议到32768 byte)
wsize每次写入的大小,预设也是1024 byte。在区网下笔者建议用wsize=8192。(NFSv4最大建议到32768 byte)
proto=udp使用UDP协议来传输数据,在区网中会有比较好的效能。若要跨越Internet的话,使用proto=tcp会有比较好的侦错能力。
bg挂载的时候使用背景模式,也就是第一次挂不上去时,丢到背景慢慢试。所以当client端挂载写在fstab里面,一定要用bg,否则会拖慢开机速度。
fg挂载的时候用前景模式,直到挂载上了才继续跑别的程序。刚好和bg模式是相反的,这是默认值。
soft当NFS Client以soft挂载Server后,若网络或Server出现问题,造成Client和Server无法传输资料时,Client会一直尝试到 timeout后显示错误并且停止尝试。若使用soft mount的话,可能会在timeout出现时造成数据丢失,故一般不建议使用。
hard这是默认值。若用hard挂载硬盘时,刚好和soft相反,此时Client会一直尝试联机到Server,若Server有响应就继续刚才的操作,若没有响应NFS Client会一直尝试,此时无法umount或kill,所以常常会配合intr使用。
intr当使用hard挂载的资源timeout后,若有指定intr可以在timeout后把它中断掉,这避免出问题时系统整个被NFS死锁,建议使用。

NFSv4 Server的设定(实验性质)

虽 然NFSv4有很多新的功能,但是在kernel中还是被标记为实验用,所以你有可能会遇到一些莫名其妙的bug,例如笔者更新核心到2.6.17后,发 现NFSv4 Client会莫名的当掉,最后再更新到2.6.18rc4就正常了!而kernel里面关于NFSv4的程序代码又会比原始研发单位还要慢一点,若你想要 用最新的NFSv4程序代码,可以到http://www.citi.umich.edu/projects/nfsv4/linux/ 抓最新的patch。若读者希望一切都没问题,不想再做一些hack,可以考虑用稳定的NFSv3。但若要在Internet传输,那么NFSv4的容易设定防火墙与加密的特性可以考虑一下! 由 于NFSv4使用rpc.idmapd这个daemon来处理User ID、GroupID和权限的对应,所以这个daemon在Client端和Server端都要启动,并且需要自己手动建立通讯pipe给svc gssd subsystem用,这些在Ubuntu都需要手动设定。记得这些设定一定要在Server和Client分别做过一次唷,设定好了就不需要再做了!

建立pipe目录给NFSv4使用:

sudo mkdir /var/lib/nfs/rpc_pipefs

加入以下两行到 /etc/fstabrpc_pipefsnfsd fs在开机自动mount起来:

rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs defaults 0 0

nfsd /proc/fs/nfsd nfsd defaults 0 0

由于我们不重新启动,为了让刚刚加入的两行生效,执行以下指令吧!:

sudo mount rpc_pipefs

sudo mount nfsd

编辑 /etc/default/nfs-common,把NEED_IDMAPD改成yes

NEED_IDMAPD=yes

接下来重新启动portmap,nfs-kernel-server和nfs-common,要依照笔者下面列出来的顺序操作喔! 对于Server需要重新启动这三个服务:

sudo /etc/init.d/portmap restart

sudo /etc/init.d/nfs-kernel-server restart

sudo /etc/init.d/nfs-common restart

对于Client需要重新启动这两个服务:

sudo /etc/init.d/portmap restart

sudo /etc/init.d/nfs-common restart

这 时候可以开始设定 /etc/exports。基本上和NFSv3差不多,只不过多了虚拟根目录的概念。NFSv4为了安全性问题,引入了Pseudo Filesystem的机制,这类似HTTP Server是从系统上的某个子目录当成网页的起始目录(虚拟根目录)。

配置文件 /etc/exports范例一 (不正确的设定)

/home 192.168.0.0/24(rw,fsid=0,async,no_root_squash)

/tmp 192.168.0.0/24(rw,async,no_root_squash)

如 以上范例,笔者把home和tmp分享出来,先注意到fsid=0的参数,这个参数在NFSv4是有意义的!这宣告该分享目录是根目录,所以在NFSv4 Client端要mount时,需要mount -t nfs4 IP:/ /mnt/nfs,而不是传统的mount -t nfs IP:/home /mnt/nfs。所以在NFSv4和NFSv3最大的不同是,在v4要先用fsid=0定义出一个根目录,也只有那个根目录以下的子目录才能被挂载,笔 者会在接下来用范例来解释。而虚拟根目录只能定义一个,若定义多个的话,会造成不可预期的问题。 Server重设分享目录:

username@ubuntu:~ $ sudoexportfs -rv

Client挂载 /home范例:

sudo mount -t nfs4 192.168.0.183:/ /NFS # 用NFSv4协定挂载

sudo mount -t nfs 192.168.0.183:/home /NFS # 用NFSv3协定挂载

读 者应该有注意到吧!挂载同一个Server上的 /home目录,因为在Server上的exports有指定 /home是虚拟根目录(fsid=0),所以NFSv4远程挂载点是和NFSv3不一样的喔!在我们这个范例中被exports出来的tmp将无法在 NFSv4中被挂载,因为它不在虚拟根目录底下阿!所以使用NFSv4时,我们常常会建立一个根目录,然后把其它要分享的目录资源用mount –bind挂载进来,如以下范例。当然大家不会希望每次都要做bind的动作,所以请参考17-3-3小节把设定写到fstab吧!

使用bind来建立虚拟根目录范例:

sudo mkdir /export # 建立NFSv4分享的虚拟根目录

sudo mkdir /export/home # 由于所有NFSv4分享目录都要在虚拟根目录底下,

sudo mkdir /export/tmp # 所以建立 /home和 /tmp来给bind用!

sudo mount –bind /home /export/home

sudo mount –bind /tmp /export/tmp

配置文件 /etc/exports范例二 (正确的设定)

/export 192.168.0.0/24(rw,fsid=0,nohide,insecure,no_subtree_check,async,root_squash)

/export/home 192.168.0.0/24(rw,nohide,insecure,no_subtree_check,async,root_squash)

/export/tmp 192.168.0.0/24(rw,nohide,insecure,no_subtree_check,async,root_squash)

改 成这样后,我们先sudo exportfs -rv让新的exports生效,这已经解决虚拟根目录的问题,因为我们使用bind来连接 /home到 /export/home,也就是这两个目录是等义的,这样规划符合NFSv4的单一虚拟根目录的原则,同时也可以在NFSv3中被挂载! 不论Client是NFSv3或NFSv4,在参数加上nohide,这样Client端挂载一个目录时,会自动挂载该目录下其他可挂载资源,而不需要明确的指定并一个一个挂上。

Client挂载 /export范例:

sudo mount -t nfs4 192.168.0.183:/ /NFS # 用NFSv4协定挂载

sudo mount -t nfs 192.168.0.183:/export /NFS # 用NFSv3协定挂载

如以上范例,当Server端有设nohide时,Client在NFSv4会自动挂载 /tmp和 /home或在NFSv3会自动挂载 /export/home和 /export/tmp,不需要再另外设定。 当然也可以直接挂载子目录,如以下范例。

Client挂载 /export/home范例:

sudo mount -t nfs4 192.168.0.183:/home /NFS # 用NFSv4协定挂载

sudo mount -t nfs 192.168.0.183:/export/home /NFS # 用NFSv3协定挂载

若读者使用showmount去看Server分享的资源时,要注意的是这个方式显示的目录是走NFSv3旧的协议,所以没有考虑到虚拟根目录。故使用NFSv4挂载法需要自己把 /export去掉喔! 察看远程可分享的目录资源:

username@ubuntu:~ $ showmount -e 192.168.0.183 # 可用 -a来得知有多少Client连上

Export list for 192.168.0.183:

/export 192.168.0.0/24

/export/home 192.168.0.0/24

/export/tmp 192.168.0.0/24

或 许读者会觉得奇怪,不是说NFSv4不需要portmap了嘛?那我们怎还把它启动呢?的确是不需要,若你把它关了是可以正常联机,但showmount 是走旧的协议,所以就没办法看Server分享的资源啦!所以若你用不到showmount且不用NFSv3,可以把portmap关了。

将设定写到fstab来自动挂载吧!

在 Client中把挂载设定写到 /etc/fstab里面,让每次开机都可以自动挂载远程的NFS Server是很方便的。在Server中若使用到NFSv4,常常用bind的技巧制造一个虚拟根目录,这些bind的规则也经常写到 /etc/fstab里面。这里的讨论继续沿用前两小节的范例,所以读者要视需求修改唷! 笔者先讨论如何在Server上开机后自动把虚拟目录和真正的分享目录bind起来。首先编辑Server上的fstab吧!

Server上的 /etc/fstab范例:

# <来源目录> <目地目录> none bind 0 0

/home /export/home none bind 0 0

/tmp /export/tmp none bind 0 0

如以上范例,在Server上的fstab最后面加上这两行,开机后就会自动把你真正要分享的目录bind到虚拟路径底下唷! 在Client端要设定自动挂载也是加到fstab里面,如以下范例。 Client设定 /etc/fstab来自动挂载NFS Server

# <Server IP>:<分享目录> <挂载点> nfs4或nfs <参数> 0 0

# 使用NFSv4协议挂载

192.168.0.183:/ /NFSA nfs4 proto=udp,rsize=32768,wsize=32768,intr 0 0

# 使用NFSv3协议挂载

192.168.0.183:/export /NFSB nfs proto=udp,rsize=8192,wsize=8192,intr 0 0

这 个范例中,Client在开机后会自动mount Server上的 /export。不过一个是用传统的NFSv3,另外一个是NFSv4,它们可以同时使用。再次提醒,它们挂载的分享目录不同是因为NFSv4有虚拟根目 录的概念。后面的参数读者可以参考使用,笔者测试这样的参数在区网效能会比较好,参数详细说明在表17-3-1-2。 若你修改过fstab后,不想要重新启动,可以透过以下指令重新依照fstab的内容挂载。 依照fstab的内容重新挂载:

sudo mount –a

若你要看目前系统上有哪些File system被挂载上来,可以透过mount,它也会列出本地硬盘的挂载情形。 了解目前有哪些文件系统被挂载:

username@ubuntu:~ $ mount

???(略)???

nfsd on /proc/fs/nfsd type nfsd (rw)

rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

192.168.0.183:/ on /NFS type nfs4 (rw,proto=udp,intr,addr=192.168.0.183)

若当你要卸除NFS Filesystem,遇到系统资源忙碌而无法umount,这时候用Lazy unmount很有用。它会侦测该装置是否忙碌,等到有空档就自动帮你umount,通常笔者会配合force umount使用。 卸除NFS Filesystem

sudo umount -l -f /NFS # umount /NFS这个NFS Filesystem

看到这里,读者的NFS系统应该也架起来了吧!若有问题,可以先检查一下防火墙设定是不是把它挡掉了,若真的找不到原因,也欢迎和笔者联络,在能力所及的范围下可以互相讨论。 来源:http://zhumeng8337797.blog.163.com/blog/static/10076891420135130529994/



快乐成长 每天进步一点点