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

7.5 KiB
Raw Permalink Blame History

#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 挂载执行日志,用于问题诊断

查看当前挂载状态

# 查看所有 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 多共享挂载,包含自启动和错误处理逻辑