Linux OS をあるドライブから別のパーティションに転送する

Linux OS をあるドライブから別のパーティションに転送する

まず、いくつか関連する質問があります。

私の状況は次のとおりです。

  1. Linux (Debian テスト、3.14 カーネル) をインストールするための仮想マシン (VBox) を作成します。
  2. 1 つの BTRFS ブート パーティション、1 つの LUKS BTRFS ルート パーティション。
  3. 速度を上げるために、VM で IO を集中的に使用する変更を行います。
  4. インストールを USB フラッシュ ドライブに転送します。

最初に試したのは、フラッシュ ドライブと同じサイズのハードディスクを VM 全体で使用することでしたdd。何らかの理由で、ブート パーティションの UUID を取得できず、フラッシュ ドライブでのブートに使用できませんでした。

フラッシュ ドライブを手動で EXT4 のブート パーティションと LUKS BTRFS のルート パーティションに分割すると、UUID の取得は全体的に正常に機能します。次に、rsync -aEXS --progressマウントされた各パーティション (VM イメージ -> フラッシュ ドライブ) からファイルを転送しました。chrootフラッシュ ドライブに -ed し、grub-installフラッシュ ドライブ デバイスで実行して、update-grubファイル システムの UUID を更新しました。これは機能しませんでした。暗号化されたパーティションを正しく検出/使用してルートを取得できませんでした。試してみましたが、update-initramfs -u成功しませんでした。

このシナリオを実行するために、何を見逃したか、または何をより良くできたか?

答え1

元の手順はほぼ正しかったのですが、何らかの理由で initrd が壊れてしまいました。以下に、同じことに興味がある人のために、動作するシナリオになるはずの手順をすべてまとめました。

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

関連情報