V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhttty
V2EX  ›  问与答

磁柱数量 * 磁头数量 * 扇区数量 * 512 为何和硬盘容量不相等?

  •  
  •   zhttty · 2013-07-09 23:17:19 +08:00 · 4198 次点击
    这是一个创建于 4146 天前的主题,其中的信息可能已经有所发展或是发生改变。
    # fdisk /dev/sda

    Disk /dev/sda: 10.7 GB, 10737418240 bytes
    255 heads, 63 sectors/track, 1305 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x000a5c87

    1305*255*63*512=10733990400bytes 不等于 10737418240 bytes (差距很大,不可能误差吧..)

    查了一晚上google了,都是不等的,可是又“个个睁眼说瞎话”说:
    硬盘容量=磁柱数量 * 磁头数量 * 扇区数量 * 512

    我错哪里了?

    google上真心没发现有质疑的,是我不懂数数么,囧...
    第 1 条附言  ·  2013-07-10 09:08:31 +08:00
    早上会不会比较多点人,以求能解答我这疑难呢?
    第 2 条附言  ·  2013-07-10 12:34:19 +08:00
    结贴:个人理解----有错误请附言

    这两个数值有差距的原因在于逻辑磁头和扇区的数量是有最大值的,前者是255,后者是63,假设没有8位的限制,它们二者的数量应该会超过许多,这就导致了 磁头数量 * 扇区数量 * 512 等于了一个固定值...

    或许在计算中我们应该这样:
    磁盘容量= 磁柱数量 * 磁头数量(不限制的情况下) * 扇区数量(不限制的情况下) * 512
    8 条回复    1970-01-01 08:00:00 +08:00
    qiuai
        1
    qiuai  
       2013-07-10 09:16:16 +08:00
    应该还有一部分被用来做其他的了吧
    jsz
        3
    jsz  
       2013-07-10 10:23:51 +08:00
    我的

    $ sudo fdisk -l /dev/sda

    Disk /dev/sda: 320.1 GB, 320072933376 bytes
    255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes

    >>> 255 * 63 * 38913
    625137345
    >>> 625142448 * 512
    320072933376

    容量确实等于 #sectors * sector-size。但是这一行里「255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors」,最后一个数并不等于前三个的乘积。
    zhttty
        4
    zhttty  
    OP
       2013-07-10 10:31:59 +08:00   ❤️ 1
    @momo5269

    还是不清楚丢失的空间跑哪去了...难道是磁盘的 LBA 寻址转换为 CHS 寻址过程中少掉的吗?因为磁头数和扇区数的最大限制?
    zhttty
        5
    zhttty  
    OP
       2013-07-10 10:37:53 +08:00   ❤️ 1
    @jsz

    >>> 255 * 63 * 38913
    625137345
    >>> 625142448 * 512
    320072933376

    请问625142448 是怎么算出来的?
    likai
        6
    likai  
       2013-07-10 11:34:24 +08:00 via Android
    硬盘厂商是按1g=1000m算的
    yfdyh000
        7
    yfdyh000  
       2013-07-10 12:44:15 +08:00
    猜测:因为有0柱面的存在,所以1305 cylinders实际有1306个?
    也就是可覆盖 1306 * 255 * 63 * 512 = 10742215680 bytes
    jsz
        8
    jsz  
       2013-07-10 13:18:06 +08:00
    @zhttty fdisk 输出的 = =
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2853 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:34 · PVG 19:34 · LAX 03:34 · JFK 06:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.