7.5 KiB
7.5 KiB
#mac-min #nas #mount #Configuration
快速概览
- NAS IP:
192.168.3.17 - 用户:
shenwei - NAS 路径:
- Volume1:
//shenwei@192.168.3.17/[share_name] - Volume2:
//shenwei@192.168.3.17/[share_name]
- Volume1:
- 本地挂载基路径:
~/mnt/volume1/和~/mnt/volume2/
一、脚本位置和自启动配置
关键文件位置
| 文件 | 路径 | 说明 |
|---|---|---|
| 挂载脚本 | ~/Library/LaunchAgents/nas-mounts.sh |
执行具体挂载命令的 Shell 脚本 |
| LaunchAgent 配置 | ~/Library/LaunchAgents/com.nas-mounts.plist |
系统自启动配置 |
| 挂载日志 | ~/.nas-mounts.log |
挂载执行日志,用于问题诊断 |
查看当前挂载状态
# 查看所有 NAS 挂载
mount | grep mnt/volume
# 或用 df 查看更清晰的统计
df -h | grep volume
二、nas-mounts.sh 脚本内容
脚本位置
~/Library/LaunchAgents/nas-mounts.sh
完整脚本内容
#!/bin/bash
NAS_USER="shenwei"
NAS_PASS="zmkm99zmkm00"
NAS_HOST="192.168.3.17"
# 日志文件
LOG_FILE="$HOME/.nas-mounts.log"
echo "=== NAS Mount Start $(date) ===" >> "$LOG_FILE"
# 函数:安全挂载
mount_share() {
local share=$1
local mount_point=$2
# 创建挂载点
mkdir -p "$mount_point"
# 检查是否已经挂载
if mount | grep -q "$mount_point"; then
echo "✓ Already mounted: $share" | tee -a "$LOG_FILE"
return 0
fi
# 如果目录非空,尝试卸载再删除
if [ -n "$(ls -A "$mount_point" 2>/dev/null)" ]; then
echo "Cleaning up $mount_point..." >> "$LOG_FILE"
umount -f "$mount_point" 2>/dev/null
rm -rf "$mount_point"
mkdir -p "$mount_point"
fi
# 尝试挂载
echo "Mounting $share to $mount_point..." >> "$LOG_FILE"
if mount_smbfs -o nosuid,nodev "//${NAS_USER}:${NAS_PASS}@${NAS_HOST}/$share" "$mount_point" 2>> "$LOG_FILE"; then
echo "✓ Successfully mounted: $share" | tee -a "$LOG_FILE"
else
echo "✗ FAILED to mount: $share" | tee -a "$LOG_FILE"
return 1
fi
}
# Volume1 mounts
mount_share "photo" "$HOME/mnt/volume1/photo"
mount_share "video" "$HOME/mnt/volume1/video"
mount_share "openclaw" "$HOME/mnt/volume1/openclaw"
mount_share "obsidian" "$HOME/mnt/volume1/obsidian"
mount_share "download" "$HOME/mnt/volume1/download"
mount_share "software" "$HOME/mnt/volume1/software"
mount_share "music" "$HOME/mnt/volume1/music"
mount_share "Shen%20Wei" "$HOME/mnt/volume1/home"
mount_share "homes" "$HOME/mnt/volume1/homes"
mount_share "docker" "$HOME/mnt/volume1/docker"
# Volume2 mounts
mount_share "work" "$HOME/mnt/volume2/work"
mount_share "knowledgebase" "$HOME/mnt/volume2/knowledgebase"
mount_share "backup" "$HOME/mnt/volume2/backup"
mount_share "gitea-share" "$HOME/mnt/volume2/gitea-share"
mount_share "system" "$HOME/mnt/volume2/system"
mount_share "navidrome" "$HOME/mnt/volume2/navidrome"
echo "=== NAS Mount End $(date) ===" >> "$LOG_FILE"
三、com.nas-mounts.plist 自启动配置
文件位置
~/Library/LaunchAgents/com.nas-mounts.plist
配置内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.nas-mounts</string>
<key>ProgramArguments</key>
<array>
<string>/Users/weishen/Library/LaunchAgents/nas-mounts.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
</dict>
</plist>
四、常见操作
1. 手动执行挂载脚本
# 确保脚本有执行权限
chmod +x ~/Library/LaunchAgents/nas-mounts.sh
# 直接运行脚本
~/Library/LaunchAgents/nas-mounts.sh
# 查看执行结果日志
cat ~/.nas-mounts.log
2. 重新加载自启动配置
# 卸载当前配置
launchctl unload ~/Library/LaunchAgents/com.nas-mounts.plist
# 重新加载配置(会立即执行挂载)
launchctl load ~/Library/LaunchAgents/com.nas-mounts.plist
# 查看状态
launchctl list | grep nas-mounts
3. 卸载所有 NAS 挂载
# 卸载所有 volume1 和 volume2 的挂载
umount -f ~/mnt/volume1/* 2>/dev/null
umount -f ~/mnt/volume2/* 2>/dev/null
# 验证
mount | grep mnt/volume
4. 清理并重新挂载
# 完全清理目录
rm -rf ~/mnt/volume1 ~/mnt/volume2
# 重新创建目录(脚本会自动创建,或手动创建)
mkdir -p ~/mnt/volume1
mkdir -p ~/mnt/volume2
# 手动执行脚本
~/Library/LaunchAgents/nas-mounts.sh
# 验证
df -h | grep volume
五、增加新的共享目录
步骤 1:确认 NAS 上的共享名称
在 Synology DSM 上查看:
- 控制面板 → 共享文件夹 → 找到要共享的文件夹名称
- 例如:
new_share
步骤 2:编辑 nas-mounts.sh 脚本
nano ~/Library/LaunchAgents/nas-mounts.sh
步骤 3:添加新的 mount_share 调用
在对应的 Volume 部分添加一行。例如在 Volume2 部分添加:
# Volume2 mounts
# ... 现有的其他挂载 ...
mount_share "new_share" "$HOME/mnt/volume2/new_share" # ← 添加这一行
步骤 4:保存并测试
# 保存:Ctrl+O, Enter, Ctrl+X
# 测试执行
~/Library/LaunchAgents/nas-mounts.sh
# 查看日志确认成功
cat ~/.nas-mounts.log | grep new_share
# 验证挂载
df -h | grep new_share
步骤 5:重新加载 LaunchAgent
launchctl unload ~/Library/LaunchAgents/com.nas-mounts.plist
launchctl load ~/Library/LaunchAgents/com.nas-mounts.plist
六、问题诊断
挂载失败的常见原因
| 错误 | 原因 | 解决方案 |
|---|---|---|
No such file or directory |
NAS 上不存在该共享或权限不足 | 检查 NAS 的共享文件夹配置和权限 |
File exists |
目录已挂载或目录非空 | 卸载旧挂载,删除目录后重试 |
Permission denied |
用户无访问权限 | 在 NAS 的共享文件夹权限中添加用户访问权限 |
Connection refused |
NAS 不响应或网络问题 | 检查 NAS IP 和网络连接 |
快速诊断
# 1. 查看所有 NAS 挂载
mount | grep mnt/volume
# 2. 查看挂载日志
cat ~/.nas-mounts.log
# 3. 测试 NAS 连接
ping 192.168.3.17
# 4. 列出 NAS 上所有可访问的共享
smbclient -L //192.168.3.17 -U shenwei -p zmkm99zmkm00
# 5. 手动尝试挂载单个共享
mount_smbfs "//shenwei:zmkm99zmkm00@192.168.3.17/share_name" ~/mnt/test
七、特殊情况处理
共享名称包含空格
如果共享名称是 Shen Wei,需要用 URL 编码 %20:
mount_share "Shen%20Wei" "$HOME/mnt/volume1/home"
同一共享挂载到多个位置冲突
如果发现某个共享已在 /Volumes/ 下挂载:
# 查看已挂载位置
mount | grep share_name
# 卸载原位置
umount /Volumes/share_name
# 或创建符号链接而非重复挂载
ln -s /Volumes/share_name ~/mnt/volume2/share_name
八、快速参考命令
# 查看当前挂载
mount | grep mnt/volume
# 手动执行脚本
~/Library/LaunchAgents/nas-mounts.sh
# 查看日志
cat ~/.nas-mounts.log
# 卸载所有
umount -f ~/mnt/volume1/* ~/mnt/volume2/* 2>/dev/null
# 编辑脚本
nano ~/Library/LaunchAgents/nas-mounts.sh
# 编辑 LaunchAgent 配置
nano ~/Library/LaunchAgents/com.nas-mounts.plist
# 重新加载 LaunchAgent
launchctl unload ~/Library/LaunchAgents/com.nas-mounts.plist
launchctl load ~/Library/LaunchAgents/com.nas-mounts.plist
版本历史
- v1.0 (2026-08-23):完成初始配置,支持 Volume1 和 Volume2 多共享挂载,包含自启动和错误处理逻辑