分享

nfs 挂载

 pkeel 2011-06-03

6.10 - Ch17 NFS服务器

出自Ubuntu's Book

跳转到: 导航, 搜索

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 -p 192.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 tcp 890 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./projects/nfsv4/linux/ 抓最新的patch。若读者希望一切都没问题,不想再做一些hack,可以考虑用稳定的NFSv3。但若要在Internet传输,那么NFSv4的容易设定防火墙与加密的特性可以考虑一下!
由 于NFSv4使用rpc.idmapd这个daemon来处理User ID、Group ID和权限的对应,所以这个daemon在Client端和Server端都要启动,并且需要自己手动建立通讯pipe给svc gssd subsystem用,这些在Ubuntu都需要手动设定。记得这些设定一定要在Server和Client分别做过一次唷,设定好了就不需要再做了!

建立pipe目录给NFSv4使用:

sudo mkdir /var/lib/nfs/rpc_pipefs

加入以下两行到 /etc/fstab让rpc_pipefs和nfsd 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:~ $ sudo exportfs -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系统应该也架起来了吧!若有问题,可以先检查一下防火墙设定是不是把它挡掉了,若真的找不到原因,也欢迎和笔者联络,在能力所及的范围下可以互相讨论。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多