在macOS下自动挂载NAS Samba分区和Ubuntu远程分区
Contents
我想在macOS下更方便地操作NAS硬盘和Ubuntu台式机的文件。其中NAS是机械硬盘RAID6,写入速度在600MB/s左右,读取速度在1000MB/s左右,提供了Samba服务。Ubuntu是NVMe SSD组建的RAID0,本地读取可以达到28GB/s左右,提供了ssh登录。
macOS和NAS、Ubuntu之间通过万兆网口连接,网络最快可以到1250MB/s。我用automount实现自动挂载,当访问目录时就会挂载,也尝试失败了sshfs和rclone自动挂载。
自动挂载NAS Samba分区 #
使用automount自动挂载Samba分区非常容易,创建挂载点:
sudo mkdir -p /System/Volumes/Data/Network/{Downloads,OpenData}为什么放在/System/Volumes/Data/Network?因为从Catalina开始系统根卷只读,直接写 /Volumes有时会被系统抢占,把挂载点放在数据卷最省事,也符合Apple的官方做法。
接下来修改/etc/auto_master文件,在文件末尾添加一行:
/- auto_smb -nobrowse,nosuid告诉autofs有个自定义映射表,在/etc目录下找auto_smb文件。
创建/etc/auto_smb文件,挂载NAS分区:
/System/Volumes/Data/Network/Downloads -fstype=smbfs,soft,noowners,ro ://nas_user:password@nas_ip_address/Downloads
/System/Volumes/Data/Network/OpenData -fstype=smbfs,soft,noowners,ro ://nas_user:password@nas_ip_address/OpenDatasoft表示服务器不在线时很快返回错误,不会卡住应用。如果希望可读挂载,将ro改成rw,不过macOS会创建很多._*文件,需要用dot_clean删除。
配置完成后,让 automount 服务重新加载配置,
sudo automount -vc
ln -sf /System/Volumes/Data/Network ~/
open ~/Network/OpenData/挂载之后,用Blackmagic Disk Speed Test测试了一下读写速度很快:

尝试sshfs和rclone失败 #
接下来自动挂载Ubuntu远程分区,我先尝试了sshfs和rclone,都无法自动挂载。由于macOS的System Integrity Protection (SIP)限制,无法在/sbin下创建mount_sshfs和mount_rclone文件。而automount需要这两个文件实现自动挂载,所以只能通过launchd或者crontab曲线救国,不如automount方便。
首先,安装社区版sshfs,用于挂载Ubuntu远程分区。
# 安装macfuse和sshfs
brew install --cask macfuse
brew install gromgit/fuse/sshfs-mac
brew link --overwrite sshfs-mac创建挂载脚本sshfs_auto_mount.sh:
#!/bin/bash
MOUNTPOINT="/System/Volumes/Data/Network/Ubuntu"
REMOTE="yourname@ubuntu_ip_address:/home/yourname"
IDENTITY="/Users/yourname/.ssh/id_rsa"
mkdir -p $MOUNTPOINT
chown $(whoami) $MOUNTPOINT
/usr/local/bin/sshfs \
-o allow_other,reconnect,noowners,IdentityFile=$IDENTITY \
"$REMOTE" "$MOUNTPOINT"reconnect会在网络抖动后自动重连,这里通过密钥连接。
通过sudo bash ./sshfs_auto_mount.sh连接,也可以添加到launchd开机启动,但是不支持访问时自动挂载。用Blackmagic Disk Speed Test测试读写速度不达预期,应该是sshfs本身的单线程限制,修改加密协议和compression选项都变化不大:

为了提高SSH访问速度,又尝试了rclone,
brew install rclone
rclone config配置Ubuntu连接:
n) New remote
Enter name for new remote. ubuntu_host
Option Storage. SSH/SFTP (sftp)
Option host. ubuntu_ip_address
Option user. yourname
Option key_file. ~/.ssh/id_rsa
Configuration complete. y) Yes this is OK (default)创建挂载脚本rclone_auto_mount.sh,
#!/bin/bash
MOUNTPOINT=/System/Volumes/Data/Network/Ubuntu
REMOTE=ubuntu_host:/home/yourname
VOLNAME=UbuntuHome
mkdir -p $MOUNTPOINT
chown $(whoami) $MOUNTPOINT
/usr/local/bin/rclone mount \
$REMOTE $MOUNTPOINT \
--volname $VOLNAME \
--vfs-cache-mode writes \
--allow-other \
--daemon通过sudo bash ./rclone_auto_mount.sh连接,也可以添加到launchd开机启动,但是不支持访问时自动挂载。因为rclone支持多线程,且有本地缓存,读写速度非常快,

自动挂载Ubuntu远程分区 #
在经历了sshfs和rclone两个失败的尝试后,我使用了最简单的配置方法。macOS默认支持NFS分区自动挂载,在Ubuntu上安装NFS server:
sudo apt update
sudo apt install nfs-kernel-server获取Ubuntu电脑的用户ID:
id yourname会看到类似这样的输出,记下 uid 和 gid 的数字:
uid=1000(yourname) gid=1000(yourname) groups=1000(yourname),...修改/etc/exports,在文件末尾添加以下行,以允许Mac电脑的网段 192.168.10.0/24 和192.168.11.0/24这两个网段的客户端访问:
/home/yourname 192.168.10.0/24(rw,sync,no_subtree_check,all_squash,anonuid=1000,anongid=1000) 192.168.11.0/24(rw,sync,no_subtree_check,all_squash,anonuid=1000,anongid=1000)请将yourname, 192.168.10.0/24, 192.168.11.0/24, 1000 替换为你的真实信息。
保存文件后,运行命令使配置生效:
sudo exportfs -a
sudo systemctl restart nfs-kernel-server配置防火墙,允许指定的 IP 地址段访问 NFS 服务:
sudo ufw allow from 192.168.10.0/24 to any port 2049
sudo ufw allow from 192.168.11.0/24 to any port 2049
sudo ufw enable
sudo ufw status配置macOS自动挂载NFS分区,修改/etc/auto_master文件,在末尾添加一行:
/- auto_nfs -nobrowse,nosuid创建/etc/auto_nfs文件,挂载Ubuntu的NFS分区:
/System/Volumes/Data/Network/UbuntuHome -fstype=nfs,vers=4,resvport,rw,bg,hard,intr,tcp ubuntu_ip_address:/home/yourname配置完成后,让 automount 服务重新加载配置,
sudo automount -vc
open ~/Network/UbuntuHome/由于NFS默认设置成安全第一,服务器接收到数据后,立即将数据和相关的元数据写入到稳定的存储介质中。测试NFS分区的读写速度,写入速度稍慢:

macOS系统升级 #
每次macOS系统升级之后,/etc/auto_master文件会恢复原始状态,需要重新添加:
cat << EOF | sudo tee -a /etc/auto_master
/- auto_smb -nobrowse
/- auto_nfs -nobrowse
EOF
sudo automount -vc总结 #
通过配置,可以像操作本地文件一样,操作NAS和Ubuntu上的文件,可以用Audition等软件直接打开。将~/Network目录拖到Finder侧边栏,访问更方便。