为何SSD存在非连续未分配空间时无法扩展分区?
这个问题我刚接触SSD的时候也琢磨过——明明SSD没有HDD那种物理盘片的限制,为啥扩展分区还得要相邻的未分配空间?其实核心原因不是SSD硬件本身,而是咱们一直沿用的分区和文件系统逻辑在作怪,具体来说有这几点:
分区表的逻辑约束:不管是老的MBR还是现在主流的GPT,分区表本质上记录的是一段连续的逻辑地址范围。比如GPT里每个分区项都写了起始LBA和结束LBA,系统和工具从诞生起就默认分区是一块连续的“逻辑块”,哪怕SSD的物理存储是通过磨损均衡分散在各个闪存芯片上的,逻辑层面还是得保持连续才能扩展。分区表根本没设计“拼接非连续逻辑空间”的功能,总不能凭空修改分区表让它同时指向两段不挨着的地址吧?
文件系统的历史惯性:咱们常用的NTFS、ext4这些文件系统,最初都是为HDD设计的。它们的元数据(比如inode表、簇映射表)都是按“连续逻辑空间”来组织的,扩展分区的时候,直接在现有分区的逻辑末尾追加空间,修改元数据的成本最低、最稳定。如果要把非连续的未分配空间合并进来,相当于要彻底重构文件系统的元数据结构,复杂度极高,很容易出问题,所以主流文件系统都不支持这种操作。
工具的保守设计:不管是Windows自带的磁盘管理,还是Linux的
gparted、fdisk这些工具,都是基于传统分区逻辑做的。开发者优先保证操作的安全性和兼容性,毕竟如果允许跨非连续空间扩展,很可能会破坏分区表的完整性,或者导致文件系统出现未知bug。所以这些工具都只支持最简单、最稳妥的“扩展相邻未分配空间”操作。
当然也不是完全没办法实现,有些第三方分区工具号称能把非连续空间合并到分区,但本质上是先把原分区的数据迁移到一段连续的逻辑空间,再扩展分区大小——相当于先“整理”再扩展,不是真的直接拼接非连续空间,而且这种操作风险高、耗时也长,毕竟要移动大量数据。
备注:内容来源于stack exchange,提问作者Amazon Dies In Darkness

