nfs共享
实验环境:
服务端:192.168.36.158
客户端:192.168.36.159
iptables and selinux disabled
一.nfs(Net File System)简介
NFS分为和客户机两部分,每个主机都有自己的内核级服务:外部数据表示(XDR,eXternal Data Representation)、远程过程调用(RPC,Remote Procedure Call)、I/O监控程序和锁监控程序。每个主机还有自己的用户级服务。内核级服务和用户级服务都依赖于主机的功能:NFS客户机或者是NFS服务器。当然,还要依赖于每个主机使用的不同功能的配置文件(如果是服务器,则用的是/etc/exports配置文件,如果是客户机,则用的是/etc/fstab配置文件)。如果一台主机既是服务器又是客户机,那么它需要运行两个部分的服务。
在服务器端,portmap、 mountd、 nfsd三个监控程序将在后台运行。portmap监控程序用来注册基于rpc的服务。当一个RPC的监控程序启动的时候,它告诉portmap监控程序它在哪一个端口进行侦听,并且它在进行什么样的RPC服务。当一个客户机向服务器提出一个RPC请求,那么它就会和portmap监控程序取得联系以确定RPC消息应该发往的端口号。而Mountd监控程序的功能是来读取服务器端的/etc/exportfs文件并且创建一个将服务器的本地文件系统导出的主机和网络列表,因而客户机的挂接(mount)请求都被定位到mountd监控程序(daemon)。当验证了服务器确实具有挂接所请求的文件系统的权限以后,mountd为请求的挂接点返回一个文件句柄。而nfsd监控程序则被服务器用来处理客户机端发过来的请求,由于服务器需要同时处理多个客户机的请求,所以在缺省情况下,在当中将会自动启动八个nfsd线程。当然,如果NFS服务器特别忙的时候,系统有可能根据实际情况启动三十个线程。
二.共享资源
/etc/exports参数详解
rw 可读写的权限
ro 只读的权限
no_root_squash 登入到NFS主机的用户如果是ROOT用户,他就拥有ROOT的权限
root_squash 在登入NFS主机使用目录的使用者如果是root时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的UID与GID都会变成nobody那个身份
all_squash 不管登陆NFS主机的用户是什么都会被重新设定为nobody
anonuid 将登入NFS主机的用户都设定成指定的userid,此ID必须存在于/etc/passwd中
anongid 同anonuid,但是变成groupID就是了
sync 资料同步写入器中
async 资料会先暂时存放在内存中,不会直接写入硬盘
insecure 允许从这台机器过来的非授权访问
exportfs[-aruv] 参数
a 全部挂载(或卸载)/etc/exports档案内的设定
r 重新挂载/etc/exports 里面的设定,也同步的更新/etc/exports和/var/lib/nfs/xtab里面的内容
u 卸载某一目录
v 在export的时候,将分享的目录显示到荧屏上
#exportfs -rv 重新export一次
#exportfs -au 全部卸载
服务端
# yum install -y nfs nfs-utils rpcbind
# /etc/init.d/rpcbind start
# /etc/init.d/nfs start
# mkdir /test
# cd /test/
# touch file{1..3}
# vim /etc/exports
/test 192.168.36.159(rw)
# exportfs -rv
# showmount -e localhost
Export list for localhost:
/test 192.168.36.159
客户端
# yum install -y nfs nfs-utils rpcbind
# showmount -e 192.168.36.158
Export list for 192.168.36.158:
/test 192.168.36.159
# mount 192.168.36.158:/test /mnt/
# df
192.168.36.158:/test 18208256 2638592 14638080 16% /mnt
cd /mnt/
# ls
file1 file2 file3
# rm -f file1
rm: cannot remove `file1': Permission denied
# touch file4
touch: cannot touch `file4': Permission denied
服务端
# ls -ld .
drwxr-xr-x. 2 root root 4096 Aug 19 04:30 .
# chmod 1777 .
# ls -ld .
drwxrwxrwt. 2 root root 4096 Aug 19 04:30 .
客户端
# touch file4
# ll
total 0
-rw-r--r--. 1 root root 0 Aug 19 04:30 file1
-rw-r--r--. 1 root root 0 Aug 19 04:30 file2
-rw-r--r--. 1 root root 0 Aug 19 04:30 file3
-rw-r--r--. 1 nfsnobody nfsnobody 0 Aug 19 04:37 file4
# rm -f file4
服务端
/test 192.168.36.159(rw,no_root_squash)
# exportfs -rv
exporting 192.168.36.159:/test
客户端
在挂载目录mnt下
# touch file4
# ll
total 0
-rw-r--r--. 1 root root 0 Aug 19 04:30 file1
-rw-r--r--. 1 root root 0 Aug 19 04:30 file2
-rw-r--r--. 1 root root 0 Aug 19 04:30 file3
-rw-r--r--. 1 root root 0 Aug 19 04:52 file4
二.多个共享资源
服务端
根目录下创建目录/public和/public2
[root@test1 public]# mkdir /public2
[root@test1 public]# cd ../public2
[root@test1 public2]# touch file{2..5}
/public 192.168.36.159(rw,no_root_squash)
/public2 192.168.36.159(ro,sync)
[root@test1 ~]# exportfs -rv
exporting 192.168.36.159:/public2
exporting 192.168.36.159:/public
客户端
[root@test1 test]# showmount -e 192.168.36.158
Export list for 192.168.36.158:
/public2 192.168.36.159
/public 192.168.36.159
[root@test1 ~]# umount /mnt/
[root@test1 ~]# mount 192.168.36.158:/ /mnt/
192.168.36.158:/ 18208256 2780544 14496128 17% /mnt
[root@test1 ~]# cd /mnt/
[root@test1 mnt]# ls
public public2
[root@test1 mnt]# cd public
[root@test1 public]# ls
test test2
[root@test1 public2]# touch file1
touch: cannot touch `file1': Read-only file system
[root@test1 public2]# rm -f file2
rm: cannot remove `file2': Read-only file system