ストックカーネルバージョン4.9.6およびZoLバージョン0.7.0を使用してArchLinuxの更新バージョンを実行しており、起動時に暗号化された非ルートプールをインポートしたいと考えています。プールはRAID1ミラーです。
暗号化されたコンテナは、次の方法で作成されました。
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ファイルには、systemd
、zfs
、およびsd-encrypt
フックが含まれています。また、モジュールdm_mod
、dm_crypt
、aes_x86_64
、およびraid1
も含まれています。これらは、私がオンラインで見つけた断片に基づいた、暗闇の中でのショットのようなものです。
Systemd-bootを使用していますが、重要なのはmkinitcpio構成を正しく設定することにあるようです。ブートパーティションが暗号化されていません。
繰り返しますが、ここでの私の唯一の目標は、起動時に暗号化されたZFSプールを自動的に(パスフレーズのプロンプトを使用して)インポートすることです。暗号化されていないプールでこれを行うのに問題はありません。
コメントする評判が50もないので、ここに質問を投稿します。あなたのrootfsは暗号化されていませんか?それで、起動すると、cryptsetupプロンプトが表示されませんか?パスワードpromtsが届かない場合は、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を追加して起動し、cryptsetupコマンドを変更してfifoからパスワードを受け入れる以外に方法はありません。そのためにbashスクリプトを作成したので、initramfsを更新すると、このbashスクリプトはinitramfsを解凍し、変更を加えて、元に戻します。しかし、私はgentooを使用しており、それは美しいgenkernelです。 Genkernelには、指定した場合、ZFSおよびcryptsetupのフックが含まれています。 Arch Linuxでの動作はわかりません。おそらく、genkernel/dracutを使用してカーネルを構築するオプションもあります。そうすれば、cryptsetupフックとzfsフックをinitramfsに簡単に含めることができます(まだ含まれていない場合)。とにかく、initファイルを変更することで簡単に実行できます。試して、結果をここに投稿してください。 initramfsはさまざまな方法を使用して圧縮されている可能性があるため、archlinuxで解凍する方法を見つけてください。私の側では、genkernelを変更してcpioとして生成し、cpioコマンドを使用して解凍/パックバックしました。
[〜#〜] update [〜#〜]:mkinitcpio.confを編集し、「filesystems」の前に2つのフック「encryptzfs」を追加する必要があります次にHOOKSで、/ etc/crypttab.initramfs#(google crypttab)でロック解除に必要なluksデバイスを定義する必要があります。このファイルは次世代の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で、「ファイルシステム」の前または後の最後のどこかに「zfsmount」をHOOKSに追加します。
そしてもちろん、mkinitcpioを使用してinitramfsを再生成します
参照: https://wiki.archlinux.org/index.php/Installing_Arch_Linux_on_ZFS