转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn]
目录
前景提要
NFS安装教程
旧服务器上
新服务器上
验证安装
优缺点
扩展
前景提要
我们新服务器的硬盘容量很小,但旧服务器的硬盘容量很大。如何在不拔硬盘的情况下,直接已本地目录的方式,将旧服务器的硬盘空间挂载到新服务器下?可以通过NFS共享实现。
NFS安装教程
旧服务器上
安装NFS服务端,比如228:
# 安装NFS服务端
sudo apt install nfs-kernel-server
# 检查是否已经启动
sudo systemctl status nfs-server
# 查看可用容量
df -h
# 创建一个NFS共享目录
sudo mkdir -p /mnt/share
# 给目录权限
sudo chown nobody:nogroup /mnt/share/ -R
sudo chmod 777 /mnt/share/* -R
编辑exports配置文件,控制访问权限:
sudo cp /etc/exports /etc/exports.bak
sudo vim /etc/exports
# 如果只允许一个客户端访问,可以只写一个客户端的IP地址
/mnt/share 192.168.43.131(rw,sync,no_subtree_check)
# 如果只允许多个客户端访问,可以如下一样写
/mnt/share 192.168.43.131(rw,sync,no_subtree_check)
/mnt/share 192.168.43.171(rw,sync,no_subtree_check)
/mnt/share 192.168.43.137(rw,sync,no_subtree_check)
# 如果运行一个网段的客户端访问,可以这样写:
/mnt/share 192.168.43.*(rw,sync,no_subtree_check)
或者
/mnt/share 192.168.43.0/24(rw,sync,no_subtree_check)
我们设置允许一个网段的访问:
/mnt/share 202.66.266.*(rw,sync,no_subtree_check,no_root_squash,crossmnt,fsid=0)
解释:
- rw:表示共享是可读可写的,即NFS客户端可以对共享目录进行读取和写入操作。
- sync:表示数据写入操作需要同步完成后才返回确认。当NFS客户端进行写入操作时,NFS服务器会等待数据完全写入到硬盘之后才返回确认给客户端。这样可以确保数据的一致性和可靠性,但也可能降低写入性能。
- no_root_squash:当使用no_root_squash选项时,NFS服务器将不会将来自NFS客户端的root用户权限限制为匿名用户权限。具体而言,如果客户端使用root权限访问NFS共享目录,那么服务器上的root用户将保持其完整的权限,包括对共享目录的读写权限。这个选项对于需要在NFS共享中保留root用户权限的场景非常有用,但也需要谨慎使用,因为它可能导致安全风险。
- no_subtree_check:当使用no_subtree_check选项时,NFS服务器将不会检查客户端请求的子目录是否在共享目录的子树范围内。默认情况下,NFS服务器会检查客户端请求的路径是否在共享目录的子树范围内,以确保安全性。但在某些情况下,特别是当共享的目录结构包含符号链接时,这可能会导致问题。使用no_subtree_check选项可以禁用这种检查,但同样需要谨慎使用,以确保共享目录的安全性。
- crossmnt:是NFS服务器配置选项之一,用于指定NFS共享的子目录的交叉挂载。当在NFS服务器上配置了交叉挂载时,可以允许NFS客户端挂载共享目录的子目录,而不仅仅是共享目录本身。通常情况下,NFS服务器只允许NFS客户端挂载共享目录本身,而不允许挂载共享目录的子目录。但通过使用crossmnt选项,可以在共享目录中启用子目录的挂载。
- fsid=0:是NFS(Network File System)服务器配置选项之一,用于指定NFS共享的文件系统标识符(File System Identifier)。在NFS配置中,每个共享的文件系统都需要一个唯一的标识符。默认情况下,NFS使用共享目录的inode号作为标识符,但这可能会导致一些问题,尤其是在重新挂载共享时。通过使用fsid=0选项,可以显式地指定NFS共享的标识符为0。这样做的目的是确保每个共享都具有相同的标识符,从而消除重新挂载导致的问题。当存在多个共享目录时,为每个共享目录设置fsid选项是一个良好的实践,尤其是当使用NFSv4或更高版本时。设置fsid可以确保每个共享目录具有唯一的标识符,避免潜在的冲突和问题。
重启服务
sudo exportfs -arv
sudo /etc/init.d/rpcbind restart
sudo /etc/init.d/nfs-kernel-server restart
# 查看端口监听
netstat -tl | grep nfs
添加防火墙
sudo iptables -A INPUT -p tcp --dport 111 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 111 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 2049 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 2049 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 58327 -j ACCEPT
sudo iptables -L INPUT -n -v
有可能是运行的firewall
# 查看运行状态,如果是running就表示激活
sudo firewall-cmd --state
# 已经放行的端口
sudo firewall-cmd --list-ports
# 已经放行的服务
sudo firewall-cmd --list-services
# 放行nfs、rpc服务
sudo firewall-cmd --add-service=nfs --add-service=rpc-bind --permanent
# 放行指定端口
# sudo firewall-cmd --add-port=2049/tcp --permanent
# 重新加载配置
sudo firewall-cmd --reload
# 如果还有问题,建议直接禁止firewalld(手动狗头)
sudo systemctl stop firewalld
sudo systemctl disable firewalld
新服务器上
安装NFS客户端,比如108:
# 安装NFS客户端
sudo apt install nfs-common -y
# 创建目录,准备挂载228
mkdir -p /mnt/share_228
# 或者
mkdir /home/data1/share_228
# 查看rpc连接信息
rpcinfo -p 202.66.266.228
# 挂载NFS
sudo mount -t nfs -o vers=4 -v 202.66.266.228:/mnt/share /home/data1/share_228
# 卸载NFS
# sudo umount nfs /home/data1/share_228
# 自动挂载NFS
sudo vim /etc/fstab
# 写入:
# 202.66.266.228:/mnt/share /home/data1/share_228 nfs defaults,vers=4,timeo=300,retrans=3,_netdev 0 0
# 重新加载已配置
sudo mount -a
验证安装
在新服务器上的/home/data1/share_228下添加文件,在旧服务器的/mnt/share下能同步显示;反向亦然。
优缺点
优点:就跟本地目录一样,使用非常方便。
缺点:当文件很大时候,传输就需要很久😢读取也就要很久。后知后觉。
扩展
samba也可以实现类似效果