[ 已解决 /fdisk 程序问题 ] 硬盘分区间有大量的空闲扇区是怎么造成的?

无意中仔细看了下硬盘的扇区数,发现没有对齐,如下:

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = 扇区 of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x0006f8e7

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    99999743    49998848   83  Linux
/dev/sda2        99999744   240001021    70000639   83  Linux
/dev/sda4       240001022   976771071   368385025    5  Extended
Partition 4 does not start on physical sector boundary.
/dev/sda5       240001024   259999743     9999360   82  Linux swap / Solaris
/dev/sda6       260001792   660002814   200000511+  83  Linux
/dev/sda7       660002816   827882065    83939625   83  Linux
/dev/sda8       827883520   976752639    74434560    7  HPFS/NTFS/exFAT

# 几个需要注意的数值
>>> 240001024 - 240001021 = 2		# end of sda2 and start of sda4
>>> 260001792 - 259999743 = 2049	# sda5 -> sda6
>>> 660002816 - 660002814 = 2		# sda6 -> sda7
>>> 827883520 - 827882065 = 1455	# sda7 -> sda8
>>> 976771071 - 976752639 = 18432	# end of sda4 and end of sda8
>>> 976773168 - 976771071 = 2097	# end of the disk and end of sda4

如图所示,分区之间有大量的空闲扇区,而我当初分区的时候除了 sda1,sda5,sda6 是安装的时候就分好的,
其余的都不同程度的动过,用的工具就是 YaST 里的磁盘分区工具,试问这种情况是怎么造成的??

顺便赞一句,好久没上论坛来看了,发现左下角多了个便民的东东,这个很不错!!
对了,还有快速回复。。

看起来应该是扩展分区「对齐」(比如对齐到扇区,对齐到块?做界面翻译的时候好像有遇到过。要是这样的话按理至少在高级分区方式里能改)或者「扩展分区格式的框架」要占用空间的问题(类似预留空间?不是空扇区你就一定能用的。你要有 gparted 光盘并且不怕搞坏系统你可以试试中间夹着的那个小块你能不能再给它分一个区,做翻译的时候我也有遇到过「XXX 太小以至于不能分区」这样的词条)。

安全一点的方法是你可以找个 U 盘在 openSUSE 下用 fdisk 来分下区,要是也有这是这样那就是「扩展分区格式的框架」也要占用空间(因为 fdisk 是通用命令,所有 Linux 都一样的)。

最后注意那不叫「大量」,那个命令显示单位是字节。2 字节,你一个空文件夹占用的字节都比它大。。。

@marguerite
找 U 盘测试了一下多分区,分区中间有空闲扇区这应该属于分区工具的 bug,不属于扩展分区格式的框架这样的东西。
这个在 fdisk 的 man 页(中文)中也提到了,上面说推荐用 cfdisk 来替代,于是我分别测试了下 fdisk 和 cfdisk,结果如下:

# Using fdisk...
Disk /dev/sdc: 8103 MB, 8103395328 bytes
250 heads, 62 sectors/track, 1021 cylinders, total 15826944 sectors
Units = 扇区 of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc3072e18

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdc1   *        2048      309247      153600   83  Linux
/dev/sdc2          309248    10795007     5242880   83  Linux
/dev/sdc3        10795008    15826943     2515968    5  Extended
/dev/sdc5        10797056    12894207     1048576   83  Linux
/dev/sdc6        12896256    13944831      524288   83  Linux
/dev/sdc7        13946880    15826943      940032   83  Linux

# Using cfdisk...
Disk /dev/sdc: 8103 MB, 8103395328 bytes
250 heads, 62 sectors/track, 1021 cylinders, total 15826944 sectors
Units = 扇区 of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc3072e18

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdc1   *          62      294499      147219   83  Linux
/dev/sdc2          294500    10291999     4998750   83  Linux
/dev/sdc3        10292000    15826943     2767472    5  Extended
/dev/sdc5        10292062    12291499      999719   83  Linux
/dev/sdc6        12291562    13298999      503719   83  Linux
/dev/sdc7        13299062    15826943     1263941   83  Linux

可以看出,在主分区,当一个分区结束时,下一个分区的开始是紧接着下一个扇区的,而在扩展分区中,逻辑分区之间的间隔(空闲的扇区)与使用的工具有关,由上述示例中简单计算一下,当使用 fdisk 时,逻辑分区中间大概空闲了 2048 个扇区,而 cfdisk 则是 63 个扇区。。显然,用 cfdisk 来分区显得更精准些(手册中提到了个 sfdisk,这个介绍说是比 cfdisk 更精准)!所以,我之前提到的问题现在得到解决了,我自己的硬盘是用 YaST2 里面的 磁盘分区管理 工具给弄的,不清楚这个工具后台调用的是什么程序来完成的,但似乎分区之间出现空闲扇区是个普遍的问题。
另外,纠正一下,fdisk 这儿显示的单位是扇区,不是字节,一个物理扇区是 512 字节,2000+ 个扇区还是挺可观的一个空闲,况且这点在我用 cfdisk 打印磁盘分区表时得到了印证,最后剩余那 2000+ 个扇区是可以再新建分区的,至于是否可用,那就悬了,建立文件系统应该是要占用空间的吧!

ok,有启发就好。我对底层工具不是很熟悉,因为我用不大到(11 年到现在没重装过),也懒得研究命令行的东西(因为看不到效果很无聊的,我又不是学计算机的,会算 MiB 和 MB 的关系没意义嘛)。

YaST partition 模块用的应该是 fdisk。一是 openSUSE 比较喜欢用通用的东西。二是 fdisk/cfdisk/sfdisk 对最终系统跑的稳定不稳定几乎没有影响,来自社区的用户等闲发现不了,开发者都搞上层应用,来自 SUSE 的人没动力解决它(他们都是服务器场景差点就差点嘛,服务器上硬盘这个设备,我没说数据,最不值钱了,隔三差五就丢的)。三 YaST 本来就是个「方便」的系统设置工具嘛,它的第一要点是方便不是精确,精确你也说,sfdisk 嘛。当然如果你作为 bug 交上去或者在 #opensuse-factory 邮件列表里吼几嗓子应该还是会修的。

:sleeping: 同为非计算机专业的,试图去学过两门语言,但都学得吊儿郎当的。。现在还是什么都写不出什么来。。本来通信专业是个很大的方向,可是我们学校硬是专注于无线通信,更偏向于电子学啊,电子线路什么的!反正学到现在感觉全是数学,数学。。挺无聊的!

对了苏姐,你现在是在工作还是学习啊?总感觉如果在工作的话还能花这么多时间在社区很了不起啊!