私の目標は、再起動せずにシステムの起動可能なバックアップを作成することです。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つをどのように組み立てることができますか?バイトを完全に整列させる必要がありますか?私はこれをどこでも探しましたが、運がありません。どんな助けでも大歓迎です!
パーティションをサポートしてディスク全体のイメージをループマウントしてから、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回だけキャプチャする必要があります。これらは、システムの通常の使用中に変更されるべきではありません。