mac可通过编写顺序挂载脚本并配置launchd实现五块异构局域网硬盘开机自动按序挂载:先创建五个挂载点,确认各nas协议类型(smb/afp/nfs/webdav),将凭证存入钥匙串,编写含错误检查与重试逻辑的shell脚本,再通过launchagents plist文件注册为开机自启服务,确保严格顺序、依赖等待与失败中断。

Mac需要在开机后或网络就绪时,按固定顺序挂载五块不同协议、不同路径、不同认证方式的局域网硬盘,手动逐个连接耗时且易漏步骤。你只需编写一个可执行脚本,配合系统级触发机制,就能让五块硬盘严格按预设顺序依次挂载,中间自动等待前一块成功后再启动下一块。
准备五个挂载点并确认协议类型
打开终端,一次性创建五个空目录作为挂载入口:sudo mkdir -p /Volumes/nas-1 /Volumes/nas-2 /Volumes/nas-3 /Volumes/nas-4 /Volumes/nas-5。
逐个确认每块NAS支持的协议——Synology默认开SMB,QNAP可能同时提供SMB和AFP,极空间常用WebDAV,绿联部分型号仅支持NFS;【协议选错会导致mount命令直接失败且无提示】。用访达Command+K测试各地址格式:smb://192.168.1.101/share、afp://192.168.1.102/volume1、nfs://192.168.1.103:/nfs/share、webdav://192.168.1.104:8080/dav,确保能手动连通再写入脚本。
编写顺序挂载脚本并注入钥匙串凭证
执行nano ~/bin/mount-all-nas.sh新建脚本文件,粘贴以下内容(请严格按实际替换IP、共享名、用户名):
#!/bin/bash
set -e
# 挂载nas-1(SMB,密码从钥匙串读取)
security find-internet-password -s nas1.local -w >/dev/null 2>&1 || { echo "nas1凭证未存入钥匙串"; exit 1; }
sudo mount_smbfs //$(security find-internet-password -s nas1.local -w):$(security find-internet-password -s nas1.local -w)@192.168.1.101/share /Volumes/nas-1
# 挂载nas-2(AFP,使用明文密码仅限内网可信环境)
sudo mount -t afp afp://admin:123456@192.168.1.102/volume1 /Volumes/nas-2
# 挂载nas-3(NFS,需先确认远程export权限)
sudo mount -t nfs 192.168.1.103:/nfs/share /Volumes/nas-3
# 挂载nas-4(WebDAV,依赖curl和davfs2,需提前brew install davfs2)
sudo mkdir -p /Volumes/nas-4 && echo "https://192.168.1.104:8080/dav admin 123456" | sudo tee -a /etc/davfs2/secrets && sudo mount -t davfs https://192.168.1.104:8080/dav /Volumes/nas-4
# 挂载nas-5(SMB,带重试逻辑防瞬时网络抖动)
for i in {1..3}; do
if sudo mount_smbfs //user:pass@192.168.1.105/backup /Volumes/nas-5 2>/dev/null; then break; fi
sleep 3
done
保存后执行chmod +x ~/bin/mount-all-nas.sh赋予执行权限。注意:第4步WebDAV挂载需提前安装davfs2,否则脚本会卡住;第5步重试逻辑避免因NAS启动慢导致挂载失败。
配置launchd实现开机后自动顺序执行
第一步:在~/Library/LaunchAgents/下创建plist文件:nano ~/Library/LaunchAgents/local.mount-all-nas.plist
第二步:填入以下内容(关键字段已加注释):
第三步:将yourusername替换成你真实的用户名,保存退出。这一步必须准确,否则脚本路径无法解析。
第四步:加载服务:launchctl load ~/Library/LaunchAgents/local.mount-all-nas.plist。此时脚本已注册为用户级守护进程,下次重启即生效。
验证挂载顺序与错误捕获
方法一:重启Mac后,立即打开终端执行ls /Volumes,应依次看到nas-1至nas-5目录出现,间隔约1–2秒;若某目录缺失,查看/tmp/mount-all-nas.err日志定位失败环节。
方法二:不重启,手动触发测试:~/bin/mount-all-nas.sh,观察终端输出是否逐行打印各步骤成功信息;遇到报错时脚本会立即终止,不会继续执行后续挂载。
方法三:检查挂载状态:mount | grep "/Volumes/nas-",确认五条记录均含“smbfs”“afp”“nfs”等对应类型,且挂载点路径完全匹配。











