web-dev-qa-db-ja.com

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パーティションをddする場合、ハッシュが同じであるためです。これで、liveCDを起動して、/dev/sda1をコピーできます。これはEFIパーティションなので、grubまたはLinuxカーネル関連のものを更新しない限り、頻繁に変更されることはありません。再起動するだけで、そのパーティションを一度バックアップするだけで問題ありません。しばらくの間、しかし誰かがそれをオンラインで行う方法を知っているなら、私に教えてください。

今、私は2つの別々のファイルに/dev/sda1/dev/sda2を持っています、私の質問は、liveCDでdd if=/dev/sda of=/nfs/sda.raw conv=noerror,sync,notruncを実行するのと本質的に同じ出力を与える単一のファイルにこれら2つをどのように組み立てることができますか?バイトを完全に整列させる必要がありますか?私はこれをどこでも探しましたが、運がありません。どんな助けでも大歓迎です!

1
polyemia

パーティションをサポートしてディスク全体のイメージをループマウントしてから、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バイト= 1 MiBのスペースがあり、500118192-500117503-1 = 688セクター(344 kiB)パーティションの外側の最後(「テール」)のスペース。 (最初のセクターが#1ではなく#0であるため、-1)

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

ディスクの最後にパーティションテーブルのバックアップコピーが含まれている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

パーティションテーブルを変更しない限り、「ヘッド」と「テール」の部分を1回だけキャプチャする必要があります。これらは、システムの通常の使用中に変更されるべきではありません。

0
telcoM