NFS是Network File System的简写(网络文件系统)。NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。NFS至少有两个主要部分:一台服务器和一台(或者更多)客户机,客户机远程访问存放在服务器上的数据。
1、软件
1.1 RPC 主程序:rpcbind
port映射工作。
1.2 NFS 主程序:nfs-utils
提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其他相关 documents 与说明文件、执行文件等的软件。
2、NFS的软件结构
主要配置文件:/etc/exports
参数值 | 内容说明 |
rw ro |
该目录分享的权限是可擦写 (read-write) 或只读 (read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关。 |
sync async |
sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘! |
no_root_squash root_squash |
客户端使用 NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行!默认值为root_squash。 |
all_squash | 不论登入 NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) 啦! |
anonuid anongid |
anon 意指 anonymous (匿名者) 前面关于 *_squash 提到的匿名用户的 UID 设定值,通常为 nobody(nfsnobody),但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd 当中! anonuid 指的是 UID 而 anongid 则是群组的 GID 啰。 |
3、配置NFS服务器端
配置NFS服务器
# /etc/init.d/rpcbind start
# /etc/init.d/nfs start
# /etc/init.d/nfslock start
# chkconfig rpcbind on
# chkconfig nfs on
# chkconfig nfslock on
查看rpcbind服务:
# netstat -tulnp|grep rpc
说明:
(1)rpcbind 启动的 port 在 111 ,同时启动在 UDP 与 TCP;
(2)nfs 本身的服务启动在 port 2049 上;
(3)其他 rpc.* 服务启动的 port 则是随机产生的,因此需向 port 111 注册。
--RPC 服务的注册状况:
# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 40292 status
100024 1 tcp 12731 status
100011 1 udp 875 rquotad
100011 2 udp 875 rquotad
100011 1 tcp 875 rquotad
100011 2 tcp 875 rquotad
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
100227 3 tcp 2049 nfs_acl
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 2 udp 2049 nfs_acl
100227 3 udp 2049 nfs_acl
100021 1 udp 62943 nlockmgr
100021 3 udp 62943 nlockmgr
100021 4 udp 62943 nlockmgr
100021 1 tcp 44053 nlockmgr
100021 3 tcp 44053 nlockmgr
100021 4 tcp 44053 nlockmgr
100005 1 udp 54406 mountd
100005 1 tcp 39433 mountd
100005 2 udp 54406 mountd
100005 2 tcp 39433 mountd
100005 3 udp 54406 mountd
100005 3 tcp 39433 mountd
--查看支持NFS版本:
# rpcinfo -t localhost nfs
program 100003 version 2 ready and waiting
program 100003 version 3 ready and waiting
program 100003 version 4 ready and waiting
--查看NFS服务器共享:
# showmount -e localhost
Export list for localhost:
/ags/arcgis/server/usr 10.238.208.36
--NFS关于目录权限全部参数:
# cat /var/lib/nfs/etab
/ags/arcgis/server/usr10.238.208.36(rw,async,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)
注意:anonuid=65534 对比/etc/passwd 后,会发现是nfsnobody。 如果有其他客户端挂载了你的 NFS 文件系统时,那么该客户端与文件系统信息就会被记录到 /var/lib/nfs/xtab 里头去的。
# grep 65534 /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
--重置NFS:
# exportfs [-aruv]
选项与参数:
-a :全部挂载(或卸除) /etc/exports 档案内的设定
-r :重新挂载 /etc/exports 里面的设定,此外,亦同步更新 /etc/exports
及 /var/lib/nfs/xtab 的内容!
-u :卸除某一目录
-v :在 export 的时候,将分享的目录显示到屏幕上!
# 1. 重新挂载一次 /etc/exports 的设定
[root@www ~]# exportfs -arv
# 2. 将已经分享的 NFS 目录资源,通通都卸除
[root@www ~]# exportfs -auv
# 这时如果你再使用 showmount -e localhost 就会看不到任何资源了!
4、配置NFS客户端
# /etc/init.d/rpcbind start
--如果服务器端有启动 nfslock 的话,客户端也要启动才能生效
# /etc/init.d/nfslock start
--挂载
# mkdir -p /home/nfs/public
# mount -t nfs 192.168.100.254:/home/public /home/nfs/public
--卸载
# umount /home/nfs/public
--查看挂在参数:
# mount | grep addr
192.168.100.254:/home/public on /home/nfs/public type nfs (rw,noexec,nosuid, nodev,vers=4,addr=192.168.100.254,clientaddr=192.168.100.10)
本文转自stock0991 51CTO博客,原文链接:http://blog.51cto.com/qing0991/1419412,如需转载请自行联系原作者