起動時に root で暗号化されていない ZFS プールを自動的にインポートするにはどうすればよいですか?

起動時に root で暗号化されていない ZFS プールを自動的にインポートするにはどうすればよいですか?

私はデフォルトのカーネルバージョン4.9.6とZoLバージョン0.7.0を含むアップデートされたバージョンのArch Linuxを実行しています;起動時に暗号化された非ルートプールを取得したいと思います。プールはレイド1ミラーです。

暗号化されたコンテナは次のように作成されます。

cryptsetup -y -v luksFormat /dev/nvme0n1p3

そして

cryptsetup -y -v luksFormat /dev/nvme1n1p3

すべてのパスワードに同じパスワードを使用しました。

コンテナを手動で開き、次からプールをインポートできます。

cryptsetup open /dev/nvme0n1p3 enc0  
cryptsetup open /dev/nvme1n1p3 enc1   
zpool import -d /dev/mapper zeb

cryptosetupコマンドを実行すると、パスワードを入力して受け入れるように求められます。

私のmkinitcpioファイルにはsystemdzfsおよびsd-encryptフックが含まれています。また、モジュールとが含まれていますdm_mod。これは私がオンラインで見つけた情報の一部に対する盲目的な試みと同じです。 dm_cryptaes_x86_64raid1

私はsystemd-bootを使用していますが、mkinitcpio設定を正しく設定することが重要なようです。私のブートパーティションは暗号化されていません。

ここでも私の唯一の目標は、起動時に暗号化されたZFSプールを自動的にインポートすることです(パスワードを求めるメッセージを表示する)。暗号化されていないプールでは、これを行うことに問題はありません。

ベストアンサー1

コメントできる評判が50件ないので、ここに質問を投稿します。あなたのrootfsは暗号化されていませんか?その後、起動時にcryptsetupプロンプトが表示されませんか?パスワードプロンプトが表示されない場合は、initramfsを解凍し、initファイルを変更してrootfsをインストールした後、どこかに次の行を追加することをお勧めします。 cryptsetup open /dev/nvme0n1p3 enc0 && cryptsetup open /dev/nvme1n1p3 enc1 && zpool import -d /dev/mapper zeb

しばらく前に、リモートサーバーでZFSを使用してLUKS暗号化ROOTFSのリモートSSHロック解除を追加する必要がありました。 initファイルを修正し、ここにdropbearを追加して起動し、fifoでパスワードを受け入れるようにcryptsetupコマンドを変更する以外に選択肢はありませんでした。このためにbashスクリプトを作成したので、initramfsを更新すると、bashスクリプトはinitramfsを解凍し、変更を加えて再パッケージ化します。しかし、私は美しいgenkernelであるgentooを使用しています。 Genkernelには、ZFSとcryptsetup(指定した場合)のフックが含まれています。 Arch Linuxではどうなるかわかりません。 genkernel / dracutを使用してカーネルを構築することを選択した場合、initramfsにcryptsetupとzfsフックがまだ含まれていない場合は簡単に含めることができます。とにかく、initファイルを変更すると簡単にできます。一度試してみて、ここに結果を投稿してください。 initramfsは他の方法を使用して圧縮することができるのでArchlinuxで解凍する方法を学びなさい。私の立場では、genkernelを修正してcpioとして生成し、cpioコマンドを使用して解凍または再圧縮しました。

修正する:mkinitcpio.confを編集し、HOOKSの「ファイルシステム」の前に2つのフック「encryption zfs」を追加する必要があります。その後、/etc/crypttab.initramfs#でロックを解除する必要があるluksデバイスを定義する必要があります(google crypttab)、このファイルは次世代initramfsに含まれるため、少なくともロックを解除できます。次の再起動時にZFSが自動インポートを実行することもできますが、そうでない場合は次のようにします。

/usr/lib/initcpio/install/zfsmount ファイルを生成します。

#!/bin/bash

build() {
    add_runscript
}

/usr/lib/initcpio/hooks/zfsmount ファイルの生成

#!/usr/bin/ash

run_hook() {
zpool import mypool
}

そして、mkinitcpio.confのHOOKSにある「Filesystem」の前後に「zfsmount」を追加してください。

もちろん、mkinitcpioを使ってinitramfsを再生成してください。

参考資料: https://wiki.archlinux.org/index.php/Installing_Arch_Linux_on_ZFS

https://wiki.archlinux.org/index.php/mkinitcpio

おすすめ記事