Ubuntu 配置 NFS 网络文件系统 🖥️
🌐 掌握在 Ubuntu 上配置和管理 NFS 网络文件系统的完整流程!本指南从基础概念到高级优化,涵盖服务器端和客户端的全方位配置,助你轻松实现跨网络文件共享。
📖 目录导航
✨ NFS 简介与优势 NFS (Network File System) 是一种分布式文件系统协议,允许通过网络在不同主机间共享文件系统,具有以下优势:
🌐 网络共享 :实现多台服务器之间的文件共享和访问
⚡ 高性能 :提供快速的网络文件访问速度
🔄 透明访问 :客户端可以像访问本地文件一样访问远程文件
👥 多用户支持 :支持多个客户端同时访问共享目录
🛡️ 权限控制 :可以设置不同的访问权限和安全性选项
💾 资源集中 :集中存储管理,节省存储空间
📊 NFS 版本对比
版本
特性
适用场景
NFSv2
基础功能,32位文件大小限制
老旧系统兼容
NFSv3
64位文件大小,异步写入
大多数现有环境
NFSv4
状态协议,强安全性,复合操作
现代环境推荐
NFSv4.1
并行NFS(pNFS),会话 trunking
高性能计算环境
NFSv4.2
服务器端复制,空间预留
最新应用场景
🚀 快速开始 1. 使用科技lion一键脚本工具 1 2 sudo curl -sS -O https://kejilion.pro/kejilion.sh && chmod +x kejilion.sh && ./kejilion.sh
2. 安装 NFS 客户端和服务器软件 1 2 3 4 5 sudo apt update && sudo apt install nfs-kernel-server nfs-common -ydpkg -l | grep nfs
🖥️ 一、Ubuntu 作为 NFS 服务器配置 1. 创建并配置共享目录 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 sudo mkdir -pm 755 /mnt/mydisksudo chown nobody:nogroup /mnt/mydisksudo tee /etc/exports <<'EOF' /mnt/mydisk *(rw,fsid=0,no_subtree_check,no_root_squash,insecure,sync ) EOF sudo exportfs -rsudo exportfs -v
2. 重启 NFS 服务器 1 2 3 4 5 6 7 8 9 10 11 sudo service nfs-kernel-server restartsudo /etc/init.d/nfs-kernel-server restartsudo systemctl restart nfs-kernel-serversudo systemctl enable nfs-kernel-server
3. 验证 NFS 服务器状态 1 2 3 4 5 6 7 8 9 10 11 sudo systemctl status nfs-kernel-serversudo showmount -esudo rpcinfo -pnfsstat -s
💻 二、Ubuntu 作为 NFS 客户端配置 1. 临时挂载 NFS 共享 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 mkdir -pm 755 /mnt/ARS2-NFSmount -t nfs -o rw,hard,intr,timeo=300,retrans=3 10.10.10.251:/mnt/mydisk /mnt/ARS2-NFS mkdir -pm 755 /mnt/PVE-NFSmount -t nfs -o rw,hard,intr,timeo=300,retrans=3 10.10.10.254:/mnt/ntfs /mnt/PVE-NFS mkdir -pm 755 /mnt/Debian-NFSmount -t nfs -o rw,hard,intr,timeo=300,retrans=3 10.10.10.247:/mnt/mydisk /mnt/Debian-NFS df -hT /mnt/*touch /mnt/ARS2-NFS/test_file && echo "写入测试成功" || echo "写入测试失败"
2. 永久挂载 NFS 共享 方法一:覆盖 /etc/fstab 文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 sudo mkdir -pm 755 /mnt/ARS2-NFS /mnt/PVE-NFS /mnt/Debian-NFSsudo tee /etc/fstab <<'EOF' 10.10.10.251:/mnt/mydisk /mnt/ARS2-NFS nfs rw,hard,intr,timeo=300,retrans=3,nofail,x-systemd.device-timeout=15s 0 0 10.10.10.254:/mnt/ntfs /mnt/PVE-NFS nfs rw,hard,intr,timeo=300,retrans=3,nofail,x-systemd.device-timeout=15s 0 0 10.10.10.245:/mnt/mydisk /mnt/Debian-NFS nfs rw,hard,intr,timeo=300,retrans=3,nofail,x-systemd.device-timeout=15s 0 0 EOF sudo mount -avsudo reboot
方法二:追加到 /etc/fstab 文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 sudo mkdir -pm 755 /mnt/Alpine-NFSsudo tee -a /etc/fstab <<'EOF' 10.10.10.242:/mnt/mydisk /mnt/Alpine-NFS nfs rw,hard,intr,timeo=300,retrans=3,nofail,x-systemd.device-timeout=15s 0 0 EOF sudo mount /mnt/Alpine-NFSsudo reboot
3. 测试挂载配置 1 2 3 4 5 6 7 8 sudo mount -amount | grep nfs df -hT | grep nfs
🔧 三、NFS 挂载管理 1. 查看 NFS 挂载状态 1 2 3 4 5 6 7 8 9 10 11 df -hT /mnt/*mount | grep nfs cat /proc/mounts | grep nfsnfsstat -c
挂载目录详情示例: | 文件系统 | 类型 | 大小 | 已用 | 可用 | 已用% | 挂载点 | | :———————————- | :—: | :—: | :—: | :—: | :—-: | :——————— | | 10.10.10.251:/mnt/mydisk | nfs | 2.7T | 1.8T | 823G | 69% | /mnt/ARS2-NFS | | 10.10.10.254:/mnt/ntfs | nfs | 932G | 216G | 717G | 24% | /mnt/PVE-NFS | | 10.10.10.247:/mnt/mydisk | nfs | 16G | 7.9G | 6.9G | 54% | /mnt/Ubuntu-NFS |
2. 取消 NFS 挂载 1 2 3 4 5 6 7 8 9 10 11 12 13 14 sudo umount /mnt/ARS2-NFSsudo umount -a -t nfssudo umount -f /mnt/ARS2-NFSsudo umount -l /mnt/ARS2-NFSsudo fuser -km /mnt/ARS2-NFS
🔍 四、NFS 共享查看与管理 1. 查看 NFS 共享信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 sudo showmount -e 10.10.10.254sudo showmount -esudo showmount -anfsstat -s rpcinfo -p
2. NFS 状态监控 1 2 3 4 5 6 7 8 9 10 11 nfsstat -s nfsstat -c sudo nfsstat -mnfsiostat 5
3. 自动检查 NFS 共享脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 cat > ./check_nfs_shares.sh <<'EOF' servers=( "10.10.10.242" "10.10.10.252" "10.10.10.243" "10.10.10.254" "10.10.10.251" "10.10.10.245" "10.10.10.246" "10.10.10.247" ) for server in "${servers[@]} " ; do echo "-----------------------" echo -e "\033[1;31m检查服务器: $server \033[0m" if ping -c 1 -W 1 "$server " &> /dev/null; then echo -e "\033[1;32m✓ 服务器在线\033[0m" timeout 5s showmount -e "$server " 2>/dev/null && \ echo -e "\033[1;32m✓ NFS服务正常\033[0m" || \ echo -e "\033[1;31m✗ NFS服务异常或未运行\033[0m" else echo -e "\033[1;31m✗ 服务器离线\033[0m" fi echo "-----------------------" done EOF chmod +x ./check_nfs_shares.sh./check_nfs_shares.sh (crontab -l 2>/dev/null; echo "0 * * * * /path/to/check_nfs_shares.sh >> /var/log/nfs_check.log" ) | crontab -
⚙️ 五、高级配置与优化 1. NFS 性能优化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 sudo tee -a /etc/nfs.conf <<'EOF' [nfsd] threads=16 host= port= vers4=y vers4.0=y vers4.1=y vers4.2=y [mountd] manage-gids=y host= port= [statd] state-directory-path=/var/lib/nfs/statd [nfsdcld] storage-directory=/var/lib/nfs/nfsdcld [exportd] debug=0 EOF sudo tee -a /etc/sysctl.conf <<'EOF' sunrpc.tcp_slot_table_entries = 128 sunrpc.udp_slot_table_entries = 128 fs.nfs.nfs_congestion_kbps = 125000 EOF sudo sysctl -psudo systemctl restart nfs-kernel-server
2. 防火墙配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 sudo ufw allow from 10.10.10.0/24 to any port nfssudo ufw allow from 10.10.10.0/24 to any port mountdsudo ufw allow from 10.10.10.0/24 to any port nlockmgrsudo tee -a /etc/sysctl.conf <<'EOF' fs.nfs.nfs_callback_port = 8765 fs.nfs.nlm_udpport = 8766 fs.nfs.nlm_tcpport = 8767 EOF sudo ufw statusrpcinfo -p
3. 自动挂载 (autofs) 配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 sudo apt install autofs -ysudo tee /etc/auto.master <<'EOF' /mnt/nfs /etc/auto.nfs --timeout =300 --ghost EOF sudo tee /etc/auto.nfs <<'EOF' ars2 -fstype=nfs,rw,hard,intr,timeo=300,retrans=3 10.10.10.251:/mnt/mydisk pve -fstype=nfs,rw,hard,intr,timeo=300,retrans=3 10.10.10.254:/mnt/ntfs debian -fstype=nfs,rw,hard,intr,timeo=300,retrans=3 10.10.10.247:/mnt/mydisk EOF sudo systemctl restart autofsls /mnt/nfs/ars2
🔒 六、安全注意事项 1. 限制 NFS 访问权限 1 2 3 4 5 6 7 8 9 10 11 sudo tee /etc/exports <<'EOF' /mnt/mydisk 10.10.10.0/24(rw,sync ,no_subtree_check,no_root_squash) /mnt/secure 10.10.20.5(ro,sync ,no_subtree_check) 10.10.20.6(ro,sync ,no_subtree_check) EOF sudo exportfs -rsudo exportfs -v
2. 使用更安全的 NFSv4 1 2 3 4 5 6 7 8 9 10 sudo tee -a /etc/fstab <<'EOF' 10.10.10.251:/mnt/mydisk /mnt/ARS2-NFS nfs4 rw,hard,intr,timeo=300,retrans=3,nofail,x-systemd.device-timeout=15s,sec=krb5p 0 0 EOF sudo sed -i 's/^RPCNFSDOPTS=".*"$/RPCNFSDOPTS="-N 2 -N 3 -V 4.2"/' /etc/default/nfs-kernel-serversudo systemctl restart nfs-kernel-server
3. 定期检查 NFS 安全 1 2 3 4 5 6 7 8 9 10 11 12 13 14 sudo showmount -esudo showmount -asudo tail -f /var/log/syslog | grep nfssudo exports -v | grep -E '(insecure|no_root_squash)' sudo nmap -sV -p 111,2049,20048 --script nfs* 10.10.10.251
4. 使用Kerberos认证(高级) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 sudo apt install krb5-user libpam-krb5 -ysudo cp /etc/krb5.conf /etc/krb5.conf.backupsudo editor /etc/krb5.confsudo sed -i 's/^SECURE_NFS=.*/SECURE_NFS="yes"/' /etc/default/nfs-commonkinit nfs/$(hostname -f) klist sudo systemctl restart nfs-common nfs-kernel-server
🐛 七、故障排除 1. 常见问题解决 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ping -c 3 10.10.10.251 sudo systemctl status nfs-kernel-serversudo ufw statusdmesg | grep nfs rpcinfo -p sudo netstat -tulnp | grep -E '(2049|111|20048)' sudo rpcbind -wsudo systemctl restart nfs-common
2. 强制重新挂载 1 2 3 4 5 6 7 8 9 sudo umount -a -t nfssudo mount -amount | grep nfs ssh nfs-server "sudo exportfs -v"
3. 清除 NFS 缓存 1 2 3 4 5 6 7 8 9 10 11 sudo /etc/init.d/nfs-common restartsudo /etc/init.d/nfs-kernel-server restartsudo rpcbind -wsudo systemd-resolve --flush-caches
4. 日志分析 1 2 3 4 5 6 7 8 9 10 11 12 13 14 sudo journalctl -u nfs-kernel-server -fsudo journalctl -u nfs-common -fsudo cat /proc/fs/nfsd/versionssudo cat /proc/fs/nfsd/pool_statsecho 32767 > /proc/sys/sunrpc/nfsd_debugecho 32767 > /proc/sys/sunrpc/nfs_debugsudo nfsstat -m
📊 总结 通过本指南,你已经学会了在 Ubuntu 系统上配置和管理 NFS 共享的完整流程:
✅ NFS 服务器配置 :设置共享目录和访问权限
✅ NFS 客户端配置 :临时和永久挂载远程共享
✅ 挂载管理 :查看、取消和监控 NFS 挂载
✅ 高级配置 :性能优化和安全设置
✅ 故障排除 :解决常见的 NFS 连接问题
🎯 最佳实践总结
版本选择 :尽可能使用 NFSv4,它更安全且功能更丰富
安全配置 :限制访问IP范围,避免使用 no_root_squash
性能优化 :根据网络条件调整超时和重传参数
监控日志 :定期检查NFS日志,及时发现和解决问题
备份配置 :定期备份 /etc/exports 和 /etc/fstab 文件
📚 扩展资源
💡 提示:在生产环境中,建议使用更安全的 NFSv4 协议,并限制只有可信的 IP 地址可以访问 NFS 共享。定期检查 NFS 日志和权限设置,确保系统安全。
🌐 现在你可以轻松地在多个服务器之间共享文件了!如果有任何问题,欢迎查阅上述资源或在社区寻求帮助。