如何在启动时自动解锁并挂载 ZFS 池?

如何在启动时自动解锁并挂载 ZFS 池?

我想知道是否可以在启动时自动解密并挂载 ZFS 池及其数据集。目前,我必须使用命令手动解锁池# zfs load-key -a,然后运行# zfs mount -a。还值得一提的是,“密钥”目前是一个密码(也许最好将其转换为密钥文件并将其存储在系统上的某个位置?)。

我运行的是 Ubuntu Server 23.04

答案1

我自己发现了如何做到这一点。

  1. 首先,在使用 加载密钥后# zfs load-key -L file:///path/to/keyfile <pool>,密钥将保持加载状态,除非您使用 显式卸载它# zfs unload-key
  2. 如果您想尝试自动加载密钥,下面是我编写的快速 systemd 服务,但是被警告:除非您在重新启动之前卸载密钥,否则服务将失败
# /etc/systemd/system/zfs-load-key.service
[Unit]
Description=Load encryption keys
DefaultDependencies=no
Before=zfs-mount.service
After=zfs-import.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/zfs load-key -L file:///etc/zfs/zpool.key <pool-name>

[Install]
WantedBy=zfs-mount.service
  1. 有几种方法可以在启动时自动挂载池:
  • 选项#1:使用zfs-mount.service
sudo zpool set cachefile=/etc/zfs/zpool.cache <pool-name>
sudo systemctl enable --now zfs-import-cache.service
sudo systemctl enable --now zfs.target
sudo systemctl enable --now zfs-import.target
sudo systemctl enable --now zfs-mount.service
  • 选项#2:使用zfs-mount-generator
sudo mkdir -p /etc/zfs/zfs-list.cache
sudo systemctl enable --now zfs.target
sudo systemctl enable --now zfs-zed.service
sudo touch /etc/zfs/zfs-list.cache/<pool-name>
cat /etc/zfs/zfs-list.cache/<pool-name> # if the file is empty, check that zfs-zed.service is running; if it is, run the command below
sudo zfs set canmount=off <pool-name>
cat /etc/zfs/zfs-list.cache/<pool-name> # if the file has been updated, run the command below
sudo zfs set canmount=on <pool-name>

# A file needs to be (manually) created in `/etc/zfs/zfs-list.cache` for each ZFS pool in your system and ensure the pools are imported by enabling `zfs-import-cache.service` and `zfs-import.target`.

相关内容