Debianのインストールが完了したばかりで、起動しようとしています。パーティションを作成せずにハードドライブ(LUKS)を暗号化し、LVMをセットアップしました。個別のブートボリュームがないため、システムは論理ボリュームroot
から起動します。 BIOSをGRUBに置き換えましたが、システム用にGRUB構成が生成されていないため、GRUBから手動で起動する必要があります。
GRUB私が正しいと推測したシェルコードはこれです:
cryptomount ahci0
set root=lvm/vg-root
linux /vmlinuz root=/dev/mapper/vg-root cryptdevice=/dev/sda
initrd /initrd.img
これは、別の暗号化されたLVMセットアップに対して ここ で指定された構成の変更です。
GRUBはドライブを正常に復号化しますが、このように起動しようとすると、次のように数十回表示されます。
Begin: Running /scripts/local-block ... WARNING: Failed to connect to lvmetad. Falling back to device scanning.
Volume group "vg" not found
Cannot process volume group vg
done.
次に、initramfsシェルを取得します。たとえばroot=/dev/mapper/bogus-root
を使用した場合にも同じことが起こるため、カーネルはディスクを復号化する前にルート論理ボリュームを探していると思われます。このシステムを起動できるカーネルパラメーターはありますか、それともinitrdを変更する必要がありますか?
これは、Debianパッケージ_/etc/crypttab
_の_update-initramfs
_を使用して、initramfsに_initramfs-tools
_を追加することで解決できます(ファイル形式についてはcrypttab
のマニュアルページを参照)。
まず、暗号化されたディスクをマウントします。次に、ホスト上の_/dev
_、_/proc
_、_/sys
_、および_/run
_をルートファイルシステムにバインドマウントします。 _mount --bind /dev /mnt/dev
_。次に、ルートファイルシステムにchrootします。これで、crypttabファイルを(任意の場所に)作成するか、chrootする前にコピーすることができます。
Crypttabをinitramfsに含めるには、ファイルをinitramfsにコピーするフックスクリプトを_/usr/share/initramfs-tools/hooks
_に作成します。 _initramfs-tools
_は2種類のスクリプトを使用することに注意してください。ブートスクリプトはシステムの起動時にinitramfs init
によって実行されますが、フックスクリプトはinitramfsイメージの作成中に実行されます。
フックスクリプトは次のようになります( source ):
_#!/bin/sh
. /usr/share/initramfs-tools/hook-functions
cp -pnL /path/to/crypttab ${DESTDIR}/etc/crypttab
chmod 644 ${DESTDIR}/etc/crypttab
_
_${DESTDIR}
_は、フックの実行時に作成されるinitramfsのルートに展開されます。
次に、適切なオプションを指定して_update-initramfs
_を実行します。ホストとターゲットが同じカーネルバージョンを使用していたため、-k $(uname -r)
を使用しました。また、_-c
_と_-b
_を使用して、イメージの書き込み先を指定しました。
新しいイメージをインストールするか、そのパスをGRUBに渡した後、初期のユーザースペースは、ルートボリュームをマウントする前に、ディスクを復号化し、含まれている論理ボリュームをマップする必要があります。必要なカーネルパラメータは、ルートボリュームパスのみです。 _root=/dev/mapper/vg-root
_。