341 lines
7.5 KiB
Markdown
341 lines
7.5 KiB
Markdown
#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 多共享挂载,包含自启动和错误处理逻辑 |