ext4パーティションイメージから起動可能なディスクを作成する

ext4パーティションイメージから起動可能なディスクを作成する

私の目標は、再起動せずにシステムの起動可能なバックアップを作成することです。 qemu-imgを使って生のdd画像をvhdxに変換し、Hyper-Vで実行します。

liveCDから起動し、以下を実行すると:

dd if=/dev/sda of=/nfs/sda.raw conv=noerror,sync,notrunc

これをvhdxに変換し、多くの労力なしでHyper-Vで直接実行できます。

fdisk -l 出力:

Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 7555D04B-D6DC-4ABB-8863-529E874BADAD

Device       Start       End   Sectors   Size Type
/dev/sda1     2048   2000895   1998848   976M EFI System
/dev/sda2  2000896 500117503 498116608 237.5G Linux filesystem

しかし、システムがオンラインの場合、そのコマンドは使用できないため、dattobdドライバを使用して、次のようにext4ファイルシステム全体をコピーしました。

dd if=/dev/datto0 of=/nfs/sda2.raw bs=1M

これにより、すべてのデータが正しくコピーされます/dev/sda2。 LiveCDを使用してパーティションを追加すると、ハッシュが同じであることを確認しました/dev/sda2。これでliveCDから起動してコピーできます/dev/sda1。これはEFIパーティションなので、grubまたはLinuxカーネル関連のエントリを更新しない限り、頻繁に変更されません。時々再起動してパーティションをバックアップできますが、方法を知っている人がいる場合は、オンラインでやってください。教えてください。

/dev/sda12つの別々のファイルがあるので、基本的にliveCDで実行されているのと同じ出力を/dev/sda2提供する2つのファイルを1つのファイルにまとめる方法が気になります。dd if=/dev/sda of=/nfs/sda.raw conv=noerror,sync,notrunc完全に整列したバイトだけが必要ですか?私はこれのためにすべての場所を見つけましたが、運がありませんでした。どんな助けでも大変感謝します!

答え1

パーティションのサポートにより、ディスク全体のイメージを繰り返して、更新されたddイメージsda2をここに配置できます。

losetup -P /dev/loop0 /nfs/sda.raw  #this will create /dev/loop0p1 and loop0p2
dd if=/nfs/sda2.raw of=/dev/loop0p2
losetup -d /dev/loop0

または、パーティションテーブルによると、最初のパーティションはセクタ#2048で始まるため、ディスクには最初のパーティション(「ヘッダ」)の前に2048 * 512バイト= 1MiBのスペースがあり、500118192 - 500117503 - 1 = 688セクタ(344kiB)のパーティション(「テール」)外部空間です。 (最初のセクタが#1ではなく#0なので-1)

最初のパーティションはセクタ#2000895で終わり、2番目のパーティションはセクタ#2000896で始まるため、2つの間に未使用のスペースがありません。

ディスクの末尾にパーティションテーブルのバックアップコピーを含むGPTパーティションテーブルを使用しているため、「テール」部分もキャプチャする必要があります。セクター#500117504で始まり、ディスクの最後まで移動します。

したがって、「頭」と「尾」部分の内容を別々にキャプチャしてから一緒に入れることができます。

dd if=/dev/sda of=/nfs/head.raw bs=512 count=2048
dd if=/dev/sda of=/nfs/tail.raw bs=512 skip=500117504
cat /nfs/head.raw /nfs/sda1.raw /nfs/sda2.raw /nfs/tail.raw > /nfs/sda.raw

パーティションテーブルを変更しない限り、「ヘッド」と「テール」の部分を一度だけキャプチャします。システムの通常使用中は変更しないでください。

関連情報