Skip to content

Linux/Windows NFS挂载配置完整指南

概述

NFS(网络文件系统)是一种分布式文件系统协议,允许客户端计算机像访问本地存储一样访问远程文件。本文档详细介绍Linux和Windows系统中挂载NFS共享的方法,包括Linux客户端配置、Windows驱动器映射和高级参数设置。

Linux NFS挂载

1. 安装NFS客户端

bash
# CentOS/RHEL/Fedora安装NFS工具
sudo yum install nfs-utils -y

# Ubuntu/Debian安装NFS工具
sudo apt install nfs-common -y

2. 启动NFS客户端服务

bash
# 启动NFS客户端服务
sudo systemctl start nfs-client.target

# 设置NFS客户端服务开机自启
sudo systemctl enable nfs-client.target

# 检查NFS客户端服务状态
systemctl status nfs-client.target

3. NFS客户端配置文件

NFS客户端默认配置文件位于:

  • /etc/nfsmount.conf
  • /etc/nfsmount.conf文件包含了NFS客户端的默认配置参数
  • 该文件中的配置参数可以用来设置NFS客户端的行为,如默认的超时时间、安全协议等
  • 可以根据需要进行修改,也可在mount时指定相关参数

4. 手动挂载NFS共享

bash
# 基本挂载语法
mount -t nfs [选项] 服务器:/共享目录 本地挂载点

# 示例:挂载NFS共享目录至本地目录
sudo mkdir -p /mnt/nfs
sudo mount -o vers=3 192.168.1.151:/ky_nfs /mnt/nfs

# 查看挂载结果
df -h /mnt/nfs

5. 挂载参数详解

参数说明常用值
versNFS协议版本3, 4, 4.1, 4.2
rsize读取块大小1048576 (1MB)
wsize写入块大小1048576 (1MB)
hard硬挂载(阻塞式)-
soft软挂载(非阻塞)-
intr允许中断-
nolock禁用文件锁-
timeo超时时间(十分之一秒)600
retrans重传次数2
fsc启用本地缓存-

6. 开机自动挂载

编辑/etc/fstab文件添加NFS挂载条目:

bash
# 备份fstab文件
sudo cp /etc/fstab /etc/fstab.bak

# 编辑fstab添加NFS挂载
sudo vi /etc/fstab

# 添加以下行(格式:服务器:/共享目录 挂载点 nfs 选项 0 0)
192.168.164.84:/ElecSign    /home/storage/    nfs    vers=3,_netdev,defaults    0    0

测试fstab挂载配置:

bash
# 挂载fstab中所有未挂载项
sudo mount -a

# 检查挂载结果
df -h /home/storage

7. 卸载NFS共享

bash
# 使用挂载点卸载
sudo umount /mnt/nfs

# 使用服务器路径卸载
sudo umount 192.168.1.151:/ky_nfs

# 强制卸载(如遇到繁忙)
sudo umount -f /mnt/nfs

# 懒惰卸载(当不再使用时卸载)
sudo umount -l /mnt/nfs

Windows NFS挂载

1. 启用NFS客户端功能

Windows需要启用NFS客户端功能:

  1. 通过控制面板 → 程序 → 启用或关闭Windows功能
  2. 勾选"NFS客户端"并安装
  3. 或使用PowerShell启用:
    powershell
    Enable-WindowsOptionalFeature -Online -FeatureName ClientForNFS-Infrastructure

2. 使用当前用户映射NFS共享

方法1:使用mount命令

powershell
# 映射NFS共享目录至驱动器Z:(使用当前用户)
mount.exe -o anon nolock casesensitive=yes \\172.18.0.226\nfs_test Z:

方法2:使用net use命令

powershell
# 永久映射NFS共享目录至驱动器W:
net use W: \\172.18.0.226\nfs_test

# 查看所有映射
net use

3. 使用SYSTEM用户映射NFS共享

由于Windows操作系统中SYSTEM用户身份的特殊性(内置账户,无法直接登录),我们可以通过任务计划程序实现以SYSTEM用户身份挂载NFS共享:

3.1 创建任务计划程序

  1. 打开任务计划程序(taskschd.msc)
  2. 创建基本任务
  3. 在安全选项中,通过"更改用户或组"将账户指定为"SYSTEM"
  4. 勾选"使用最高权限运行"

3.2 编写挂载脚本

创建BAT脚本文件(例如nfs_mount.bat):

batch
@echo off
mount.exe -o anon nolock casesensitive=yes \\172.18.0.226\nfs_test Y:

3.3 配置任务操作

  1. 在"操作"模块,将新建的NFS共享挂载BAT脚本创建为任务计划启动程序
  2. 点击确定创建计划任务,并运行该计划任务

