Ubuntu & Debian 系统下挂载 Samba 共享目录的完整指南
文章目录
- Ubuntu & Debian 系统下挂载 Samba 共享目录的完整指南
- 前提条件
- 挂载 Samba 共享
- 临时挂载
- 避免明文密码
- 永久挂载
- 常见选项
- 卸载
- 故障排查
Ubuntu & Debian 系统下挂载 Samba 共享目录的完整指南
想把 NAS 中的内容通过 Samba 挂载到 OrangePi 5B,但是 OrangePi 5B 提供的内核默认是没有开启 CONFIG_CIFS
的,所以就整理了一下。
在 Ubuntu/Debian 系统上挂载 Samba 共享目录可以通过 mount
命令结合 cifs
文件系统类型实现。以下是具体步骤和示例:
前提条件
-
确保系统已安装
cifs-utils
软件包。如果未安装,可以运行:sudo apt update sudo apt install cifs-utils
-
确认你有 Samba 服务器的 IP 地址或主机名、共享目录名称,以及访问所需的用户名和密码(如果需要认证)。
挂载 Samba 共享
临时挂载
使用以下命令临时挂载 Samba 共享目录:
sudo mount -t cifs -o username=YOUR_USERNAME,password=YOUR_PASSWORD //SMB_SERVER_IP/SHARE_NAME /mnt/smb
//SMB_SERVER_IP/SHARE_NAME
:Samba 服务器地址和共享目录名,例如//192.168.1.100/share
。/mnt/smb
:本地挂载点(需提前创建,例如sudo mkdir /mnt/smb
)。-o username=YOUR_USERNAME,password=YOUR_PASSWORD
:访问共享的用户名和密码。
示例:
sudo mkdir /mnt/smb
sudo mount -t cifs -o username=admin,password=123456 //192.168.1.100/share /mnt/smb
挂载成功后,可用 ls /mnt/smb
查看共享目录内容。
避免明文密码
为安全起见,避免在命令行输入密码,可以使用凭据文件:
-
创建凭据文件,例如
/etc/smb_credentials
:sudo nano /etc/smb_credentials
输入以下内容:
username=YOUR_USERNAME password=YOUR_PASSWORD
保存并退出,然后设置权限:
sudo chmod 600 /etc/smb_credentials
-
修改挂载命令:
sudo mount -t cifs -o credentials=/etc/smb_credentials //192.168.1.100/share /mnt/smb
永久挂载
要实现开机自动挂载,编辑 /etc/fstab
:
-
打开文件:
sudo nano /etc/fstab
-
添加一行:
//192.168.1.100/share /mnt/smb cifs credentials=/etc/smb_credentials,uid=1000,gid=1000,iocharset=utf8,rw,vers=3.0,x-systemd.automount,x-systemd.requires=network-online.target,x-systemd.device-timeout=30 0 0
参数说明:
-
//192.168.1.100/share
- 作用:指定远程 Samba 共享路径。
- 192.168.1.100:Samba 服务器的 IP 地址。
- share:Samba 服务器上共享的目录名。
-
/mnt/smb
-
作用:本地挂载点,即远程共享将在本地系统上挂载到 /mnt/smb 目录。
-
需要提前创建:
sudo mkdir -p /mnt/smb
-
-
cifs
- 作用:指定挂载类型为 CIFS(Common Internet File System)。Samba 共享通常使用 CIFS 作为协议。
-
credentials=/etc/smb_credentials
-
作用:指定存储 Samba 认证信息的文件路径,避免直接在 fstab 中暴露用户名和密码。
-
文件格式:
username=your_username password=your_password domain=your_domain # 如果没有域,可省略
-
权限建议:
sudo chmod 600 /etc/smb_credentials
-
-
uid=1000,gid=1000
-
作用:指定挂载目录的用户 ID(uid)和组 ID(gid)。
-
1000:通常是 Linux 系统中第一个普通用户的 UID 和 GID(可以通过 id 命令检查)。
例如,运行
id
命令查看当前用户的 UID 和 GID:id
输出示例:
uid=1000(your_username) gid=1000(your_username) groups=1000(your_username),...
-
效果:保证挂载的 Samba 目录属于特定用户,避免权限问题。
-
-
iocharset=utf8
- 作用:设置文件名的字符编码为 UTF-8,防止中文等特殊字符乱码。
-
rw
- 作用:以读写模式挂载(默认 ro 是只读)。
-
vers=3.0
-
作用:指定 CIFS/Samba 版本。
-
版本兼容性:
- vers=1.0 适用于旧设备(如 Windows XP 共享)。
- vers=2.0 适用于 Windows 7 及部分旧 Samba 服务器。
- vers=3.0 适用于 Windows 8 及以上,或新的 Samba 服务器(推荐)。
-
如何检查支持的版本:
在 Samba 服务器上运行以下命令:
testparm -s | grep 'server min pro tocol'
输出示例:
server min protocol = SMB2
这表示服务器支持 SMB2 及以上版本。
-
-
x-systemd.automount
- 作用:启用 systemd 自动挂载机制。
- 好处:
- 当访问 /mnt/smb 目录时才会触发挂载(按需挂载)。
- 避免开机时因网络未准备好导致挂载失败。
-
x-systemd.requires=network-online.target
- 作用:确保 Samba 挂载在 网络服务启动后 执行,防止开机时网络未准备好导致挂载失败。
-
x-systemd.device-timeout=30
- 作用:指定 systemd 挂载超时时间为 30 秒。
- 用途:
- 防止网络不稳定导致挂载失败(默认超时可能较短)。
- 如果 CIFS 服务器在 30 秒内无法响应,systemd 会放弃挂载。
-
0 0
- 第一个 0(dump):是否使用 dump 备份,通常对网络挂载无意义,设为 0(不备份)。
- 第二个 0(fsck):是否使用 fsck 检查文件系统,cifs 不支持 fsck,必须设为 0(不检查)。
-
-
保存退出后,测试挂载:
sudo mount -a
常见选项
rw
:读写权限(默认)。ro
:只读权限。vers=3.0
:指定 SMB 协议版本(视服务器支持情况而定)。file_mode=0644,dir_mode=0755
:设置文件和目录默认权限。
示例(指定协议版本):
sudo mount -t cifs -o credentials=/etc/smb_credentials,vers=3.0 //192.168.1.100/share /mnt/smb
卸载
卸载 Samba 共享:
sudo umount /mnt/smb
故障排查
-
挂载失败时,检查网络连接(
ping SMB_SERVER_IP
)。 -
查看日志:
sudo tail -f /var/log/syslog
。 -
确保 Samba 服务器允许你的 IP 访问,且防火墙未阻止端口 445 或 139。
-
mount error: cifs filesystem not supported by the system
-
检查并安装 cifs-utils
-
检查内核是否支持 CIFS
CIFS 是一个内核级别的文件系统,挂载需要内核加载 cifs 模块。运行以下命令检查是否已加载:
lsmod | grep cifs
-
如果有输出,说明 cifs 模块已加载。
-
如果没有输出,尝试手动加载:
sudo modprobe cifs
再次运行
lsmod | grep cifs
确认模块是否加载成功。如果加载失败或仍无输出,可能需要检查内核支持情况。
-
-
验证内核是否编译了 CIFS 支持
如果 modprobe cifs 返回错误(如 modprobe: FATAL: Module cifs not found),可能是你的内核未编译 CIFS 支持。你可以检查当前内核的配置文件:
zcat /proc/config.gz | grep CONFIG_CIFS
- 如果输出包含 CONFIG_CIFS=m 或 CONFIG_CIFS=y,说明内核支持 CIFS。
- 如果输出是 CONFIG_CIFS is not set 或没有输出,说明当前内核未启用 CIFS。(到这那就只能重新编译内核了,OrangePi 5B 内核开启 CONFIG_CIFS 通过 Samba 挂载 NAS 路径)
-