#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]` - **本地挂载基路径**: `~/mnt/volume1/` 和 `~/mnt/volume2/` --- ## 一、脚本位置和自启动配置 ### 关键文件位置 |文件|路径|说明| |---|---|---| |挂载脚本|`~/Library/LaunchAgents/nas-mounts.sh`|执行具体挂载命令的 Shell 脚本| |LaunchAgent 配置|`~/Library/LaunchAgents/com.nas-mounts.plist`|系统自启动配置| |挂载日志|`~/.nas-mounts.log`|挂载执行日志,用于问题诊断| ### 查看当前挂载状态 ```bash # 查看所有 NAS 挂载 mount | grep mnt/volume # 或用 df 查看更清晰的统计 df -h | grep volume ``` --- ## 二、nas-mounts.sh 脚本内容 ### 脚本位置 ``` ~/Library/LaunchAgents/nas-mounts.sh ``` ### 完整脚本内容 ```bash #!/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 Label com.nas-mounts ProgramArguments /Users/weishen/Library/LaunchAgents/nas-mounts.sh RunAtLoad KeepAlive ``` --- ## 四、常见操作 ### 1. 手动执行挂载脚本 ```bash # 确保脚本有执行权限 chmod +x ~/Library/LaunchAgents/nas-mounts.sh # 直接运行脚本 ~/Library/LaunchAgents/nas-mounts.sh # 查看执行结果日志 cat ~/.nas-mounts.log ``` ### 2. 重新加载自启动配置 ```bash # 卸载当前配置 launchctl unload ~/Library/LaunchAgents/com.nas-mounts.plist # 重新加载配置(会立即执行挂载) launchctl load ~/Library/LaunchAgents/com.nas-mounts.plist # 查看状态 launchctl list | grep nas-mounts ``` ### 3. 卸载所有 NAS 挂载 ```bash # 卸载所有 volume1 和 volume2 的挂载 umount -f ~/mnt/volume1/* 2>/dev/null umount -f ~/mnt/volume2/* 2>/dev/null # 验证 mount | grep mnt/volume ``` ### 4. 清理并重新挂载 ```bash # 完全清理目录 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 脚本 ```bash nano ~/Library/LaunchAgents/nas-mounts.sh ``` ### 步骤 3:添加新的 mount_share 调用 在对应的 Volume 部分添加一行。例如在 Volume2 部分添加: ```bash # Volume2 mounts # ... 现有的其他挂载 ... mount_share "new_share" "$HOME/mnt/volume2/new_share" # ← 添加这一行 ``` ### 步骤 4:保存并测试 ```bash # 保存:Ctrl+O, Enter, Ctrl+X # 测试执行 ~/Library/LaunchAgents/nas-mounts.sh # 查看日志确认成功 cat ~/.nas-mounts.log | grep new_share # 验证挂载 df -h | grep new_share ``` ### 步骤 5:重新加载 LaunchAgent ```bash 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 和网络连接| ### 快速诊断 ```bash # 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`: ```bash mount_share "Shen%20Wei" "$HOME/mnt/volume1/home" ``` ### 同一共享挂载到多个位置冲突 如果发现某个共享已在 `/Volumes/` 下挂载: ```bash # 查看已挂载位置 mount | grep share_name # 卸载原位置 umount /Volumes/share_name # 或创建符号链接而非重复挂载 ln -s /Volumes/share_name ~/mnt/volume2/share_name ``` --- ## 八、快速参考命令 ```bash # 查看当前挂载 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 多共享挂载,包含自启动和错误处理逻辑