前言
NFS(Network file system)服务器实现了局域网不同主机、不同操作系统的文件共享。
注意,客户端和服务端必须具备相同的账号才能够访问目录或者文件。
图.1 NFS服务器共享目录与client示意图
基本上NFS端口是2049,但它还有其它的程序启动额外端口,功能非常多,所以使用了RPC(Remote Procedure Call)来管理。
RPC
所有NFS服务都会将端口信息注册给RPC,所以RPC起到了中介的作用,在服务端和客户端之间作为一个桥梁。
访问NFS存在一些问题,与用户名、uid等有关,造成一些身份的错乱(NIS服务解决了问题,这里不展开),下面仅假设服务端和客户端有相同的用户名和用户名对应的uid也想同(毕竟是在一个机器上测试,肯定相同啦)。
相关文件
/etc/exports NFS主要配置文件
/usr/sbin/exportfs 维护NFS的命令,操作/etc/exports文件
/var/lib/nfs/* 包含日志文件etab\xtab
/usr/sbin/showmount 客户端查询服务器共享资源的命令
①/etc/exports
root@jammg:/etc# cat exports
...
/tmp 192.168.1.0/24(rw,no_root_squash) *ecu.cn(ro) localhost(rw)
...
如上,192.168.1.0这个网段的主机可以读写该目录,但请注意,最终的权限还要看用户在此目录的权限(drwxrwxrwx),no_root_squash代表以root登陆时不会被压缩成匿名用户;可使用通配符,ecu.cn域的主机均可读。还有很多其它参数,这里不介绍。
注意,每个主机限制以空格分开。
使用
启动NFS服务:
#/etc/init.d/rpcbind start
[ ok ] Starting rpcbind (via systemctl): rpcbind.service.
客户端查看主机共享状况:
showmount [-ae] [hostname|ip]
-a 显示当前主机NFS连接共享状态
-e 显示指定主机/etc/exports共享的状态
#showmount -e localhost
Export list for localhost:
/tmp 192.168.1.115
可以看到/tmp目录被共享出来。
另外,如果重新修改了/etc/eaports可不用重启NFS,使用exportfs命令:
exportfs [-aruv]
-a 重新挂载(或卸载,因为目录可能是增或是减)/etc/exports
-r 重新挂载
-u 卸载某一目录
-v 在屏幕输出共享信息
root@jammg:/etc# exportfs -arv
exportfs: /etc/exports [2]: Neither 'subtree_check' or 'no_subtree_check' specified for export "192.168.1.115:/tmp".
Assuming default behaviour ('no_subtree_check').
NOTE: this default has changed since nfs-utils version 1.0.x
exporting 192.168.1.115:/tm
此时,共享的信息就被更新了。
挂载:
#mkdir testnfs
#mount -t nfs 192.168.1.115:/tmp /testnfs
#cd testnfs;ls -la
总用量 92
drwxrwxrwt 19 root root 4096 3月 31 18:11 ./
drwxr-xr-x 24 root root 4096 3月 30 20:08 ../
-rw------- 1 jammgit jammgit 0 3月 31 10:43 config-err-cyE39x
srw------- 1 jammgit jammgit 0 3月 31 10:43 fcitx-socket-:0=
....
drwxrwxrwt 2 root root 4096 3月 31 10:43 .X11-unix/
drwxrwxrwt 2 root root 4096 3月 31 10:42 .XIM-unix/
可以看到/tmp目录的内容以成功挂载到/testnfs。
卸载:
#umount /testnfs
还有很多权限、安全的细节暂且不深入。