草稿待审 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,兼容性更好。
参考资料
- [1] smbd(8) – Linux manual page (man7.org)(man7-smbd)
- [2] smb.conf(5) — samba-common-bin — Debian bookworm-backports(debian-smbconf)
- [3] Set up Samba as a file server — Ubuntu Server Docs(ubuntu-samba)
- [4] nfs(5) – Linux manual page (man7.org)(man7-nfs)
- [5] mount.nfs(8) – Linux manual page (man7.org)(man7-mountnfs)
- [6] exportfs(8) – Linux manual page (man7.org)(man7-exportfs)
文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。