Linuxシステム用のraw imgファイルの生成

Linuxシステム用のraw imgファイルの生成

QEMUで起動して実行できるIMGファイルでLinuxシステムをバックアップしようとしています。

メモ:私はLubuntuと小さなコアLinuxでテストしました。

私が従うプロセスは次のとおりです。

  • sdaハードドライブが2つありますsdb
  • パーティションsdb1とマウントsdb1パーティション/mnt/sdb
  • ddsdaマウントされたディレクトリsdbにあるIMGファイルサイズの空のファイル。dd if=/dev/zero of=/mnt/sdb/disk.img bs=x count=1- xのサイズsda
  • 次にfdiskonを使用してsdaディスクレイアウトをスクリプトファイルに出力し、それをdisk.imgファイルにロードします。
  • 次に、-losetup -P -f disk.img の内容をマウントしてコピーします。
  • 循環機器を探す

    たとえば、/dev/loop36 0 0 0 0 /mnt/sdb/disk.img 0 512

  • ループデバイスの最初のパーティションにファイルシステムを作成します。mkfs.ext2 /dev/loop36p1

  • 分割サイクリング機器の設置 -mount /dev/loop36p1 /mnt/img
  • 次にブートセクタをコピーします。dd if=/dev/sda of=disk.img bs=512 count=1 conv=notrunc
  • 最後に、rsyncを使用してファイルシステムを/mnt/imgディレクトリにコピーしましたが、これはさまざまな成功を収めました。使用:

    $ rsync -aHxv / \
       --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} \
       /mnt/img 
    

Lubuntuを使用して上記の正確なプロセスを試してみましたが、コマンドは機能しrsyncましたが、QEMUでIMGを実行しようとすると、ハードドライブから起動すると中断されます。

tcl で上記のプロセスを試みるとrsyncコマンドが失敗し、QEMU からブートしようとするとブート可能なデバイスがないことを示すメッセージが表示されます。

誰にもこれについての提案はありますか?それとも、以前に同様のことをしたことがあり、目標を達成するためのより良い方法はありますか?

答え1

  • ブートセクタをコピーすると、その中にあるパーティションテーブルもコピーされます。 fdiskのバージョンと元のファイルsdaとイメージファイルを分割するときに使用される正確なオプションによっては、パーティションの制限はまったく同じでも同じでもない場合があります。それ以外の場合...ループマウントはfdisk作成したパーティションオフセットを使用しますが、起動時にVMは元のパーティションオフセットを使用しますsda

  • MBRをコピーしましたが、dd内容は次のとおりです。 MBRには、他のブートローダコンポーネント(またはGRUBレガシー)の場所を識別するブロックレベルのオフセットが含まれています。これらのファイルが 。/bootrsync<filesystem>_stage1.5stage2rsync

  • ブートローダの一部を完全に見逃した可能性があります。 GRUB Legacyには、パーティションの先頭、つまり領域にその一部を含めることができます。ファイルシステムの外部GRUB2はほとんど常にMBR以降のディスクブロックにほとんどのコアイメージを書き込みますが、最初のパーティションが始まる前。ディスクの最初の512バイトのみをコピーすると、既存のMBRのみが取得されますが、内容は失われます。私はこれがあなたのスタートアップが失敗した最大の理由だと思います。

計画した仮想化方法に応じて、おそらく次のようなものを使用してイメージ環境mount --bind /dev /mnt/img/dev/proc移動し、それを使用して正しいブロックオフセットを持つイメージファイルにブートローダーを正しく再作成する必要があります。/syschrootgrub-install

もう1つの可能なアプローチは、シングルユーザーモードでソースシステムを起動するか、ソースシステムでできるだけ多くのデーモンを停止(つまりシステム停止)してから、システムディスク全体を単一のジョブとしてイメージddに挿入することです。この方法fsckでは、最初の起動時に結果イメージを実行する必要がありますが、MBRとブートローダのすべての複雑さを回避できます。

関連情報