如何在启动时自动挂载特定的 zfs 数据集?

如何在启动时自动挂载特定的 zfs 数据集?

我正在运行带有加密 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.servicezfs-mount.service不是本机服务,重定向到 systemd-sysv-install”。 在此处输入图片描述
运行这些命令后, 的输出systemctl list-unit-files | grep zfs仍然相同。我原本希望状态变为enabled

但是,重新启动后,登录就可以再次使用了 - 并且/tank/ds1/home正确安装到了/home

一年后的现在,我再次发现了这个问题,一个新的加密数据集遇到了完全相同的问题,这个“解决方案”不再有帮助了。

剩余问题

的输出zfs get all DATASET | grep mount表明tanktank/ds1在启动后未挂载,tank/ds1/u18而和tank/ds1/home已挂载到各自的挂载点。太棒了!但为什么只有这两个自动安装?它确实是这样的,但我不明白为什么它会表现得那样。

所以我最后想问的是:请向我解释一下 ubuntu 如何决定在启动期间自动挂载哪些 zfs 数据集。我如何指定要自动挂载的特定数据集?

如何在启动时自动安装特定的加密数据集?

(编辑 2023):我目前的怀疑是,除非指定的挂载点不是空目录,否则数据集通常会自​​动挂载。即因为我的目录内有其他目录/tank/ds1,所以它不会tank/ds1在那里自动挂载。

相关内容