MacOS 挂载目录到另一个目录

本贴最后更新于 1215 天前,其中的信息可能已经时异事殊

需求场景:系统盘太小需要将占用存储空间较大的目录放到其他硬盘上,而又希望能在 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 目录外挂到另一块硬盘(分区)所在的目录中。

  1. 在/exsdd 目录下创建源目录:

    sudo mkdir /exsdd/Downloads /exsdd/Movies
    sudo chown username:admin /exsdd/Downloads /exsdd/Movies
    
  2. 挂载源目录到目标目录
    对于具有权限的目录,可以不用 sudo

    sudo bindfs /exsdd/Downloads /Users/username/Downloads
    sudo bindfs /exsdd/Movies /Users/username/Movies
    

    执行 mount 命令,可查看挂载情况

配置开机启动挂载

这里仍然采用 Linux 中/etc/rc.local 的形式,但 Mac OS 没有/etc/rc.local 这个文件,需要创建并让它识别。

  1. 修改 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
    
  2. 创建 rc.local 文件
    创建 /etc/rc.loca 文件,并写入开机即执行的命令:

    sudo vim /etc/rc.local
    
    #!/usr/local/bin/bash
    /usr/local/bin/bindfs /exsdd/Downloads /Users/username/Downloads
    /usr/local/bin/bindfs /exsdd/Movies /Users/username/Movies
    

    赋予 rc.local 文件可执行权限

    sudo chmod a+x /etc/rc.local
    
  3. 重启系统,验证生效

  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖 • 1 关注
  • mount
    2 引用
  • bindfs
    1 引用
  • 开机启动
    4 引用 • 1 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...