
まず、いくつか関連する質問があります。
私の状況は次のとおりです。
- Linux (Debian テスト、3.14 カーネル) をインストールするための仮想マシン (VBox) を作成します。
- 1 つの BTRFS ブート パーティション、1 つの LUKS BTRFS ルート パーティション。
- 速度を上げるために、VM で IO を集中的に使用する変更を行います。
- インストールを USB フラッシュ ドライブに転送します。
最初に試したのは、フラッシュ ドライブと同じサイズのハードディスクを VM 全体で使用することでしたdd
。何らかの理由で、ブート パーティションの UUID を取得できず、フラッシュ ドライブでのブートに使用できませんでした。
フラッシュ ドライブを手動で EXT4 のブート パーティションと LUKS BTRFS のルート パーティションに分割すると、UUID の取得は全体的に正常に機能します。次に、rsync -aEXS --progress
マウントされた各パーティション (VM イメージ -> フラッシュ ドライブ) からファイルを転送しました。chroot
フラッシュ ドライブに -ed し、grub-install
フラッシュ ドライブ デバイスで実行して、update-grub
ファイル システムの UUID を更新しました。これは機能しませんでした。暗号化されたパーティションを正しく検出/使用してルートを取得できませんでした。試してみましたが、update-initramfs -u
成功しませんでした。
このシナリオを実行するために、何を見逃したか、または何をより良くできたか?
答え1
元の手順はほぼ正しかったのですが、何らかの理由で initrd が壊れてしまいました。以下に、同じことに興味がある人のために、動作するシナリオになるはずの手順をすべてまとめました。
- 必要に応じて仮想マシンを作成します。
- 希望するパーティション レイアウトを使用して Linux をインストールし、必要な変更をすべて行います。この場合、BTRFS ブート パーティションと LUKS で暗号化された BTRFS ルート パーティションで構成されます。転送中に参照を適切に更新するように注意すれば、他のレイアウトでも機能するはずです。
- インストールされたシステムにオフラインでアクセスできるように、Linux ライブ ISO を使用して以前の VM を起動します。
- 転送のために、USB フラッシュ ドライブを VM に接続します。(注:
dd
インストールしたドライブのイメージを作成し、VM の外部に保存して、通常の Linux システムから使用することができます。) - フラッシュドライブのパーティションを準備します。
- オプション:
dd
元のイメージをフラッシュ ドライブにコピーし、手順 7 に進み、次に手順 10 に進みます。(注: 私のケースでは、ブート BTRFS パーティションの UUID を列挙できなかったため、不明な理由でパーティションを再作成する必要があったようですblkid
。) - オプション: 元のものと同じ UUID を使用して新しいパーティションを作成します。
/dev/sda1
ブート用と/dev/sda2
ルート用を想定します。- BTRFS ブート パーティションの場合:
sudo mkfs.btrfs -f -L BOOT -U <original UUID> /dev/sda1
- LUKS ルートパーティションの場合:
sudo cryptsetup --uuid=<original UUID> luksFormat /dev/sda2
- ルートパーティションをマップします:
sudo cryptsetup --allow-discards open --type luks /dev/sda2 flash_luks
- BTRFS を使用してルートをフォーマットします。
sudo mkfs.btrfs -f -L ROOT -U <original UUID> /dev/mapper/flash_luks
- BTRFS ブート パーティションの場合:
- オプション: 新しい UUID を使用して新しいパーティションを作成します。オプション 2 と同じ手順を繰り返しますが、UUID/uuid に関連する引数を削除します。を使用して新しい UUID をメモします
sudo blkid
。
- オプション:
- 元のイメージ パーティションをマウントします。
- 各パーティションに読み取り専用のループバック デバイスを作成します。kpartx
sudo kpartx -ar <flash dd image file>
が loop0 に接続されていると仮定します。 - マウントポイントのディレクトリを作成します。
sudo mkdir -p /media/orig_boot /media/orig_root
- ブート:
sudo mount -r /dev/mapper/loop0p1 /media/orig_boot
- ルートLUKS:
sudo cryptsetup -r open --type luks /dev/mapper/loop0p2 orig_luks
- 根:
sudo mount -r /dev/mapper/orig_luks /media/orig_root
- 各パーティションに読み取り専用のループバック デバイスを作成します。kpartx
- フラッシュ ドライブのパーティションをマウントします。
/dev/sda1
ブート用と想定します。- マウントポイントのディレクトリを作成します。
sudo mkdir -p /media/flash_boot /media/flash_root
- ブート:
sudo mount -t btrfs -o nodiratime,noatime,compress=zlib,discard,ssd,space_cache /dev/sda1 /media/flash_boot
- ルート (以前に cryptsetup を使用してすでにマップされていると仮定):
sudo mount -t btrfs -o relatime,compress=zlib,discard,ssd,space_cache /dev/mapper/flash_luks /media/flash_root
- マウントポイントのディレクトリを作成します。
- 内容をコピー:
- ブート:
sudo rsync -aEXS --progress /media/orig_boot/ /media/flash_boot
- 根:
sudo rsync -aEXS --progress /media/orig_root/ /media/flash_root
- ブート:
- 元のイメージをアンマウントします。
- 根:
sudo umount /media/orig_root
- ルートLUKS:
sudo cryptsetup close orig_luks
- ブート:
sudo umount /media/orig_boot
- kpartx:
sudo kpartx -d <flash dd image file>
- 根:
- フラッシュドライブに chroot します。
- 練る
/sys
:sudo mount --bind /sys /media/flash_root/sys
- 練る
/dev
:sudo mount --bind /dev /media/flash_root/dev
- 練る
/dev/pts
:sudo mount --bind /dev/pts /media/flash_root/dev/pts
- 練る
/proc
:sudo mount --bind /proc /media/flash_root/proc
- ブートをアンマウントします:
sudo umount /media/flash_boot
- ルート内で再マウント:
sudo mount -t btrfs -o relatime,compress=zlib,discard,ssd,space_cache /dev/sda1 /media/flash_root/boot
- ルート:
sudo chroot /media/flash_root
- 練る
- アップデート
/etc/fstab
。- ブートライン:
UUID=<btrfs boot uuid> /boot btrfs nodiratime,noatime,compress=zlib,discard,ssd,space_cache 0 2
- ルートライン:
UUID=<btrfs root uuid> / btrfs nodiratime,noatime,compress=zlib,discard,ssd,space_cache 0 1
- ブートライン:
- アップデート
/etc/crypttab
:flash_luks UUID=<luks root uuid> none discard,luks
- インストールします
btrfs-tools
(インストールされていない場合):sudo apt-get install btrfs-tools
- ブート関連のものを更新します。
- Initrd (マウント前に何が必要かを決定し、起動時に LUKS パスワードを要求するために fstab/crypttab を使用します):
sudo update-initramfs -u -k all
(注: を使用してすべての initrd を再作成できますsudo update-initramfs -c -k all
が、念のため試していません。) - Grub (fstab を使用してカーネルのブート オプションを更新し、正しいパーティションをマウントします):
sudo update-grub
- grub を MBR にインストールします ( と仮定
/dev/sda
):sudo grub-install --recheck /dev/sda
- chroot を終了します:
exit
- Initrd (マウント前に何が必要かを決定し、起動時に LUKS パスワードを要求するために fstab/crypttab を使用します):
- すべてをアンマウントします。
sudo umount /media/flash_root/boot
sudo umount /media/flash_root/proc
sudo umount /media/flash_root/dev/pts
sudo umount /media/flash_root/dev
sudo umount /media/flash_root/sys
sudo umount /media/flash_root
sudo cryptsetup close flash_luks