NFS 可以把NFS server 上的文件及文件共享给NFS client 服务器
两个概念,NFS Server(Master) 和 NFS Client
NFS Server 可以把本服务器上的文件和文件夹共享给NFS Client, NFS Client 可以在共享的文件和文件夹上进行读写操作,并且实时返回给NFS Master
NFS Server 一般作为存储服务器,常见为使用RAID 5 和 RAID 10 的存储服务器,容量比较大. 对于一些图片站和网盘站点,网站所在的服务器一般为NFS Client,NFS Client 把图片和文件直接存储在NFS Server上
为了方便对NFS进行user id 和 group id 进行统一管理,我们一般需要NFS Server 和 NFS Client 使用同一种操作系统, 比如说centos 和 centos. 当然了,分别使用不同的操作系统,比如说centos 和 debian 也是可以的,就是有点麻烦而已.
下面进行详细的安装步骤:
无论是CentOS 6 和 CentOS 7, 安装步骤基本都一致,这里推荐CentOS 7. RHEL系的操作系统越新越好用
服务器配置:
NFS Server Hostname: server.unixmen.local NFS Server IP Address: 192.168.1.101/24
NFS Client Hostname: client.unixmen.local NFS Client IP Address: 192.168.1.102/24
NFS服务器端配置:
CentOS 6:
yum install nfs-utils nfs-utils-lib chkconfig nfs on service rpcbind start service nfs start
CentOS 7:
yum install nfs-utils nfs-utils-lib systemctl enable rpcbind systemctl enable nfs-server systemctl enable nfs-lock systemctl enable nfs-idmap systemctl start rpcbind systemctl start nfs-server systemctl start nfs-lock systemctl start nfs-idmap
因为CentOS 7 在系统上改了好多,所以安装稍微有点不同,其实都是同一个库
下面配置共享目录,假设我们需要共享/home 目录给client
vi /etc/exports
然后添加下面:
/home 192.168.0.102 (rw,sync,no_root_squash,no_subtree_check)
参数的解释:
rw: 这个选项允许client server 在共享目录上进行读和写的操作
ro: 只读
sync: 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
no_root_squash: 登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!
root_squash: 在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个系统账号的身份
all_squash: 将远程访问的所有普通用户及所属组都映射为匿名用户或用户组 (nfsnobody)
no_all_squash: 与all_squash 相反, 默认配置
anonuid=xxx: 将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
anongid=xxx: 将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
这里需要注意的, NFS 进行映射的时候,用的是uid 和 gid, 而非是用户名和group 的名字. 所以通常的做法是, 在NFS server 和 NFS client 上使用相同的用户名和用户组,以及相同UID和 GID
相同的用户名和用户组这个好解决, UID 和 GID不同的话,需要update uid 和 gid以使他们相同. 在centos 上我们经常使用军哥的lnmp,用户名和用户组都为www,加入uid 为501, gid 为501, 则我们可以用
(rw, sync, no_subtree_check, all_squash, anonuid=501, anongid=501)
async: 将数据先保存在内存缓冲区中,必要时才写入磁盘;
subtree: 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
配置完成以后,我们需要export这个配置来时他生效:
exportfs -a
下面我们需要配置NFS Client
安装NFS:
yum install nfs-utils nfs-utils-lib
mount 共享目录给 /home
mount -t nfs 192.168.1.101:/home /home
然后我们就可以通过df -h 看到mount 的目录或者mount 来查看
如果需要开机启动时自动mount,我们需要编辑/etc/fstab
192.168.1.101:/home /home nfs rw,sync,hard,intr 0 0
移除NFS mount
umount /home