我有一个具有这种分区布局的双引导系统:
# 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,并定期将整个 60G 分区和 HDD 的前 63 个扇区备份dd
到外部 HDD,同时我从实时 linux 映像启动。
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 坏了(第一次)之后,我尝试使用上面的反向从 live 恢复它
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 出现问题,光标闪烁,然后突然重新启动一遍又一遍)。最后使用 live thenchroot
和再次启动grub-install
。在此之后,我能够再次正常启动。
我备份了前 63 个扇区,因为 Grub 将那里用于核心映像(如果我没记错的话)。启动后我做的第一件事是将那里转储到一个 newboot.img 文件,然后:
diff boot.img newboot.img
什么也没返回,这意味着即使重新安装 grub,那个区域也是一样的。
- 在这种情况下无法启动的根本原因是什么?
- 我应该如何进行备份(避免第三方)?
据我所知,没有分区更改,没有 UUID ......两个图像一起创建。grub 代码可以在扇区 63 之后的某个地方继续吗?在哪里和多长时间?
谢谢你。
您正在备份主引导记录和其他 62 个扇区,即 31.5 KB。但是 GRUB2 在 MBR 之后嵌入在磁盘的第一个磁道上的部分很容易比这更大。
是的,您可能已经检查了 的大小
/boot/grub/i386-pc/core.img
并发现它比那个小。但这core.img
并不是嵌入到 MBR 和第一个分区开头之间的空间的全部内容。至少,现代 GRUB2 还嵌入了一些 GRUB 模块:fshelp.mod
, 各种文件系统的通用支持模块part_msdos.mod
, MBR 分区表支持/boot
目录的文件系统。core.img
在我的系统上,假设您的/boot
文件系统是 ext2/3/4(即支持的文件系统ext2.mod
非常小) ,那么这些最小模块的总大小可以计算出超过 36 KB。您的 Linux 发行版可能会选择嵌入更多模块以提供更多功能:上面列出的模块是非常简单的集合。可以使用 LZMA 算法压缩模块以降低总大小,但现代 GRUB2 还使用 Reed-Solomon 纠错码来保护嵌入式代码免受位错误,这再次推高了大小。
我一直在尝试开发一个程序来检测各种引导加载程序并读取它们的低级配置以用于诊断/取证目的。事实证明,我基本上一直在复制
bootinfoscript
(有一些差异)的功能。但如果我正确读取磁盘结构,我系统上嵌入式 GRUB2 代码的总大小为 102 个扇区,即 51 KB。