我想知道是否可以在启动时自动解密并挂载 ZFS 池及其数据集。目前,我必须使用命令手动解锁池# zfs load-key -a
,然后运行# zfs mount -a
。还值得一提的是,“密钥”目前是一个密码(也许最好将其转换为密钥文件并将其存储在系统上的某个位置?)。
我运行的是 Ubuntu Server 23.04
答案1
我自己发现了如何做到这一点。
- 首先,在使用 加载密钥后
# zfs load-key -L file:///path/to/keyfile <pool>
,密钥将保持加载状态,除非您使用 显式卸载它# zfs unload-key
。 - 如果您想尝试自动加载密钥,下面是我编写的快速 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:使用
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`.