Arch Linux 的 wiki 只对 zfs-mount-generator 提了一嘴,提示如果把 dataset mount 到 /var 等目录的时候需要用 zfs-mount-generator 而不是 zfs-mount.service 来负责挂载,但是如何使用就没有教。根据 OpenZFS 的文档,结合 manpage,我大概总结如下。
首先需要创建目录 /etc/zfs/zfs-list.cache ,在这里面每一个需要开机自动挂载的 pool (注意是 pool 不是 dataset)都创建一个 pool 名字的文件。比如我的机子上是 raid1a、raid1b、zroot 三个 pool,那这个目录里面就应该是:
1
2
3
4
/etc/zfs/zfs-list.cache
├── raid1a
├── raid1b
└── zroot
文档里使用 zed 来生成文件内容,但是我不想等,这里根据 manpage 的方法来手动生成内容。使用这个命令来列出所有信息,然后自己从输出里面筛选 pool 的那几行出来放进对应的文件里:
1
2
3
4
5
6
% zfs list -Ho name,mountpoint,canmount,atime,relatime,devices,exec,readonly,setuid,nbmand,encroot,keylocation,org.openzfs.systemd:requires,org.openzfs.systemd:requires-mounts-for,org.openzfs.systemd:before,org.openzfs.systemd:after,org.openzfs.systemd:wanted-by,org.openzfs.systemd:required-by,org.openzfs.systemd:nofail,org.openzfs.systemd:ignore
raid1a /mnt/raid1secured on on on on on off on off - none - - - - - - - -
raid1b /mnt/sharedisk on on on on on off on off - none - - - - - - - -
...
zroot none off on on off on off on off - none - - - - - - - -
...
所以 raid1a 里面就是raid1a /mnt/raid1secured on on on on on off on off - none - - - - - - - -
,其他就不说了,一样的。
试过可以成功开机,功能正常。虽然开机之后这些文件里面多了很多其他归属于这个 pool 的 dataset 的 entry,但是不管了,能用就行。