我正在运行带有加密 ZFS 的 Ubuntu 18.04 /
,现在我决定将我的/home
目录设为单独的数据集。
创刊号
按照从现有目录创建 zfs 的正确方法是什么?我创建了一个新的数据集,其挂载点位于/home
。
# backup data
sudo mv /home /home-backup
# create empty dataset
sudo zfs create tank/ds1/home # you could already specify the mountpoint here.
# oops, I forgot to set the mountpoint so it is now /tank/ds1/home
sudo zfs set mountpoint=/home tank/ds1/home
# copy data to newly created dataset
sudo rsync -aAX /home-backup/ /home
重启后,我无法再登录 GUI - 输入正确的密码只会让我回到登录屏幕。但这不是什么大问题:在按下时打开的终端中,CtrlAltF2我可以登录并运行sudo zfs mount tank/ds1/home
,之后,登录 GUI 就可以正常工作了。问题只是这个数据集不会在启动时自动安装。
一些建议拱门维基建议使用某些服务,但我不知道这是否也适用于我的 ubuntu,并且如果可以避免的话,我只想自动挂载tank/ds1/home
(mountpoint /home
)和tank/ds1/u18
(mountpoint /
,已经以某种方式自动挂载)但不tank/ds1
(仅存在于分层目的)。
问题
- 如何在启动时自动挂载我的主目录数据集?
“已解决”。请参阅下面的解决方案部分。 - 为什么我的根目录数据集在启动时自动挂载?
我很高兴,但我很好奇为什么。如果它属于第一个问题的范围内,请也回答这个问题。 - 哪些数据集由 zfs mount 服务自动挂载?
该问题的基础在下面的“剩余问题”部分中概述。
系统信息
$ uname -a
Linux motorbrot 5.3.0-62-generic #56~18.04.1-Ubuntu SMP Wed Jun 24 16:07:03 UTC 2020 x86_64 x86_64 GNU/Linux
$ zfs version
zfs-0.8.4-1
zfs-kmod-0.8.4-1
启动后立即列出 zfs 数据集(在临时修复任何内容之前)会显示数据集及其挂载点,并且它们符合预期。使用zfs get all tank/ds1/home | grep mount
和类似命令显示所有都已canmount on
挂载tank/ds1/u18
(在 上/
)。
我的/etc/fstab
仅包含我的交换分区和我的 EXT2/boot
分区。
我的/etc/default/zfs
包含ZFS_MOUNT='yes'
,但似乎没有效果,因为并非所有数据集都已安装。这也许可以通过注释来解释Changing some of these settings may not make any difference on systemd-based setup, e.g. setting ZFS_MOUNT=no will not prevent systemd from launching zfs-mount.service during boot.
。
$ systemctl list-unit-files | grep zfs
zfs-import.service generated
zfs-mount.service generated
zfs-share.service generated
zfs-zed.service masked
解决方案
下列的如何让 ZFS 数据集在启动时自动挂载我被告知zfs.target
不存在,并且和都zfs-import.service
“zfs-mount.service
不是本机服务,重定向到 systemd-sysv-install”。
运行这些命令后, 的输出systemctl list-unit-files | grep zfs
仍然相同。我原本希望状态变为enabled
。
但是,重新启动后,登录就可以再次使用了 - 并且/tank/ds1/home
正确安装到了/home
。
一年后的现在,我再次发现了这个问题,一个新的加密数据集遇到了完全相同的问题,这个“解决方案”不再有帮助了。
剩余问题
的输出zfs get all DATASET | grep mount
表明tank
和tank/ds1
在启动后未挂载,tank/ds1/u18
而和tank/ds1/home
已挂载到各自的挂载点。太棒了!但为什么只有这两个自动安装?它确实是这样的,但我不明白为什么它会表现得那样。
所以我最后想问的是:请向我解释一下 ubuntu 如何决定在启动期间自动挂载哪些 zfs 数据集。我如何指定要自动挂载的特定数据集?
如何在启动时自动安装特定的加密数据集?
(编辑 2023):我目前的怀疑是,除非指定的挂载点不是空目录,否则数据集通常会自动挂载。即因为我的目录内有其他目录/tank/ds1
,所以它不会tank/ds1
在那里自动挂载。