Linux 挂载 Windows SMB/CIFS 网络共享

本文以 //monitor.com/QP/Minio_Data 为例,将 Windows/SMB 共享挂载到 Linux 的 /opt/Minio_Data。文中的服务器地址、共享名、用户名和 UID/GID 请替换为实际值。

本文使用的是 SMB/CIFS 协议,不是 NFS。Linux 客户端需要安装 cifs-utils。

一、准备信息

开始前确认以下信息:

  • SMB 服务器地址:monitor.com
  • 共享路径:QP/Minio_Data
  • 本地挂载点:/opt/Minio_Data
  • SMB 用户名和密码
  • Linux 上运行程序的用户 UID/GID。可以使用下面的命令查询:
1
id

确认服务器可以解析后再继续:

1
getent hosts monitor.com

如果没有返回 IP 地址,请先检查 DNS、/etc/hosts 或网络连接,不要继续执行挂载命令。

二、安装客户端并创建挂载点

1
2
sudo apt install -y cifs-utils
sudo mkdir -p /opt/Minio_Data

三、创建 SMB 凭据文件

不要把密码直接写入命令行或 /etc/fstab。创建只有 root 可以读取的凭据文件:

1
2
sudo install -m 600 /dev/null /root/.smbcredentials-monitor
sudo vi /root/.smbcredentials-monitor

文件内容如下,将值替换为实际的 SMB 账号:

1
2
username=allclient
password=请替换为实际密码

如果 SMB 服务器使用域账号,再增加一行:

1
domain=YOUR_DOMAIN

检查文件权限,结果应为 -rw-------:

1
sudo stat -c '%A %U:%G %n' /root/.smbcredentials-monitor

四、手动挂载

下面的 uid=1000,gid=1000 表示将共享文件映射给 UID/GID 为 1000 的本地用户。如需映射给其他用户,请先用 id 用户名 查询并替换这两个值。

1
2
sudo mount -t cifs //monitor.com/QP/Minio_Data /opt/Minio_Data \
-o credentials=/root/.smbcredentials-monitor,uid=1000,gid=1000,vers=3.0

vers=3.0 指定使用 SMB 3.0。如果服务器不支持 SMB 3.0,可以根据服务器配置改为 vers=2.1 或其他受支持的版本,不建议直接删除该参数。

五、验证挂载结果

确认挂载类型和来源:

1
2
findmnt /opt/Minio_Data
mountpoint /opt/Minio_Data

以映射用户身份执行一次读写测试:

1
sudo -u "$(id -un)" sh -c 'touch /opt/Minio_Data/.mount-test && rm -f /opt/Minio_Data/.mount-test'

如果共享只读或当前账号没有写权限,touch 会失败;这通常需要检查 SMB 共享权限以及挂载使用的 UID/GID。

六、卸载共享

1
sudo umount /opt/Minio_Data

确认已经卸载:

1
mountpoint -q /opt/Minio_Data && echo '仍然挂载' || echo '已卸载'

七、配置开机自动挂载

编辑 /etc/fstab:

1
sudo vim /etc/fstab

追加以下内容。每个字段之间使用空格或 Tab 分隔:

1
2
# SMB/CIFS network share
//monitor.com/QP/Minio_Data /opt/Minio_Data cifs credentials=/root/.smbcredentials-monitor,uid=1000,gid=1000,vers=3.0,_netdev,nofail,x-systemd.automount 0 0

配置项说明:

配置项 作用
credentials=... 从 root 专用文件读取账号和密码
uid=1000,gid=1000 设置挂载内容在 Linux 上显示的属主
vers=3.0 使用 SMB 3.0 协议
_netdev 标记为网络文件系统,等待网络就绪后再处理
nofail 网络共享不可用时不阻塞系统启动
x-systemd.automount 访问挂载点时再建立连接

八、测试 fstab 配置

保存文件后,先让 systemd 重新读取配置,再测试所有 fstab 项:

1
2
3
sudo systemctl daemon-reload
sudo mount -a
findmnt /opt/Minio_Data

mount -a 没有输出通常表示执行成功。如果共享使用了 x-systemd.automount,也可以访问目录触发实际连接:

1
ls -la /opt/Minio_Data

常见问题

mount error(13): Permission denied

检查凭据文件中的用户名、密码和域名,并确认该账号有访问 QP/Minio_Data 的权限:

1
sudo cat /root/.smbcredentials-monitor

不要把上述命令的输出复制到公开日志或工单中。

mount error(2): No such file or directory

确认共享路径和大小写正确,并确认 monitor.com 可以解析:

1
2
getent hosts monitor.com
sudo mkdir -p /opt/Minio_Data

挂载后访问很慢或启动时等待

检查 _netdev,nofail,x-systemd.automount 是否正确写入 /etc/fstab,并查看本次启动的挂载日志:

1
2
systemctl status opt-Minio_Data.automount
journalctl -b -u opt-Minio_Data.automount --no-pager

查看内核和 CIFS 错误

1
dmesg | tail -n 50

Linux 挂载 Windows SMB/CIFS 网络共享
https://jgq12138.github.io/2023/06/19/linux_mount_Network_location/
作者
JGQ12138
发布于
2023年6月19日
许可协议