Ubuntu 开机自动挂载 NAS 磁盘完全指南 | CIFS/NFS 网络存储教程
为什么需要挂载 NAS?
在网络存储时代,将 NAS(Network Attached Storage)挂载到 Linux 服务器可以:
- 💾 扩展存储空间:突破 VPS 本地磁盘限制
- 🔄 数据集中管理:多服务器共享同一存储池
- 🛡️ 数据备份冗余:重要文件异地备份
- 📊 媒体库统一管理:Plex/Jellyfin/Emby 直接读取
- 💰 成本优化:大容量 HDD 比 SSD 便宜得多
常见网络文件系统对比
| 协议 | 适用场景 | 性能 | 安全性 | 配置难度 |
|---|---|---|---|---|
| CIFS/SMB | Windows 共享、通用场景 | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐(简单) |
| NFS | Linux 之间、高性能需求 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| SSHFS | 临时挂载、加密传输 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| iSCSI | 块级存储、数据库 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
推荐选择:
- 🟢 通用场景: CIFS/SMB(兼容性最好)
- 🔵 Linux 集群: NFS(性能最优)
- 🔴 安全传输: SSHFS(加密通道)
方法一:CIFS/SMB 挂载(推荐)
1. 创建挂载点
首先在 Ubuntu 的 /mnt 目录下新建一个 NAS 挂载目录 nas_share:
sudo mkdir -p /mnt/nas_share目录命名建议:
/mnt/nas-media- 媒体文件/mnt/nas-backup- 备份数据/mnt/nas-docs- 文档资料/mnt/nas-docker- Docker 数据卷
2. 安装 cifs-utils
sudo apt update
sudo apt install cifs-utils -y验证安装:
# 检查版本
mount.cifs --version
# 查看支持的选项
man mount.cifs3. 查看用户的 uid 和 gid
id root在此处要查看的用户,就是你希望使用 Ubuntu 上的哪个用户去挂载NAS磁盘。
比如我希望以 root 去挂载NAS磁盘,等挂载成功后,磁盘里的文件所有者就是root,这样便对磁盘的内容具有相应的读写和执行权限。
在此记下此用户的 uid 和 gid,分别是 0 和 0 ,在编辑 /etc/fstab 的时候要写进去。
查看其他用户:
# 查看特定用户
id www-data
# 查看所有用户
cat /etc/passwd | grep -E "/bin/bash|/bin/sh"4. 创建凭证文件(安全推荐)
⚠️ 重要: 不要在 /etc/fstab 中明文写入密码!
创建凭证文件:
sudo nano /etc/samba/credentials添加以下内容:
username=your_nas_username
password=your_nas_password
domain=WORKGROUP # 如果需要设置严格权限:
sudo chmod 600 /etc/samba/credentials
sudo chown root:root /etc/samba/credentials5. 编辑启动挂载文件 fstab
sudo nano /etc/fstab在文件末尾添加以下内容:
方式 1:使用凭证文件(推荐)
//192.168.2.10/share /mnt/nas_share cifs credentials=/etc/samba/credentials,uid=0,gid=0,vers=3.0,_netdev 0 0方式 2:直接写入(不推荐)
//192.168.2.10/share /mnt/nas_share cifs username=NAS的用户名,password=NAS用户名的密码,uid=0,gid=0,vers=3.0,_netdev 0 0参数详解
| 参数 | 说明 | 推荐值 |
|---|---|---|
//192.168.2.10/share | NAS 的共享路径,格式为 //IP/共享名 | 根据实际修改 |
/mnt/nas_share | 本地挂载点 | 自定义 |
cifs | 使用 CIFS/SMB 协议 | 固定 |
credentials | 凭证文件路径 | /etc/samba/credentials |
uid | 挂载后文件所有者 UID | 0 (root) 或 1000 (普通用户) |
gid | 挂载后文件所属组 GID | 0 (root) 或 1000 |
vers | SMB 协议版本 | 3.0(最新)或 2.0 |
_netdev | 等待网络就绪后再挂载 | 必须添加 |
iocharset=utf8 | 字符编码(中文支持) | utf8 |
file_mode | 文件权限 | 0644 |
dir_mode | 目录权限 | 0755 |
rw | 读写模式 | rw(默认) |
soft | 软挂载(超时不卡死) | soft |
timeo | 超时时间(十分之一秒) | 600(60秒) |
retrans | 重试次数 | 3 |
完整示例:
//192.168.2.10/media /mnt/nas-media cifs credentials=/etc/samba/credentials,uid=1000,gid=1000,vers=3.0,iocharset=utf8,file_mode=0644,dir_mode=0755,_netdev,soft,timeo=600,retrans=3 0 06. 测试并挂载
测试 fstab 配置(不会真的挂载):
sudo mount -a如果没有报错,说明配置正确。
查看挂载状态:
# 查看所有挂载
df -h
# 查看特定挂载
mount | grep nas_share
# 查看详细信息
ls -la /mnt/nas_share预期输出:
Filesystem Size Used Avail Use% Mounted on
//192.168.2.10/share 4.0T 2.1T 1.9T 53% /mnt/nas_share方法二:NFS 挂载(Linux 专用,高性能)
1. 安装 NFS 客户端
sudo apt install nfs-common -y2. 创建挂载点
sudo mkdir -p /mnt/nfs-share3. 查看 NFS 共享
# 查看远程 NFS 服务器的共享列表
showmount -e 192.168.2.10
# 预期输出:
# Export list for 192.168.2.10:
# /volume1/share *4. 配置 fstab
sudo nano /etc/fstab添加:
192.168.2.10:/volume1/share /mnt/nfs-share nfs defaults,_netdev,soft,timeo=600 0 0NFS 常用参数:
rsize/wsize: 读写缓冲区大小(默认 1048576)hard/soft: 硬/软挂载intr: 允许中断(已废弃)noatime: 不更新访问时间(提升性能)nfsvers: NFS 版本(3 或 4)
高性能配置示例:
192.168.2.10:/volume1/share /mnt/nfs-share nfs rsize=1048576,wsize=1048576,hard,intr,nfsvers=4,_netdev,noatime 0 05. 挂载并验证
sudo mount -a
df -h | grep nfs方法三:SSHFS 挂载(加密传输)
1. 安装 SSHFS
sudo apt install sshfs -y2. 创建挂载点
sudo mkdir -p /mnt/sshfs-share3. 手动挂载测试
sshfs user@192.168.2.10:/remote/path /mnt/sshfs-share \
-o IdentityFile=~/.ssh/id_ed25519 \
-o allow_other \
-o reconnect \
-o ServerAliveInterval=15 \
-o ServerAliveCountMax=3参数说明:
IdentityFile: SSH 私钥路径allow_other: 允许其他用户访问reconnect: 断线自动重连ServerAliveInterval: 心跳间隔(秒)
4. 配置 fstab(可选)
user@192.168.2.10:/remote/path /mnt/sshfs-share fuse.sshfs _netdev,IdentityFile=/root/.ssh/id_ed25519,allow_other,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 0 0注意: SSHFS 需要安装 fuse 模块支持。
权限管理
1. 修改挂载点所有者
# 更改所有者
sudo chown -R www-data:www-data /mnt/nas_share
# 更改权限
sudo chmod -R 755 /mnt/nas_share2. 在 fstab 中指定权限
//192.168.2.10/share /mnt/nas_share cifs credentials=/etc/samba/credentials,uid=33,gid=33,file_mode=0644,dir_mode=0755,_netdev 0 0常用 UID/GID:
0:0- root33:33- www-data(Web 服务器)1000:1000- 第一个普通用户998:996- docker(Docker 用户)
3. 验证权限
# 查看文件权限
ls -la /mnt/nas_share
# 测试写入
touch /mnt/nas_share/test.txt
echo "test" > /mnt/nas_share/test.txt
cat /mnt/nas_share/test.txt
rm /mnt/nas_share/test.txt故障排查
Q1: 挂载失败,提示 "mount error(115): Operation now in progress"?
原因: 网络未就绪或 NAS 不可达
解决方案:
# 1. 检查网络连接
ping 192.168.2.10
# 2. 检查 NAS 服务
smbclient -L //192.168.2.10 -U username
# 3. 确保添加 _netdev 选项
# 在 fstab 中添加 _netdev
# 4. 手动测试挂载
sudo mount -t cifs //192.168.2.10/share /mnt/nas_share -o credentials=/etc/samba/credentialsQ2: 挂载成功但无法写入?
原因: 权限问题
解决方案:
# 1. 检查挂载权限
mount | grep nas_share
# 2. 修改 fstab 中的 uid/gid
//192.168.2.10/share /mnt/nas_share cifs credentials=/etc/samba/credentials,uid=1000,gid=1000,_netdev 0 0
# 3. 重新挂载
sudo umount /mnt/nas_share
sudo mount -a
# 4. 或在 NAS 端调整共享权限Q3: 重启后挂载失败?
原因: 网络服务启动顺序问题
解决方案:
# 1. 确保使用 _netdev 选项
# 2. 添加 nofail(挂载失败不阻止启动)
//192.168.2.10/share /mnt/nas_share cifs credentials=/etc/samba/credentials,_netdev,nofail 0 0
# 3. 或创建 systemd 挂载单元
sudo nano /etc/systemd/system/mnt-nas_share.mount[Unit]
Description=Mount NAS Share
After=network-online.target
Wants=network-online.target
[Mount]
What=//192.168.2.10/share
Where=/mnt/nas_share
Type=cifs
Options=credentials=/etc/samba/credentials,uid=1000,gid=1000,vers=3.0
[Install]
WantedBy=multi-user.target# 启用服务
sudo systemctl enable mnt-nas_share.mountQ4: 中文文件名乱码?
解决方案:
//192.168.2.10/share /mnt/nas_share cifs credentials=/etc/samba/credentials,iocharset=utf8,_netdev 0 0Q5: 如何卸载 NAS?
# 正常卸载
sudo umount /mnt/nas_share
# 强制卸载(如果繁忙)
sudo umount -l /mnt/nas_share
# 从 fstab 删除对应行
sudo nano /etc/fstab
# 删除或注释掉相关行
# 删除挂载点(可选)
sudo rmdir /mnt/nas_share自动化脚本
批量挂载多个共享
#!/bin/bash
# /usr/local/bin/mount-nas.sh
# NAS 配置
NAS_IP="192.168.2.10"
CREDENTIALS="/etc/samba/credentials"
# 定义共享列表
declare -A SHARES=(
["/mnt/nas-media"]="media"
["/mnt/nas-backup"]="backup"
["/mnt/nas-docs"]="documents"
)
# 创建挂载点并挂载
for mount_point in "${!SHARES[@]}"; do
share_name="${SHARES[$mount_point]}"
# 创建挂载点
mkdir -p "$mount_point"
# 挂载
if mountpoint -q "$mount_point"; then
echo "✅ $mount_point 已挂载"
else
echo "🔄 正在挂载 $mount_point..."
mount -t cifs "//${NAS_IP}/${share_name}" "$mount_point" \
-o credentials=$CREDENTIALS,uid=1000,gid=1000,vers=3.0,_netdev
if [ $? -eq 0 ]; then
echo "✅ $mount_point 挂载成功"
else
echo "❌ $mount_point 挂载失败"
fi
fi
done
echo "所有 NAS 共享挂载完成!"设置为开机自启:
sudo chmod +x /usr/local/bin/mount-nas.sh
# 添加到 crontab
sudo crontab -e
@reboot /usr/local/bin/mount-nas.sh >> /var/log/nas-mount.log 2>&1性能优化
1. 调整 CIFS 参数
//192.168.2.10/share /mnt/nas_share cifs credentials=/etc/samba/credentials,rsize=65536,wsize=65536,cache=strict,_netdev 0 0优化参数:
rsize/wsize: 读写缓冲区(默认 16384,可增至 65536)cache: 缓存策略(strict/loose/none)actimeo: 属性缓存时间(秒)
2. 禁用访问时间更新
//192.168.2.10/share /mnt/nas_share cifs credentials=/etc/samba/credentials,noatime,_netdev 0 03. 使用异步写入
//192.168.2.10/share /mnt/nas_share cifs credentials=/etc/samba/credentials,async,_netdev 0 0监控与维护
1. 查看挂载状态
# 查看所有挂载
df -h
# 查看 CIFS 挂载
mount -t cifs
# 查看 NFS 挂载
mount -t nfs
# 详细统计
smbstatus2. 测试连接速度
# 写入测试
dd if=/dev/zero of=/mnt/nas_share/test bs=1M count=100 conv=fdatasync
# 读取测试
dd if=/mnt/nas_share/test of=/dev/null bs=1M
# 清理测试文件
rm /mnt/nas_share/test3. 定期检查脚本
#!/bin/bash
# /usr/local/bin/check-nas.sh
MOUNT_POINT="/mnt/nas_share"
if mountpoint -q "$MOUNT_POINT"; then
echo "✅ NAS 挂载正常"
else
echo "❌ NAS 未挂载,尝试重新挂载..."
mount -a
if [ $? -eq 0 ]; then
echo "✅ 重新挂载成功"
# 发送告警通知(可选)
# curl -s "https://api.telegram.org/botXXX/sendMessage" -d "chat_id=YYY&text=NAS已重新挂载"
else
echo "❌ 重新挂载失败,请手动检查"
fi
fi添加到 crontab:
# 每 5 分钟检查一次
*/5 * * * * /usr/local/bin/check-nas.sh >> /var/log/nas-check.log 2>&1应用场景示例
1. Docker 数据卷挂载
# 挂载 NAS 作为 Docker 数据目录
sudo mkdir -p /mnt/nas-docker
# 修改 Docker 数据根目录
sudo nano /etc/docker/daemon.json{
"data-root": "/mnt/nas-docker"
}# 重启 Docker
sudo systemctl restart docker2. Plex/Jellyfin 媒体库
# 挂载媒体目录
sudo mkdir -p /mnt/nas-media/{movies,tv,music}
# 在 Plex/Jellyfin 中添加库时指向 /mnt/nas-media3. 网站备份
# 挂载备份目录
sudo mkdir -p /mnt/nas-backup
# 定时备份脚本
#!/bin/bash
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
tar czf /mnt/nas-backup/website_$BACKUP_DATE.tar.gz /var/www/html
# 保留最近 7 天的备份
find /mnt/nas-backup -name "website_*.tar.gz" -mtime +7 -delete安全最佳实践
✅ 必须做:
❌ 禁止做:
相关教程推荐
- 🖥️ Debian/Ubuntu 系统优化 - 完整系统配置
- 🔐 SSH 密钥登录配置 - 安全远程访问
- 🛡️ 防火墙端口配置 - 网络安全防护
- 💾 Swap 虚拟内存配置 - 内存优化
通过合理配置 NAS 挂载,你可以轻松扩展服务器存储能力,实现数据集中管理和高效备份!💾✨
- 🔥🔥🔥2026年便宜好用的翻墙VPN机场推荐评测(长期更新 欢迎推荐)
- 稳定好用的流媒体合租平台推荐(长期更新 欢迎推荐)
- AI 使用教程汇总|ChatGPT、Gemini 新手入门与国内使用指南
- 国外接码平台 Hero SMS 评测(稳定 · 低价 · 高成功率)
免责声明
本文仅供技术交流和学习参考,请遵守当地法律法规,合理合法使用网络服务。