问题受到维基百科中这张 gif 的启发:
(来源:https://en.wikipedia.org/wiki/Defragmentation#/media/File:FragmentationDefragmentation.gif)
在 gif 中,块(扇区?)被移动到可用空间,并重新排列(碎片整理)。
是否需要可用空间?
答案1
从这篇文章中你可以看到这个 gif:
要对磁盘进行碎片整理,碎片整理软件(也称为“碎片整理程序”)只能在可用空间内移动文件。这是一项密集操作,无法在可用空间很少或没有可用空间的文件系统上执行。维基百科-碎片整理-缓解
Windows XP 碎片整理需要 15% 的可用磁盘空间。
答案2
碎片整理有两种方法。您可以采用简单方法,也可以采用正确方法:
将要移动和碎片整理的数据全部保存在内存中。本质上,您必须读取整个文件,直到释放足够的空间,然后以连续块的形式将其写回。
- 这样做的好处是速度会更快,而且不需要磁盘上的额外存储空间
将数据移至磁盘的其他位置,然后在创建足够大的连续块时将其移回。
- 这种方式要慢得多,因为必须在其他地方重复读取和写入数据。
选项 1 可能不需要磁盘上的额外空间,但也可能很危险。
- 在读取和删除文件时,数据不再存在于磁盘上。如果发生断电,所有已读取但未恢复到新位置的文件都会丢失,可能会造成灾难性后果。
- 你不知道读取文件可能需要多大的缓冲区。你可能有几 GB 的文件需要移动,或者有很多小文件。它需要分配可能无限量的内存(扩展页面文件并产生碎片更差),或者使用固定百分比的内存。如果你有一个固定的缓冲区大小,你可以加载(并截断)部分文件以释放空间,但最终你会陷入更糟糕的境地,因为你可能会错过部分如果发生电源故障,文件可能会丢失,这可能比丢失整个文件更糟糕。
选项 2 始终保证你的数据在磁盘上,特别是如果你先复制,然后然后刪除块。
所以,是的,为了安全地进行碎片整理而又避免灾难性数据丢失的威胁,您需要一些可用的磁盘空间。