作为 Windows 常规维护的一部分,我会对硬盘进行碎片整理。但为什么 NTFS 和 FAT* 系统上的硬盘会碎片化?显然 ext* 不会,这是为什么?我也应该对我的 USB 驱动器进行碎片整理吗?
答案1
碎片化问题已不再是 30 年前的问题。那时,硬盘的速度几乎不比软盘快,处理器内存也非常小。现在,硬盘速度非常快,处理器内存也很大,有时硬盘或控制器上还有大量缓冲。此外,扇区大小也变得更大(或文件被分配到更大的块中),因此更多的数据本质上是连续的。
操作系统也变得更加智能。DOS 1.x 会在引用时从磁盘获取每个扇区,而现代操作系统能够看到您打开了一个文件以供顺序访问,并且可以合理地预测,一旦您使用完现有的扇区,您将获取其他扇区。因此它可以“预取”接下来的几个(十几个)扇区。
而且,通常最好不要让文件连续。在文件系统分布在多个驱动器上的(大型)系统中,如果文件也“分散”,则实际上可以更快地访问文件,因为多个磁盘可以同时查找文件。
我每 2-3 年进行一次碎片整理,不管我的盒子是否需要。
[我要补充一点,重要的不是磁盘上的数据是否进行了碎片整理,而是可用空间是否进行了碎片整理。FAT 在这方面表现很糟糕——除非你进行碎片整理,否则情况会变得越来越糟,直到没有两个连续的可用空间块。大多数其他方案可以合并可用空间并以某种“智能”方式分配碎片,以便碎片达到某个阈值然后稳定下来,而不是变得越来越糟。]
答案2
所有文件系统都会产生碎片。ext 和其他 Linux 文件系统的碎片较少,这是因为它们的设计方式 - 引用维基百科关于Linux 网络管理员指南:
现代 Linux 文件系统通过将文件中的所有块保持在一起(即使它们不能存储在连续的扇区中)来将碎片化保持在最低限度。某些文件系统(如 ext3)会有效地分配最靠近文件中其他块的空闲块。因此,不必担心 Linux 系统中的碎片化问题。
不过我要指出的是ext4具有在线碎片整理功能,因此即使对于 Linux 文件系统来说,碎片最终也是一个问题。
Windows 文件系统会将簇放在有空间的地方,碎片整理程序会四处运行并替换簇。而 Linux 会优先将文件放在有足够空间的地方。
不过要注意的是,Windows 7 已经安排了碎片整理运行,因此实际上没有必要手动运行碎片整理。