次のパーティションレイアウトを備えたデュアルブートシステムがあります。
# fdisk -l
Disk /dev/sda: 596.2 GiB, 640135028736 bytes, 1250263728 sectors
Disk model: SAMSUNG HM640JJ
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: dos
Disk identifier: 0x08c427b9
Device Boot Start End Sectors Size Id Type
/dev/sda1 80325 30800324 30720000 14.7G 7 HPFS/NTFS/exFAT
/dev/sda2 30800325 440400559 409600235 195.3G 7 HPFS/NTFS/exFAT
/dev/sda3 440403966 1132820479 692416514 330.2G f W95 Ext'd (LBA)
/dev/sda4 * 1132820480 1250263039 117442560 56G 83 Linux
/dev/sda5 440403968 1116043263 675639296 322.2G 7 HPFS/NTFS/exFAT
/dev/sda6 1116045312 1132820479 16775168 8G 82 Linux swap / Solaris
Partition table entries are not in disk order.
これはparted
MBRに基づいていますgdisk
。 Linuxのインストール後にWindowsから起動したことがなく、ライブLinuxイメージから起動したdd
ときに、Linuxの60Gパーティション全体とHDDの最初の63セクタを外部HDDに定期的にバックアップしました。
dd if=/dev/sda4 of=linux.img bs=4096 conv=fdatasync
dd if=/dev/sda of=boot.img bs=512 count=63 conv=fdatasync
私のLinuxが(最初に)クラッシュした後、上記のリバースブートを使用して回復しようとしました。
dd if=linux.img of=/dev/sda4 bs=4096 conv=fdatasync
dd if=boot.img of=/dev/sda bs=512 conv=fdatasync
dd
エラーは報告されておらず、Linuxパーティションが期待どおりに復元されました。ただし、起動できません(Grubに問題があるため、システムは再起動し、カーソルが点滅してから突然再起動します)。最後にライブを使用しchroot
て再起動してくださいgrub-install
。その後、再び正常に起動できました。
Grubはそれをコアイメージとして使用するので、最初の63セクターをバックアップしました(私の記憶が正しい場合)。起動後に最初に行うことは、newboot.imgファイルにダンプしてから、次のことです。
diff boot.img newboot.img
何も返されません。つまり、grubを再インストールした後も領域が同じであることを意味します。
- この場合、開始できない根本原因は何ですか?
- バックアップはどうすればよいですか(サードパーティの防止)?
私が知っている限り、パーティションの変更やUUIDはありません。両方の画像が一緒に作成されます。グラブコードはセクタ63以降のどこかで続行できますか?どこで、どれくらいかかりますか?
ありがとうございます。
答え1
dd if=/dev/sda of=boot.img bs=512 count=63 conv=fdatasync
マスターブートレコードと他の62セクタ(31.5KB)をバックアップしようとしています。ただし、MBRの次のディスクの最初のトラックに含まれているGRUB2部分は、これより簡単に大きくなる可能性があります。
はい、寸法を確認して/boot/grub/i386-pc/core.img
からそれより小さい場合があります。しかし、これはcore.img
MBRと最初のパーティションの先頭の間にスペースを挿入することのすべてではありません。少なくとも最新のGRUB2には、一部のGRUBモジュールも含まれています。
fshelp.mod
、さまざまなファイルシステムのための共通サポートモジュールpart_msdos.mod
、MBRパーティションテーブルのサポート- Linuxディレクトリを含むファイルシステムと一致するファイルシステムサポートモジュール
/boot
。
core.img
私のシステムでは、/boot
ファイルシステムがext2/3/4(つまり、サポートされているファイルシステムが非常に小さい)であると仮定すると、これらの最小モジュールの合計サイズはext2.mod
36KBを超えます。 Linuxディストリビューションでは、より多くの機能を提供するために、より多くのモジュールを含めることを選択できます。上記のモジュールは非常に単純なモジュールのセットです。
これらのモジュールはLZMAアルゴリズムを使用して圧縮することで全体のサイズを減らすことができますが、最新のGRUB2はReed-Solomonエラー訂正コードを使用してビットエラーから埋め込まれたコードを保護し、サイズを再び増やします。
私はさまざまなブートローダを検出し、診断/法医学の目的でその下位レベルの設定を読み取るプログラムを開発しようとしてきました。既定では、次の機能を複製したことがわかりました。bootinfoscript
(若干の違いがあります)。ただし、ディスクの構造を正しく読み取ると、システムに含まれるGRUB2コードの合計サイズは102セクタ、つまり51KBです。