如何在macOS上为SMB网络共享设置稳定的挂载点?
如何在macOS上为SMB网络共享设置稳定的挂载点?
我在MacBook上创建了多个用户账号,比如给家里不同成员使用,或者用来区分不同的工作角色。这些用户经常需要访问一台通过SMB协议提供数据的文件服务器。
目前的情况是,当用户连接SMB共享时,共享会被挂载到/Volumes目录下。举个例子,假设共享名称是data:
- 第一个挂载该共享的用户(比如用户A)会得到挂载点
/Volumes/data - 第二个挂载的用户(用户B)的挂载点会变成
/Volumes/data-1 - 第三个挂载的用户(用户C)则会拿到
/Volumes/data-2 - 以此类推
但这里有个麻烦的问题:如果系统重启后用户登录顺序变了,或者用户注销后重新登录,挂载点就会发生变化。比如下次用户C第一个挂载这个共享,他的挂载点就会变成/Volumes/data,而之前的用户可能就会拿到带后缀的路径。这种不稳定的挂载点会导致依赖固定路径的脚本、快捷方式或者应用程序出现问题,非常头疼。
解决方法:为每个用户设置专属固定挂载点
我们可以给每个用户创建独立的固定挂载目录,通过命令行或自动挂载配置来保证路径稳定,不会和其他用户冲突:
创建用户专属挂载目录
打开终端,在当前用户的个人目录下创建一个固定的挂载文件夹,比如:mkdir ~/SMB-Data这个目录属于当前用户私有,不会和其他用户的挂载路径产生冲突。
手动挂载SMB共享到固定路径
使用mount_smbfs命令指定挂载点,终端输入:mount_smbfs //你的SMB用户名@服务器地址/data ~/SMB-Data输入命令后终端会提示你输入SMB密码,这种方式比直接把密码写在命令里更安全;如果密码包含特殊字符,记得用反斜杠
\转义。设置登录自动挂载(可选)
如果想让用户登录时自动完成挂载,可以创建一个Launch Agent:- 在
~/Library/LaunchAgents/目录下新建一个名为com.user.smb-data.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.user.smb-data</string> <key>ProgramArguments</key> <array> <string>/sbin/mount_smbfs</string> <string>//你的SMB用户名@服务器地址/data</string> <string>/Users/你的用户名/SMB-Data</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <false/> </dict> </plist> - 保存文件后,在终端执行命令加载这个配置:
launchctl load ~/Library/LaunchAgents/com.user.smb-data.plist
这样每次用户登录时,共享就会自动挂载到指定的固定路径下。
- 在
备选方案:全局固定挂载点(适合多用户共享同一路径)
如果多个用户需要共用同一个固定挂载点,可以在系统级目录下创建挂载路径:
- 创建全局挂载目录:
sudo mkdir /mnt/smb-data sudo chmod 777 /mnt/smb-data - 编辑
/etc/fstab文件,添加一行配置:
注意:这种方法需要把SMB密码明文写在配置文件里,安全性较低,仅推荐在信任的环境中使用。//你的SMB用户名:SMB密码@服务器地址/data /mnt/smb-data smbfs rw,auto,user 0 0
备注:内容来源于stack exchange,提问作者herzbube




