外观
NAS 与网络共享
家里或办公室有一台 NAS、一块接在路由器上的硬盘,或者另一台开了共享的电脑,都属于这一类:通过网络访问的存储。
访达里连上去很简单,麻烦的是之后——断开、重连、权限不对、莫名生成一堆隐藏文件。这一篇讲怎么连、怎么排查,以及一个容易搞错的前提。
开始之前
需要局域网里有一台可访问的共享存储。命令行部分需要能在终端执行命令。挂载操作可随时卸载,不会改变系统配置。
先说清楚:NAS 不等于备份
NAS 常见的 RAID 配置能在一块盘坏掉时继续工作,这只防硬盘故障这一种风险。
它防不住:误删除(会立刻同步到所有盘)、NAS 本身故障或被偷、火灾水灾、勒索软件加密网络共享。
所以「东西都放 NAS 上了」不等于做了备份。NAS 可以是备份策略里的「本地备份」那一环,但异地那一环仍然要另外安排。
用哪个协议
SMB。这是现在的通用选择:macOS、Windows、Linux、NAS 系统都支持,性能和功能都在持续维护。
AFP 是 Apple 早年的协议,现在属于遗留方案。老 NAS 可能还提供,但没有理由主动选它——新设备的 AFP 支持只会越来越弱。
NFS 在 Unix 环境里常见,权限模型和 macOS 的用户体系对不上时会很折腾。除非有明确理由,否则用 SMB。
在访达里连接
按 Command-K(「前往 → 连接服务器」),输入:
smb://192.168.1.100也可以用主机名,例如 smb://mynas.local。.local 后缀走的是 Bonjour 局域网名称解析,不需要配置 DNS。
直接连到某个共享目录:
smb://192.168.1.100/media输入账号密码时,勾选「在我的钥匙串中记住此密码」,以后就不用重复输入——凭据存在钥匙串里,见凭据管理。
连上后共享会出现在访达边栏,并挂载在 /Volumes/ 下。
命令行挂载
需要写进脚本时用 mount_smbfs:
sh
mkdir -p ~/mnt/nas
mount_smbfs //用户名@192.168.1.100/media ~/mnt/nas第一条命令先建好挂载点——mount_smbfs 不会自动创建目录,目录不存在时直接报错。第二条里 //用户名@主机/共享名 是 SMB 的地址写法,命令会提示输入密码。
卸载:
sh
umount ~/mnt/nas提示设备忙时,说明还有程序在使用这个目录。用 lsof ~/mnt/nas 找出是谁(见命令行网络诊断里 lsof 的用法),不要一上来就强制卸载。
不要把密码写进命令
mount_smbfs 的地址里可以带密码,网上很多脚本就是这么写的。不要这样做——密码会留在 shell 历史和进程列表里。
正确做法是先在访达里连接一次并勾选保存到钥匙串,之后 mount_smbfs 会自动使用钥匙串中的凭据,不再提示输入。
查看连接状态
sh
smbutil statshares -asmbutil 是 SMB 的管理工具,statshares 显示共享的属性,-a 表示所有已挂载的共享。
输出里值得关注的是协议版本和加密相关的项目。走的是 SMB 3 且启用了加密,说明传输内容在局域网里不是明文。老设备可能只支持更低的版本——这时候要意识到,同一个局域网里的其他设备理论上能看到传输内容。
网络卷上的常见麻烦
到处都是 .DS_Store
访达在浏览过的每个目录里写一个 .DS_Store 文件记录视图设置。在共享目录上,这会让其他人(尤其是 Windows 用户)看到一堆莫名其妙的文件。
Apple 提供了一个设置来禁止在网络卷上写这类文件:
sh
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool truedefaults 读写 macOS 的偏好设置,write 表示写入,-bool true 指定值的类型和内容。需要注销后重新登录才生效。
代价是网络目录的视图设置(排序方式、图标大小)不再被记住。撤销:
sh
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool false注意这只影响网络卷,本地磁盘上的 .DS_Store 照旧。
睡眠唤醒后连接断开
Mac 睡眠时网络连接会断,唤醒后挂载点可能变成失效状态——访达里还能看到,点进去却无响应。
处理方式是先卸载再重新连接,而不是反复点击。写成脚本的话,可以在使用前先检查挂载是否有效:
sh
if ! mount | grep -q "on /Users/你的用户名/mnt/nas"; then
mount_smbfs //用户名@192.168.1.100/media ~/mnt/nas
fiif ! 表示「如果条件不成立」,grep -q 只判断有没有匹配而不输出内容(-q 是安静模式)。整段的意思是:没挂载才挂载。
登录时自动连接
访达连接一次之后,把挂载的卷拖进「系统设置 → 通用 → 登录项」的列表,下次登录会自动连接。
这个方式简单,但网络还没就绪时会失败。对可靠性有要求的场景,用 LaunchAgent 配合上面那段检查脚本更稳妥,见 launchd。
权限看起来不对
网络共享上显示的所有者和权限,是由服务器一侧的账号映射决定的,不一定和本机用户对得上。
在网络卷上执行 chmod、chown 经常无效或结果奇怪——应该去服务器一侧(NAS 的管理界面)设置权限,而不是在 Mac 上改。这和权限与扩展属性讲的本地文件权限是两套体系。
把 NAS 当时间机器目标
不少 NAS 支持作为时间机器的备份目标,需要在 NAS 一侧启用对应功能,之后在「系统设置 → 通用 → 时间机器」里就能选到它。
三点提醒:
- 首次备份走网络会很慢,几百 GB 可能要跑一两天,尽量用有线连接完成第一次。
- 务必勾选加密。备份数据要经过网络并存在另一台设备上。
- 它仍然属于本地那一份。NAS 和 Mac 通常在同一个房间,整体性事故里一起没。
检查结果
sh
mount | grep smbfs能看到已挂载的 SMB 共享。
sh
smbutil statshares -a能看到连接属性,确认协议版本符合预期。
sh
ls /Volumes访达连接的共享会出现在这里。
动手练习
完整走一遍连接与排查:
- 在访达里用 Command-K 连接一个共享,勾选保存密码到钥匙串。
- 执行
mount | grep smbfs,找出它实际挂载在哪个路径。 - 执行
smbutil statshares -a,记下协议版本。 - 在访达里推出该共享,再用
mount_smbfs从命令行挂载到~/mnt/nas,确认不再提示输入密码(钥匙串生效了)。 - 用
umount卸载,确认mount | grep smbfs里它消失了。
成功标准是第 4 步:命令行挂载没有提示输入密码,也没有在任何脚本里出现明文密码。这是把网络存储写进自动化流程的前提——凭据由钥匙串负责,脚本里只有地址。