web-dev-qa-db-ja.com

暗号化されたデバイス上のLVMからの起動

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を変更する必要がありますか?

2
Jakob

これは、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_。

0
Jakob