需求场景:系统盘太小需要将占用存储空间较大的目录放到其他硬盘上,而又希望能在 finder 中的原位置进行管理
系统环境:已经将第二块硬盘分区并挂载到了指定目录:
~/ cat /etc/fstab #开机挂载分区到指定目录 /exsdd 下,不希望默认挂载到 /Volumes/xxx 目录
UUID=446B26AD-A387-4BEF-8F1A-07780B5F7955 /exsdd apfs rw,auto,nobrowse
~/ mount
/dev/disk4s1 on / (apfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
/dev/disk4s4 on /private/var/vm (apfs, local, noexec, journaled, noatime, nobrowse)
/dev/disk3s1 on /exsdd (apfs, local, journaled, nobrowse)
/dev/disk0s2 on /Volumes/snap (hfs, local, journaled)
Mac OS X 下使用 bindfs 实现 mount 的目录绑定功能
Linux 下的 mount 命令有一个 --bind
参数,将目录挂载到另一个目录下。Mac OS X 的 mount 命令不支持 --bind
,不过我们可以使用 bindfs 实现相同的功能。
bindfs 是一个基于 FUSE 的文件系统实现,并非 Mac OS X 的预装工具,但通过 Homebrew 安装非常简单。
brew install bindfs
bindfs 的使用也非常简单,跟 mount --bind
基本一样。
创建并挂载目录
此时,我们将用户家目录下的 Downloads 和 Movies 目录外挂到另一块硬盘(分区)所在的目录中。
-
在/exsdd 目录下创建源目录:
sudo mkdir /exsdd/Downloads /exsdd/Movies sudo chown username:admin /exsdd/Downloads /exsdd/Movies
-
挂载源目录到目标目录
对于具有权限的目录,可以不用 sudosudo bindfs /exsdd/Downloads /Users/username/Downloads sudo bindfs /exsdd/Movies /Users/username/Movies
执行
mount
命令,可查看挂载情况
配置开机启动挂载
这里仍然采用 Linux 中/etc/rc.local 的形式,但 Mac OS 没有/etc/rc.local 这个文件,需要创建并让它识别。
-
修改 LaunchDaemons 的配置
进入/Library/LaunchDaemons
目录,并创建local.localhost.startup.plist
文件cd /Library/LaunchDaemons sudo vim local.localhost.startup.plist
写入如下内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>local.localhost.startup</string> <key>Disabled</key> <false/> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <false/> <key>LaunchOnlyOnce</key> <true/> <key>ProgramArguments</key> <array> <string>/etc/rc.local</string> </array> </dict> </plist>
加载
local.localhost.startup.plist
文件sudo launchctl load -w ./local.localhost.startup.plist
-
创建 rc.local 文件
创建/etc/rc.loca
文件,并写入开机即执行的命令:sudo vim /etc/rc.local
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于