首页 > Sysadmin > 正文

Linux 共享文件方案:Samba 与 NFS 实战

huyuanwen 2026-11-04 Sysadmin

草稿待审 Samba/NFS 安装与配置命令基于官方文档核查,尚未在 WSL 实际执行;基础文件权限操作已通过 WSL 验证。

Samba 和 NFS 是 Linux 下最成熟的两种共享方案,前者兼容 Windows/macOS,后者面向 Linux-to-Linux 高性能场景。本文按实际部署顺序给出配置步骤,并提供回滚与排错指南。

一、TL;DR:按场景选方案

场景 推荐方案 原因
Linux ↔ Windows 互访 Samba 原生支持 SMB/CIFS,Windows 客户端直接挂载
Linux ↔ Linux 高性能 NFS POSIX 语义,开销低,适合批量小文件
临时单机共享 Python http.server 无需配置,一条命令启动,仅适合临时
  • 生产环境优先选择系统服务(Samba/NFS),临时调试可用单文件服务器。
  • 临时共享不要暴露公网,建议加 --bind 127.0.0.1。

二、Samba(SMB)文件共享

Samba 实现 SMB/CIFS 协议,让 Linux 目录可被 Windows/macOS/Linux 客户端访问 [1]。Ubuntu 官方文档同样以 samba 包为安装起点 [3]。

sudo apt update && sudo apt install -y samba
sudo mkdir -p /srv/samba/share
sudo chown root:users /srv/samba/share
sudo chmod 2775 /srv/samba/share

在 /etc/samba/smb.conf 末尾追加共享段:

[shared]
   path = /srv/samba/share
   browseable = yes
   read only = no
   guest ok = yes

检查配置并启动服务:

sudo testparm -s
sudo systemctl enable --now smbd

testparm -s 会解析 smb.conf 并报告语法错误,启动前建议先跑一遍 [2]。

客户端挂载

  • Windows:\\服务器IP\shared
  • Linux:sudo mount -t cifs //服务器IP/shared /mnt -o guest

三、NFS 文件共享

NFS 是 Linux 原生网络文件系统,客户端挂载后像本地磁盘一样操作 [4]。

sudo apt update && sudo apt install -y nfs-kernel-server
sudo mkdir -p /srv/nfs/share
sudo chown nobody:nogroup /srv/nfs/share

在 /etc/exports 添加导出规则:

/srv/nfs/share 192.168.1.0/24(rw,sync,no_subtree_check)

生效并挂载:

sudo exportfs -ra

客户端:

sudo mount -t nfs 服务器IP:/srv/nfs/share /mnt

mount.nfs 是 mount(8) 的 NFS 专用子命令,支持 NFSv3/v4 [5]。exportfs 维护 NFS 导出表,-ra 重新读取 /etc/exports 并生效 [6]。

四、回滚与排错速查

回滚

  • Samba:sudo systemctl stop smbd && sudo rm /etc/samba/smb.conf.bak(改配置前先备份)
  • NFS:sudo exportfs -u 客户端IP:/srv/nfs/share 卸载单条导出,或 sudo systemctl stop nfs-server
现象 原因 处理
testparm 报 unknown parameter smb.conf 参数拼写错误或版本不支持 检查 Samba 版本,注释掉可疑行
mount error: Permission denied NFS 导出未生效或 IP 段不匹配 sudo exportfs -v 检查当前导出表
Windows 无法访问 \\IP\share smbd 未运行或防火墙拦截 sudo systemctl status smbd;放行 139/445
挂载后 ls 卡死 NFS 服务端宕机或网络闪断 先 umount -f /mnt,再排查网络

五、局限性

  • WSL2 中 apt install samba 与 apt install nfs-kernel-server 安装超时,Samba/NFS 服务端命令未在本次 WSL 实测;基础文件权限操作已验证通过。
  • WSL2 作为 NFS 客户端时,需确保 Windows 防火墙放行 2049 端口。
  • 容器环境通常不建议运行 NFS 服务端,建议改用独立存储节点或托管文件服务。
  • 公网共享必须启用加密或 VPN,本文不涉及 WAN 传输安全配置。

六、FAQ

Q1:Samba 和 NFS 可以同时装吗? 可以。两者监听不同端口(Samba 139/445,NFS 2049),只要防火墙规则不冲突即可共存。

Q2:/etc/exports 里 no_root_squash 是什么意思? 默认情况下 NFS 会把 root 请求映射为匿名用户 nobody;加上 no_root_squash 后客户端 root 在服务端也拥有 root 权限,存在安全风险,仅在受信内网使用 [4]。

Q3:修改 smb.conf 后必须重启服务吗? smbd 支持热加载:sudo systemctl reload smbd,比 restart 更安全,不会断开已有连接。

Q4:客户端挂载 NFS 时提示 “Connection refused” 怎么处理? 先确认服务端 nfs-server 已启动,再检查 /etc/exports 语法与客户端 IP 段是否匹配,最后用 showmount -e 服务器IP 验证导出列表可见。

Q5:Windows 10/11 能挂载 NFS 吗? 可以,但需要安装 “适用于 NFS 的客户端” 功能,且仅支持 NFSv3。跨平台推荐 Samba,兼容性更好。


参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。