起動時に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. キー自動ロードを試みたい場合は、私が書いたクイックシステムサービスがありますが、警告を受ける:再起動する前にキーを削除しないと、サービスは失敗します。
# /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`.

関連情報