AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 669510
Accepted
Frank
Frank
Asked: 2021-09-18 11:44:06 +0800 CST2021-09-18 11:44:06 +0800 CST 2021-09-18 11:44:06 +0800 CST

查看紧凑型闪存时 fdisk 的 Start 和 End 值是什么意思

  • 772

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

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

在此处输入图像描述

然而,MBR 中分区表的 hexdump 显示,根据 LBA 地址,分区从扇区 0x800 开始。而 CHS 地址显示气缸 1,头部 1,扇区 3。

在此处输入图像描述

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

fdisk mbr
  • 1 1 个回答
  • 517 Views

1 个回答

  • Voted
  1. Best Answer
    telcoM
    2021-09-18T16:56:31+08:002021-09-18T16:56:31+08:00

    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#:因为它以 little-endian 格式表示,所以值是 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 字节,而实际磁盘容量报告为 964 583 424字节。

    这是另一个迹象,表明 CHS“几何”只是旧设备和操作系统的近似值,而确切的容量是不同的。

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

    • 2

相关问题

  • 使用 MS-DOS 类型进行分区

  • 强制 fdisk 使用扇区 63 边界是否安全?

  • MBR相关问题

  • 是否可以在 crypt 映射器中创建分区表?

  • fdisk 没有看到 resize2fs 缩小未挂载的分区

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve