Files
nexus/knowledgebase/Mac Mini NAS 挂载配置指南.md

341 lines
7.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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
<?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. 手动执行挂载脚本
```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 多共享挂载,包含自启动和错误处理逻辑