问题: 什么使得分区表对于操作系统而言可识别且有效?(特别是 Linux)?
可选的背景信息: 我认为有某种“签名”定义了有效的分区表,如果找不到签名,那么 Linux(或任何操作系统)就不会报告分区?
我正在使用十六进制编辑器检查看似随机的数据(新随机擦除或对整个驱动器进行加密),它的某些功能不断使驱动器被识别为具有分区(有时在擦除或加密后有 2、3 或 4 个随机大小的分区)。
我已经检查了字节 446 到 509(分区表应该存储在此处;使用从 0 开始的索引),但似乎无法弄清楚是什么让 Linux 认为这些分区是有效的 --- 它只是随机数据,并且我认为从统计上来说,分区由写入 MBR 的随机数据定义是不可能的。
我还使用了 Linux 的 GParted 分区管理器软件来查看它是否能识别分区,结果确实如此不是。 然而,另一个软件和 Linux 本身识别这些“分区”。注意:这些分区的大小无效,并且加起来与物理驱动器的大小不相等,而且似乎是随机大小。
答案1
答:没什么特别的。
MBR 包含启动签名在最后,表示有(或应该有)带有 BIOS 的 x86 PC 的可执行代码。在 MBR 中,代码读取分区表并引导活动分区。该分区的引导扇区也将具有引导签名。软盘上的引导扇区具有引导签名。这样做的目的是防止其他类型的机器盲目加载引导代码并执行它;但实际上,签名只是预期存在。如果没有,则可能表示整个扇区已损坏,您不应再继续,因为您不想执行随机代码。
但是操作系统可以尽其所能(或尽可能少地)尝试解释分区表。假设您正在使用磁盘十六进制编辑器,并设法破坏了分区表中的几个条目。也许其他一些分区仍然有效,所以可能值得一试;目前还没有执行任何操作。GParted 可能会进行实际检查,当“它不合逻辑”时,认为磁盘已损坏并适合重新分区。
较新的 GPT 格式确实采用了 CRC32 来检测损坏。即便如此,操作系统既然已经确定有问题,仍然可以尽最大努力查看可以读取的内容。