如果您的磁盘上有多个操作系统,则每个操作系统都会使用一个或多个磁盘分区。在这些分区的位置上存在分歧可能会导致灾难性后果。
MBR 包含一个分区表,描述了(主)分区的位置。 有 4 个表条目,用于 4 个主分区,每个条目看起来像
struct partition {
char active; /* 0x80: bootable, 0: not bootable */
char begin[3]; /* CHS for first sector */
char type;
char end[3]; /* CHS for last sector */
int start; /* 32 bit sector number (counting from 0) */
int length; /* 32 bit number of sectors */
};
(其中 CHS 代表柱面/磁头/扇区)。此信息是冗余的:分区的位置由 24 位的 begin
和 end
字段以及 32 位的 start
和 length
字段给出。
Linux 仅使用 start
和 length
字段,因此可以处理不超过 2^32 个扇区的分区,即最大 2 TiB 的分区。这比目前可用的磁盘大十二倍,因此可能在未来五年左右的时间内足够用。(所以,分区可以非常大,但存在一个严重的限制,即在具有 32 位整数的硬件上,ext2 文件系统中的文件不能大于 2 GiB。)
DOS 使用 begin
和 end
字段,并使用 BIOS INT13 调用来访问磁盘,因此即使使用转换 BIOS,也只能处理不超过 8.4 GB 的磁盘。(由于 FAT16 文件系统的限制,分区不能大于 2.1 GB。)Windows 3.11、WfWG 和 Windows NT 3.* 也是如此。
Windows 95 支持扩展 INT13 接口,并使用特殊的分区类型(c、e、f 而不是 b、6、5)来指示应以这种方式访问分区。当使用这些分区类型时,begin
和 end
字段包含虚拟信息 (1023/255/63)。Windows 95 OSR2 引入了 FAT32 文件系统(分区类型 b 或 c),该文件系统允许最大 2 TiB 的分区。
当实际上没有任何问题时,您从 fdisk
得到的关于“重叠”分区的这种无稽之谈是什么? 嗯 - 有些“错误”:如果您像 DOS 一样查看这些分区的 begin
和 end
字段,它们会重叠。(这是无法纠正的,因为这些字段无法存储高于 1024 的柱面号 - 只要您有超过 1024 个柱面,就总是会存在“重叠”。)但是,如果您像 Linux 一样查看 start
和 length
字段,并且像 Windows 95 在分区类型为 c、e 或 f 的分区中所做的那样,那么一切都很好。因此,当 cfdisk
感到满意并且您有一个仅限 Linux 的磁盘时,请忽略这些警告。当磁盘与 DOS 共享时要小心。使用命令 cfdisk -Ps /dev/hdx
和 cfdisk -Pt /dev/hdx
查看 /dev/hdx
的分区表。
许多旧的 IBM PS/2 系统使用磁盘,其缺陷映射写入磁盘末尾。(磁盘参数表的控制字中的位 0x20 已设置。)因此,FDISK 不会使用最后一个柱面。为了确保安全,BIOS 通常已经将磁盘大小报告为比实际小一个柱面,这可能意味着丢失了两个柱面。较新的 BIOS 具有多个磁盘大小报告功能,其中内部一个调用另一个。当两者都为这个保留的柱面减去 1 并且 FDISK 也这样做时,那么可能会丢失三个柱面。如今,所有这些都不再重要,但如果有人观察到不同的实用程序对磁盘大小有略微不同的看法,这可能会提供一个解释。
一个广为人知的说法是,分区应该在柱面边界处开始和结束。
由于“磁盘几何结构”是不具有客观存在性的东西,因此不同的操作系统会为同一磁盘发明不同的几何结构。人们经常看到一个操作系统使用像 */255/63 这样的转换几何结构,而另一个操作系统使用像 */16/63 这样的未转换几何结构。(有人告诉我 Windows NT 使用 */64/32,而 Windows 2K 使用 */255/63。)因此,根据每个系统对柱面大小的各种想法,可能无法将分区对齐到柱面边界。此外,不同的 Linux 内核可能会为同一磁盘分配不同的几何结构。此外,启用或禁用 SCSI 卡的 BIOS 可能会更改连接的 SCSI 磁盘的虚假几何结构。
幸运的是,对于 Linux 而言,根本没有对齐要求。(除非某些半损坏的安装软件喜欢非常确定一切正常;因此,可能无法在具有未对齐分区的磁盘上安装 RedHat 7.1,因为 DiskDruid 不高兴。)
人们报告说,在 Windows NT 中创建未对齐的分区很容易,而没有任何明显的负面影响。
但是 MSDOS 6.22 有对齐要求。不在柱面边界上的扩展分区扇区会被其 FDISK 忽略。系统本身对任何对齐方式都很满意,但会将相对起始地址解释为相对于对齐地址:逻辑分区的起始地址不是相对于描述它的扩展分区扇区的地址,而是相对于包含该扇区的柱面的起始地址。(因此,PartitionMagic 也需要对齐也就不足为奇了。)
对齐的定义是什么? MSDOS 6.22 FDISK 将执行以下操作: 1. 如果柱面的第一个扇区是分区表扇区,则磁道的其余部分未使用,并且分区从下一个磁道开始。这适用于扇区 0 (MBR) 和逻辑分区之前的分区表扇区。 2. 否则,分区从柱面的第一个扇区开始。扩展分区也从柱面边界开始。 cfdisk
手册页说旧版本的 DOS 不会对齐分区。
对扩展分区使用分区类型 85 使其对 DOS 不可见,确保只有 Linux 会查看内部。
顺便说一句:在 Sparc 上,启动分区必须在柱面边界上开始(但对结束没有要求)。