之前实验室的 NFS 频繁卡死,在网上又找不到对应的文章来解决问题,之后改为NFSv4 解决了这个问题(同时又无文章介绍 NFS v4 的迁移)。。
本文主要介绍一个解决NFS频繁卡死的问题
关于NFSv3 如何 迁移到 NFSv4 有一个粗略的外文版本,大家可以参考:
https://community.hpe.com/hpeb/attachments/hpeb/itrc-156/354601/1/329228.pdf
以下是鄙人实践的总结,供大家参考
首先 NFSv4 只能有一个根目录,和NFSv3 不同
如: 在NFSv3中,我们可以随便写 /etc/exports 文件
/home/nfs1 *(rw,sync,no_subtree_check,no_root_squash)
/home/nfs2 *(rw,sync,no_subtree_check,no_root_squash)
但是在NFSv4 中,只能有一个根目录,意味着我们的目录必须按如下结构组织(/srv/nfs 为根目录)
/srv/nfs/
/src/nfs/nfs1/
/src/nfs/nfs2
那么怎么让之前的目录迁移到下面目录呢?,把目录内容移动过去当然是一种方法,但是后面实践时我会介绍一种更便捷的方法
迁移分为 5 步
1. 知道哪些目录需要迁移
2. 选择一个目录作为 NFSv4 虚拟根目录
3 将数据迁移到 虚拟根目录中 (有两种方法)
4 修改/etc/exposts
5 客户端 mount
例如 /home/nfs1 与 /home/nfs2 是我想要迁移的目录
/home/nfs1 *(rw,sync,no_subtree_check,no_root_squash)
/home/nfs2 *(rw,sync,no_subtree_check,no_root_squash)
你可以
mkdir /exports/
有两种可以迁移的方式
• 将数据移动到目标目录下
mv /home/* /src/nfs4/
•将数据的目录mount bind 到目标目录下 (recommended):
/srv/nfs/nfs1
mount –bind /home/user1/ /srv/nfs4/nfs1
/srv/nfs/nfs2
mount –bind /home/user2/ /srv/nfs4/nfs2
如果文件系统不一样,光是 mount bind 还不够, 在 编写 /etc/exports 时,记得给所有目录(根目录和子目录)添加 crossmnt 选项
# 3. NFS共享目录文件配置 更改为 v4 模式
sudo vi /etc/exports
# 添加以下信息
# 服务根目录
/srv/nfs4 *(rw,fsid=0,sync,crossmnt,insecure,no_root_squash,no_subtree_check)
# 子目录
/srv/nfs4/nfs1 *(rw,sync,insecure,crossmnt,no_root_squash,no_subtree_check)
/srv/nfs4/nfs2 *(rw,sync,insecure,crossmnt,no_root_squash,no_subtree_check)
这里来解释一下一些关键参数
fsid=0 : 该参数 表示 /srv/nfs4 是nfs4的根目录,指定之后子目录必须在后面
* : * 代表任意ip地址的电脑都可以访问,如果填写 192.168.100.248,则只有该ip电脑可以访问
crossmnt: 这个参数是我们 可以使用 mount --bind 直接绑定目录的关键,他允许不同文件系统直接访问
no_root_squash: 如果不添加这个参数,非 host 宿主机root用户将无法更改nfs目录中的权限
客户端mount有两种方式:(ip请自行修改)
sudo mount -t nfs4 192.168.100.248:/nfs1 /mnt/nfs-storage
sudo mount -t nfs4 192.168.100.248:/nfs2 /mnt/nfs-ssd
192.168.100.248:/nfs1 /mnt/nfs1 nfs4 _netdev,soft,auto 0 0
192.168.100.248:/nfs2 /mnt/nfs2 nfs4 _netdev,soft,auto 0 0
之后只需重启服务即可,这里列出一些好用的命令
service rpcbind restart
service nfs-server restart
# 刷新读取 /etc/exports 文件
sudo exportfs -a
# 刷新读取 /etc/fstab 文件 (客户端好使)
sudo mount -a
之后卡顿问题就会消失了。