关于NFS
NFS篇
现在有三台服务器需要实现文件实时同步,我们可以通过安装NFS服务端和客户端来实现
安装NFS服务器所有需要的软件包
yum install -y rpcbind nfs-utils
编辑exports文件,将目录共享出去,将要使用该共享目录的主机添加至该配置文件
vim /etc/exports
/mnt/data 192.168.34.1(rw,sync,fsid=0) 192.168.34.0/24(rw,sync,fsid=0)
192.168.34.1 和整个34网段的机器都可以挂载NFS机器上的/mnt/data目录到自己的文件系统中
rw 给予读写权限
sync 表示同步写
fsid=0 表示将/mnt/data这个目录包装成根目录
启动nfs服务
将rpcbind和nfs启动
systemctl enable --now rpcbind && systemctl enable --now nfs-server
确认NFS服务器状态和查看nfs信息
rpcinfo -p
systemctl status nfs-server
检查nfs是否共享我们想让其共享的目录
exportfs
在从服务器上挂载共享目录
yum install -y rpcbind nfs-utils && systemctl enable --now rpcbind && showmount -e nfs服务器的IP
挂载
mkdir /data && mount -t nfs4 nfsIP:/ /data && df -h
开机自动挂载
vim /etc/fstab
nfsIP:/ /data nfs4 rw,hard,intr,rpoto=tcp 0 0
客户端挂载后,写文件时可能会报一个权限问题:Permission denied。解决这个问题可以修改该nfs主服务器上的/etc/exports文件,改成如下内容:
vim /etc/exports
/data 192.168.34.0/24(rw,sync,fsid=0,anonuid=,anongid=)
查看uid
将uid加入上面
id root
让NFS重新读取配置
exports -rv
查看nfs配置
exportfs -v
但是你会发现,服务端可以读写客户端的文件,但是客户端的无法读写服务端的。
可以有下面的配置
/testfs 10.0.0.0/8(rw)
重启NFS服务以后,在客户机通过mount -o rw -t nfs 10.214.54.29:/testfs /rd1命令将网络文件mount到本地。执行完成之后,目录是可以访问了,但无法写入。感觉有点奇怪,明明在命令中指定可以写入了。于是到网上搜索资料,发现exports目录权限中,有这么一个参数no_root_squash。其作用是:登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!。默认情况使用的是相反参数 root_squash:在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的UID 与 GID 都会变成 nobody 那个身份。 因为我的客户端是使用root登录的,自然权限被压缩为nobody了,因此无法写入。将配置信息改为:
/testfs 10.0.0.0/8(rw,no_root_squash)
据说有点不安全,但问题是解决了。
另外,在测试NFS文件系统时,会经常mount和umount文件,但有时会出现device is busy的错误提示。你肯定感到很奇怪,我明明没有使用啊,看看你当前所在的目录,是不是在mount的文件目录中?回退到上层目录重新umount,是不是OK了?
-
1、exports参数说明
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async NFS在写入数据前可以相应请求
secure NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide 在NFS共享目录中不共享其子目录
no_hide 共享NFS目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认) no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squash root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID -
2、NFS管理命令
showmount -e 在NFS Server上执行此命令显示NFS Server上所有的共享卷;
showmount -e 192.168.1.100 在NFS Client上执行此命令显示NFS Server上所有共享卷;
exportfs -av 根据/etc/exports导出所有卷;
exportfs -rv 重新导出所有卷,增加/etc/exports中的新项目、删除不存在的项目、更新改变的项目;