为什么ext2/3/4不需要进行碎片整理?根本就没有碎片吗?
答案1
现代文件系统,特别是那些设计为在多用户和/或多任务用例中高效的文件系统,在文件系统接近满之前不会对数据进行碎片化(没有确切的数字来说明“接近满”的位置) “标记是因为它取决于文件系统有多大、文件大小的分布以及您的访问模式 - 通常引用 85% 到 95% 之间的数字)或者文件创建和写入的模式不寻常或者文件系统不正常年纪很大了,所以见过很多“动作”。这包括 ext2/3/4、reiser、btrfs、NTFS、ZFS 等。
目前还没有内核/文件系统级别的方法来对 ext3 或 4 进行碎片整理(请参阅http://en.wikipedia.org/wiki/Ext3#Defragmentation了解更多信息)尽管 ext4 计划很快获得在线碎片整理功能。
有一些用户态工具(例如http://vleu.net/shake/以及该维基百科文章中列出的其他文件)尝试通过复制/重写单个文件或文件集来对它们进行碎片整理 - 如果有足够大的可用空间块,这通常会导致文件被给予连续的块。但这并不能保证文件彼此靠近,因此,如果您对一对大文件运行 shake,您可能会发现这两个文件本身已进行碎片整理,但在磁盘上彼此不相邻。在多用户文件系统中,文件彼此的位置通常并不重要(它肯定不如文件本身的碎片重要),因为无论如何驱动器头都会翻转来满足不同用户的需求,这会淹没避免了未碎片文件之间的引用局部性带来的延迟好处,但在大多数单用户系统上,它可以带来可衡量的好处。
如果您的文件系统随着时间的推移变得严重碎片化,并且当前具有相当数量的可用空间,那么运行类似shake
其所有文件的操作可能会产生您正在寻找的效果。另一种方法是将所有数据复制到新的文件系统,删除原始文件系统,然后再次将其复制回来。这与此类似shake
,但对于大量数据可能会更快。
对于少量碎片,不用担心。我知道有人花在观看碎片整理进度条上的时间比他们在正常操作的几个生命周期中节省的时间(由于更有效的磁盘访问)还要多!
答案2
只要磁盘没有填满太多,就不会产生太多碎片(因此,如果可以避免的话,不要将磁盘填满太多)。