NFS 的安装与使用,Network File System
一般情况下文件系统都在内核中实现,RPC远程调用另一个主机上的函数。NFS依赖于RPC所以要先安装RPC,RPC是接受远程请求过来的函数调用的。NFS基于IP的认证。
RPC与NFS的安装:
yum -y install rpcbind #老版本叫portmap,没有就安装新版本,一样使用 yum -y install nfs-utils #安装NFS
CentOS 6上:
先启动 service rpcbind start 然后启动 service nfs start
查看本机rpc所监听的端口:rpcinfo -p localhost,在本机上localhost可以省略。
CentOS 7上:
systemctl start nfs && systemctl status nfs
nfs启动的进程:
nfsd 主服务进程,端口固定2049
mountd 挂载进程,端口随机
quotad 磁盘配额进程,端口随机
chkconfig nfs on 设置开机启动
配置文件:
NFS配置文件为 /etc/exports,配置文件的格式为一行一条,前面写要共享出去的目录,后面写可以访问的IP地址,地址后面紧挨着权限,用于控制此IP的访问权限,IP和地址之间没有空格,目录后面可以有多个IP以及对应的权限,用空格分格;这里的IP地址也可以换成网段、主机名等。
格式如下:
/shared 192.168.96.129(ro,async) 192.168.96.130(rw)
配置完成后可以用 showmount -e localhost 命令查看,共享列表,后面的IP可以省略,查看所有列表。更多选项可以使用man exports查看。
关于用户:
在NFS服务上的用户以用户ID为准,如在服务端的用户UID为600,名称为Stephone,在客户端的用户UID为600,名称为Jon,客户端Jon创建了一个文件,单是这个文件在服务器端所属主的用户名显示为Stephone,这就是以用户ID为准的方式。可以使用指定UID的方式在服务器端和客户端创建相同名称且相同UID的用户,使用命令:
useradd -u 600 Stephone
然后在服务器端使用如下命令给此用户权限,这样在客户端的Stephone也可以拥有此权限了。
setfacl -m u:Stephone:rwx /shared/nfs
修改配置文件后重新导出:
exportfs -rav 重新导出所有的共享目录,这样修改配置文件后就不用重启nfs了。
exportfs -ua 取消所有导出的目录,所有共享的目录都被取消
更多选项使用命令 man exportfs
选项注释:
rw 读写,对于root用户即使给了写权限也不能写入内容,因为默认情况下root用户会被映射为一个匿名的普通用户。
async 异步传输,默认
sync 同步传输
root_squash 压缩root权限
no_root_squash 不压缩root权限
all_squash 压缩所有用户的权限,映射到匿名用户
anonuid 匿名用户指定映射的UID
anongid 匿名用户指定映射的GID
/data 193.168.0.0/16(rw,sync,no_root_squash,no_all_squash)
在客户端主机上查看某主机的共享目录:
showmount -e 192.168.96.128 查看128服务器上共享的目录
Export list for 192.168.96.128:
/shared 192.168.0.0/16
将共享目录挂载:
先创建可供挂载的目录,mkdir /mnt/nfs,然后将网络磁盘挂载到本地即可像本地硬盘一样使用了。
mount -t nfs 192.168.96.128:/shared /mnt/nfs/
挂载好后在服务器端的共享目录任意建立一个文件,然后在客户端查看是否能访问到这个文件。
开机自动挂载:
192.168.199.150:/nfs /test nfs defaults,_netdev 0 0
0 不执行dump操作
0 不执行检测
可能会遇到如下情况:
问题1:
-bash: shwomount: command not found
这是因为没有安装mount命令使用yum -y install mount 安装即可
问题2:
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
这是由于被访问的nfs服务器上没有设置,向iptables里面添加2049端口即可,或关闭防火墙,service iptables stop
测试是否能够自动挂载:
卸载:
umount /mnt/nfs
重新挂载/etc/fstab文件:
mount -a
快速使用:
yum -y install nfs-utils vim /etc/exports /data 192.168.0.0/16(rw,sync,no_root_squash,no_all_squash) systemctl status nfs # 修改配置后重载 exportfs -rav # 查看某主机共享目录 showmount -e 192.168.96.128 # 挂载使用 mount -t nfs 192.168.96.128:/shared /mnt/nfs/ # 开机自动挂载 192.168.199.150:/nfs /test nfs defaults,_netdev 0 0