查看紧凑型闪存时,fdisk 的 Start 和 End 值意味着什么

查看紧凑型闪存时,fdisk 的 Start 和 End 值意味着什么

我正在使用 fdisk 分析紧凑型闪存,并将其与 CF 主引导记录上的分区表内容进行比较。我不明白“开始”和“结束”列的含义。我读到的一些文档说它意味着该分区的起始扇区和结束扇区,但是当我将 fdisk 输出与 MBR 分区表中的分区地址进行比较时,结果似乎不一致。

Fdisk -l 报告第一个分区从 3 开始,但以 2241 结束。

在此输入图像描述

然而,MBR 中分区表的十六进制转储显示,根据 LBA 地址,该分区从扇区 0x800 开始。而 CHS 地址显示为 Cylinder 1、Head 1、Sector 3。

在此输入图像描述

那么 fdisk 中的 Start 3 和 End 2241 是什么意思呢?

答案1

CentOS 6fdisk在显示分区表时仍然默认使用柱面作为默认单位。正如 zevzek 所评论的,这已经过时了,您应该使用它fdisk -u=sectors -l来更好地匹配现代存储设备的实际情况以及更高版本的fdisk默认显示方式。

实际分区表中的 CHS 值具有相当严格的最大值:

  • 气缸字段只有 10 位宽(= 值 0-1023)
  • 字段为 8 位宽(= 值 0-255)
  • 部门字段为 6 位宽(= 值 0-63)

因此,从分区表来看,起始 CHS(3 字节)从位置 0x1bf 开始,以 H = 1、S = 3 和 C = 1 开头。这看起来不正确。

位置 0x1c2 是分区类型 (0x83),紧接着是位置 0x1c3 以后的结束 CHS 值(3 个字节)。

十六进制转储中的第二个红框未指向正确的位置:0x1c3 处的值是结束 H 值 (0x14 = 20)。

0x1c4 处的值指定底部 6 位中的结束扇区值,以及顶部 2 位中的结束柱面值的两个最高有效位。所以二进制的 0xe8 = 11 101000,所以结束的 S 就是 40。结束的 C 值的前两位代表一个十六进制数字 3。

0x1c5 处的值指定结束 C 值的低字节:与前一个字节的高两位一起,结束柱面值为 0x3b4 = 948。

这些值仅代表大约 378 MB 的分区,因此与分区表后面的 4 字节分区大小值相比,分区表中的最终 CHS 值显然完全是无稽之谈。

但无论您如何对其进行切片,这都会产生 7.87 GiB / 8.45 GB 的限制,此时分区表中 CHS 字段的位值将变为全 1,并且这些字段不能表示任何大于该值的值。

IDE 磁盘控制器规范使情况变得更加复杂不同的CHS 限制集:IDE 控制器可接受最多 65536 个柱面 (0-65535) 和 255 (1-255) 个扇区的 CHS 值,但最多只能接受 16 个 (0-15) 个磁头。如果您仅按原样使用 CHS 值,那么与 MBR 限制一起,这将导致限制为 504 MiB / 528.4 MB。

因此,自 1994 年 7 月以来,出现了几何转换约定,以使 CHS 值适应当前的用例。因此,2242 个柱面、21 个磁头和 40 个扇区是硬件所说的真实几何结构,分区表中使用的值是基于转换后的,伪造的几何,以便使值适合分区表和最旧的 BIOS 系统调用的字段。这种转换通常涉及选择一个数字 N,将物理 C 值除以 N,并将物理 H 值乘以 N。N 的值通常为 2、4、8 或 15。(是的,15 而不是 16,解决 MS-DOS、旧版本 Windows 和一些旧 BIOS 中的错误。)

当超过 8.45 GB 时,CHS 值无论如何都是无用的,因此任何现代操作系统通常都会直接上升忽略 CHS 值,而是使用分区第一个块的 LBA 编号和分区中块总数的 4 字节值来实际定义分区的位置和大小。这些 4 字节值应该始终准确且明确。

在使用经典的 512 字节扇区大小时,这些 4 字节值足以满足磁盘大小高达 (2^32 - 1) 个块的要求,换句话说,刚好低于 2 TiB 或 2.19 TB。

对于您的分区,十六进制转储中的第二个红框实际上指向 0x1c6 以后的位置,这是分区第一个块的 LBA#:由于它以小端格式表示,因此该值是十六进制的 0x800,或十进制 2048。这遵循现代标准约定,即从磁盘开头恰好 1 MiB 处开始第一个分区。

分区的长度从偏移 0x1ca 开始指定,为 0x1cb000 = 1 880 064 块,即 918 MiB / 940 MB。

您可以看到,即使硬件报告的 CHS 几何结果也21 heads, 40 sectors/track, 2242 cylinders仅为 2242 * 40 * 21 = 1 883 280 个扇区,或 1883280 * 512 = 964 249 360 字节,而实际磁盘容量报告为 964583 424字节。

这再次表明 CHS“几何结构”只是旧设备和操作系统的近似值,而确切的容量有所不同。

我想fdisk只是使用 LBA 表示来完成所有操作,并且当请求将分区开始和结束值显示为柱面时,只需根据 LBA 位置和大小值计算它们,完全忽略分区表中的开始/结束 CHS 值。同样,该Blocks列似乎实际上以 2 KB 为单位显示分区的大小。

相关内容