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 掛載,你可以輕鬆擴展服務器存儲能力,實現數據集中管理和高效備份!💾✨
延伸阅读
免责声明
本文仅供技术交流和学习参考。涉及第三方服务的链接可能包含 sponsored 标记,请自行核实服务条款、价格和可用性,并遵守当地法律法规。