使用 ZFS 作为 macOS Applications 目录
最近折腾黑苹果,但是磁盘空间不够,更遗憾的是 ZFS 不支持缩小分区。所以采用 O3X(OpenZFS On OSX) 把 ZFS 分区挂载到 macOS 上实现扩展空间。
创建 dataset
之前的文章写过 zfs 安装 archlinux,创建数据集参考原文就行。
这里 ZFS 池是 zroot
,打算把 Applications 目录放在 zroot/macOS/Applications
这个位置。
1 | zfs create -o mountpoint=none zroot/macOS 复制 |
这样会在引入 zroot
的时候把这个数据集自动挂载到 /Applications
,此前还有一个自动挂载到 /home
的数据集,没什么影响。Linux 没有 /Applications
,macOS 没有 /home
。
然后进行进一步配置。我的 zroot
使用 blake3 作为 checksum 的选项,大量写入会导致 macOS 崩溃。由于我是 AMD 的 CPU,而 blake3 采用了很多指令集优化,猜测是指令集问题,所以换成了另一个参加了 SHA3 竞赛并取得不错成绩的 skein 算法。
1 | zfs set checksum=skein zroot/macOS/Applications 复制 |
配置 macOS
有三件事要干:
迁移数据
比较简单,为了方便我们先改一下挂载点:
1 | zfs set mountpoint=legacy zroot/macOS/Applications 复制 |
mountpoint=legacy
意思就是不自动挂载,并且只能通过系统自带的 mount
命令挂载。
1 | mkdir ~/test 复制 |
自动挂载
在这之前把挂载点改回去
1 | sudo zfs set mountpoint=/Applications zroot/macOS/Applications 复制 |
我打算使用 launchd 实现自动挂载,原因是 OpenZFS on OS X 自己有一个自动挂载所有 zpool 的脚本挂在了 launchd 下面。
距离配置已经有半年多了,凭印象写()
/System/Library/LaunchDaemons
或者 /Library/LaunchDaemons
里面有一个 ZFS 相关的服务配置,复制一份下来(其实挺好读的),之后把里面要执行的命令做一下修改,比如:
1 | <key>ProgramArguments</key> 复制 |
删除 /Applications
需要关闭系统完整性保护等操作。本来想直接链接到根目录,不过发现 ZFS 挂载到根目录不需要直接配置,就懒得整了。
具体忘了咋回事了,我猜把文件夹里面东西删干净就够用了。
高三文化课太紧迫了,然后没考好还要复读,估计这篇文章完整版得等明年高考完才能出现了。
只能提供一个操作思路了,我猜像我一样折腾 zfs 和黑苹果的同志看完应该能理解。
有一些缺点,比如偶尔挂载慢了,LaunchPad 会抽风。