3.4 验证挂载结果

运行成功后可在Windows资源管理器中查看到使用SYSTEM账户挂载的NFS共享磁盘,可能显示为"红叉"状态:

特点

  • 使用SYSTEM账户挂载的NFS共享磁盘,普通用户无法查看NFS共享的容量状态等信息
  • 但所有用户均可访问使用该NFS共享
  • 使用SYSTEM挂载的NFS共享磁盘,只能通过新建卸载NFS共享任务计划程序使用SYSTEM账户权限卸载

4. 卸载SYSTEM挂载的NFS共享

创建卸载脚本(nfs_unmount.bat):

batch
@echo off
umount.exe Y:

通过任务计划程序以SYSTEM用户身份运行卸载脚本。

高级配置

1. NFSv4配置

Linux系统挂载NFSv4:

bash
# 挂载NFSv4共享
sudo mount -t nfs4 -o vers=4.1 192.168.1.151:/export /mnt/nfs4

# /etc/fstab中配置
192.168.1.151:/export /mnt/nfs4 nfs4 vers=4.1,defaults,_netdev 0 0

2. 性能优化参数

bash
# 高性能挂载参数
sudo mount -t nfs -o rsize=1048576,wsize=1048576,hard,intr,noatime,nodiratime 192.168.1.151:/share /mnt/nfs

# /etc/fstab中配置
192.168.1.151:/share /mnt/nfs nfs rsize=1048576,wsize=1048576,hard,intr,noatime,nodiratime,_netdev,defaults 0 0

3. 安全挂载配置

bash
# 安全NFS挂载(使用Kerberos认证)
sudo mount -t nfs -o sec=krb5p,vers=4 192.168.1.151:/secure_share /mnt/secure_nfs

# /etc/fstab中配置
192.168.1.151:/secure_share /mnt/secure_nfs nfs sec=krb5p,vers=4,_netdev,defaults 0 0

4. 自动重连配置

创建脚本实现NFS自动重连:

bash
#!/bin/bash
# auto-nfs-reconnect.sh

SERVER="192.168.1.151"
SHARE="/ky_nfs"
MOUNT="/mnt/nfs"
LOG="/var/log/nfs-reconnect.log"

while true; do
    if ! mountpoint -q $MOUNT; then
        echo "$(date): NFS共享未挂载,尝试重新挂载..." >> $LOG
        mount -t nfs -o vers=3,rw $SERVER:$SHARE $MOUNT
        if [ $? -eq 0 ]; then
            echo "$(date): NFS共享重新挂载成功" >> $LOG
        else
            echo "$(date): NFS共享重新挂载失败" >> $LOG
        fi
    fi
    sleep 30
done

故障排查

1. Linux NFS挂载问题

bash
# 检查NFS服务器状态
showmount -e 192.168.1.151

# 检查可用NFS共享
showmount -a 192.168.1.151

# 测试NFS服务器连接
nfsstat -c

# 查看NFS挂载状态
nfsstat -m

# 查看内核NFS统计
nfsstat -v

2. Windows NFS挂载问题

powershell
# 查看网络连接
netstat -an | findstr 2049

# 测试NFS服务器连接
telnet 192.18.0.226 2049

# 查看事件查看器中相关错误
eventvwr.msc

3. 常见错误及解决

错误1:权限被拒绝

bash
# 解决方案:检查NFS服务器导出配置
showmount -e 192.168.1.151

# 或使用匿名用户挂载
sudo mount -o anon,uid=1000,gid=1000 192.168.1.151:/share /mnt/nfs

错误2:超时或连接失败

bash
# 解决方案:调整超时和重传参数
sudo mount -o timeo=600,retrans=2 192.168.1.151:/share /mnt/nfs

错误3:访问权限问题(Windows)

powershell
# 解决方案:调整注册表设置
# HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default
# 添加AnonymousUid和AnonymousGid,值为0

注意事项

⚠️ 安全提醒

  • 使用NFSv4或Kerberos认证提高安全性
  • 限制NFS共享的访问权限
  • 在防火墙中开放必要端口(111、2049等)

⚠️ 性能提示

  • 调整rsize/wsize参数提高传输效率
  • 使用hard挂载确保数据一致性
  • 避免在高延迟网络使用NFS

⚠️ 维护建议

  • 定期检查NFS挂载状态
  • 监控NFS服务器性能
  • 使用fstab实现稳定挂载

总结

NFS挂载在Linux和Windows系统中都有成熟的解决方案。Linux系统通过nfs-utils工具提供稳定的客户端功能,而Windows系统可通过NFS客户端或第三方工具实现挂载。根据实际需求选择合适的协议版本和挂载参数,并注意安全配置和性能优化。

用心记录,持续学习 | CNB