NFS & Automount
项目选择
NFS (Network FileSystem)
在 Unix/Linux 的世界中,用来做资料交换存取最常用的方法,莫过於 NFS (Network FileSystem) 机制了,它最早是由
Sun 所提出的,而后来在 Unix/Linux 上一直被广泛的使用。
使用 NFS,它最大的特色就是使用 RPC (Remote Procedure Call) 做 Port 对应,而做 Port 对应的工作,是使用
pormap 来做的,也就是说,一旦决定要使用 NFS 来使 Unix/Linux 之间的档案交换,那么就需要先启动 portmap 来使
RPC 控制,如此 NFS 才能使用。
NFS 分享设定
首先,在做 NFS 分享前,要先编好设定档 /etc/exports,内容非常简单,我们就来看看以下实做吧:
[root@ldap-dns /]# vi /etc/exports
====================================
/misc 192.168.1.0/24(ro)
====================================
[root@ldap-dns /]# |
好了,这样设定完,只要是 192.168.1.0/24 的机器都可以来挂载,但是只能读取 (Read Only) 不可写入。
当然,如果你要开於其它权限的话,可以参考下面的参数:
- ro
这个分享目录只能唯读。
- rw
这个分享目录可以读取和写入。
- root_squash
Client 若是以 root 存取,那么会把 root 的权限改为和 anonymous 一样。
- no_root_squash
Client 若是以 root 存取,那么就不限制权限。
- all_squash
无若 Client 是否为 root,其权限都只跟 anonymous 一样。
启动 NFS 服务
首先,一定要记得启动 NFS 之前一定要先把 portmap 启动才行,否则会出错:
[root@ldap-dns /]# service portmap start
Starting portmap: [ OK ]
[root@ldap-dns /]# service nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS daemon: [ OK ]
Starting NFS mountd: [ OK ]
[root@ldap-dns /]# |
Only for SuSE
若你的系统是使用 SuSE,那么因为系统没有 service 指令,所以无法使用 service 来启动 portmap,但启动方法也很简单:
suse:/etc/init.d # /etc/init.d/portmap start
Starting RPC portmap daemon done
suse:/etc/init.d /etc/init.d/nfsserver start
Starting kernel based NFS server done
suse:/etc/init.d # |
启动之后,可以使用 showmount 看看有分享那些目录:
[root@ldap-dns /]# showmount -e
Export list for ldap-dns.l-penguin.idv.tw:
/misc 192.168.1.0/24
[root@ldap-dns /]#[root@ldap-dns /]# showmount -e
Export list for ldap-dns.l-penguin.idv.tw:
/misc 192.168.1.0/24
[root@ldap-dns /]# |
你可以使用 rpcinfo 这个工具来看看有那些服务使用 rpc 资源:
[root@ldap-dns misc]# rpcinfo -p 192.168.1.211
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100011 1 udp 828 rquotad
100011 2 udp 828 rquotad
100011 1 tcp 831 rquotad
100011 2 tcp 831 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 1028 nlockmgr
100021 3 udp 1028 nlockmgr
100021 4 udp 1028 nlockmgr
100021 1 tcp 1037 nlockmgr
100021 3 tcp 1037 nlockmgr
100021 4 tcp 1037 nlockmgr
100005 1 udp 844 mountd
100005 1 tcp 847 mountd
100005 2 udp 844 mountd
100005 2 tcp 847 mountd
100005 3 udp 844 mountd
100005 3 tcp 847 mountd
[root@ldap-dns misc]# |
Client 存取设定
若要使用网路上分享出来的 NFS 资源的话,使用 mount 指令就可以帮我们解决了,但是还有一个最重要的前提是,千万不要忘了先把 portmap
启动,如此才能正确的挂载:
[root@mailgw ~]# service portmap start
Starting portmap: [ OK ]
[root@mailgw ~]# mount -t nfs -o ro,soft,intr,timeo=10 192.168.1.211:/misc
/mnt
[root@mailgw ~]# |
上面的 option 选项里,记得要下 "soft,intr,timeo" 来指定挂载逾时和软性挂载,指定软性挂载的好处是,在
NFS Server 没有回应或关机时,避免 Client 会完全停掉而无法无应,此时就算是关机也无法解决。
当然,你可以使用 mount 指令看看目前有那些目录被挂载起来:
[root@mailgw mnt]# mount
192.168.1.211:/misc on /mnt type nfs (ro,soft,intr,timeo=10,addr=192.168.1.211)
[root@mailgw mnt]# |
上面只截取 NFS 挂载部份。
现在,就来看看 /mnt 里,是否能看到 192.168.1.211 分享出来的 /misc 目录:
[root@mailgw mnt]# ls -l /mnt
total 8
-rw-r--r-- 1 root root 0 Aug 17 22:38 example
drwxr-xr-x 2 root root 4096 Aug 17 22:39 java
drwxr-xr-x 2 root root 4096 Aug 17 22:39 tomcat
[root@mailgw mnt]# |
当然,可想而知,你是不可以在上面建立档案的,因为在 NFS Server 挂载的选项就是只能唯读呀!
Automount
使用了 NFS 之后,我想大家应该会知道,若大家连线越多,那么对 Server 的资源也就浩用越大,若是 Client 能设定成只在需要的时候才自动挂上必要的目录,而在一段时间之后若没有再使用就卸载,如此对於
Server 的使用也能相对的减少资源使用。
autofs 可以用来自动挂载资料,也就是我们这次的重点,而 autofs 是一个 daemon,一旦启动后它会驻列在系统中,他会先载入设定档然后监视指定的目录,一旦使用者要存取所指定的目录时就会开始自动挂载起来。以下的范列,我将示范在主机里分享
/home 目录可供 Client 挂载,而在 Server 的设定,完全就跟往前一样设定好分享条件,然后启动 NFS 就可以了。所以我们要调整的是
Client 的部份。
/etc/auto.master
auto.master 主要是设定需要监控那一个目录,然后再指定其设定档:
[root@mailgw ~]# vi /etc/auto.master
=====================================
/home /etc/auto.home --timeout=30
===================================== |
上面的意思是,autofs 要去监控 /home 目录,而设定档在 /etc/auto.home 这个档案里,而 timeout 时间是
30 秒。
Only for SuSE
若你的系统是使用 SuSE,那么请改为下面的设定:
[root@mailgw ~]# vi /etc/auto.master
=====================================
/home /etc/auto.home "--timeout 30"
===================================== |
/etc/auto.home
auto.home 是由 auto.master 设定而来的,里面设定了 /home 目录下的挂载来源和参数:
[root@mailgw ~]# vi /etc/auto.home
=====================================
* -rw,soft,intr 192.168.1.211:/home/&
===================================== |
上面的意思是,/home 目录下的任何子目录,其子目录都可以读写,并且是软性挂载,而来源是 192.168.1.211 的 /home 目录。"&"
的意思是,对应到 "*" 的值,若是要进入 /home/steven 时,那么就会自动把 192.168.1.211 的
/home/steven 挂进来。
启动 autofs
要启动 autofs 之前,因为我们的来源是使用 NFS,所以 portmap 是一定要先开的,再来启动 autofs。
[root@mailgw ~]# service portmap start
Starting portmap: [ OK ]
[root@mailgw ~]# service autofs start
Starting automount: [ OK ]
[root@mailgw ~]# |
Only for SuSE
若你的系统是使用 SuSE Linux,设定方法都是一样的,而启动方法则请参考下面的范例:
suse:/var/log # /etc/init.d/autofs start
Starting service automounter/usr/sbin/automount: done
suse:/var/log # |
现在再来看看目前的 mount 状态:
[root@mailgw ~]# mount
/dev/sda1 on / type ext3 (rw)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
none on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
automount(pid2774) on /home type autofs (rw,fd=4,pgrp=2774,minproto=2,maxproto=4)
[root@mailgw ~]# |
上面可以看到 automount 正在监控 /home 目录,而且为我们还没有进入 /home 目录里的任何资料夹,所以会没有其它的 mount
资讯。
现在可以试著进入 /home/steven 这个资料夹里:
[root@mailgw ~]# cd /home/steven
[root@mailgw steven]# |
接著马上来看看 mount 的变化:
[root@mailgw steven]# mount
/dev/sda1 on / type ext3 (rw)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
none on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
automount(pid2774) on /home type autofs (rw,fd=4,pgrp=2774,minproto=2,maxproto=4)
192.168.1.211:/home/steven on /home/steven type nfs (rw,soft,intr,addr=192.168.1
.211)
[root@mailgw steven]# |
看到了吧,最后一行正显示著 192.168.1.211 的 /home/steven 正被我们挂载。
08/21/2005
|