磁盘空间的分配方式编辑过的文件

问题描述:

假设我保存在HDD磁盘存储的文本文件(假设磁盘存储是新的,所以整理)和文件名是A与文件大小说10MB磁盘空间的分配方式编辑过的文件

我相信,文件A占据如图所示的磁盘的一些空间,其中x是所述盘上的未占用的空间/存储器

AAAAAAAAAAAAA xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

现在,我创建并保存的一些另一个文件B尺寸。因此,B将被保存为

AAAAAAAAAAAAA BBBBBBBBBBBBBBBBBxxxxxxxxxxxxxxxxxxxxxxxxxxx - 如磁盘进行碎片整理,我认为存储将是连续的。

在这里,如果我编辑文件A并将文件大小减小到2MB,该怎么办。你能说现在如何分配内存。

我能想到的一些选项
AAAAAA xxxxxxxxxBBBBBBBBBBBBBBBBxxxxxxxxxxxxxxxxxxxxxxxxxxxx


AA XXX AA XXX 一个 X 一个 xxBBBBBBBBBBBBBBBBxxxxxxxxxxxxxxxxxxxxxxxxxxxx

或 一个totall y新位置释放其他文件的更大块。
xxxxxxxxxxxxxxxBBBBBBBBBBBBBBBB AAAAAA xxxxxxxxxxxxxxxxxxxxxx

或者是基于任何算法或数据结构的任何其他方式。

+0

Thanks @Roy T.编辑将“碎片”更改为“碎片整理”....忽略并犯了错误 – Thomas 2011-04-09 07:34:30

很多这将取决于你正在使用什么类型的文件系统(以及操作系统如何与它交互)。 Windows中NTFS文件系统的行为可能与Ubuntu的ext3文件系统在同一组逻辑操作中的行为完全不同。

然而,一般来说,大多数现代文件系统将文件定义为一系列指向磁盘块的指针。有一个描述最小可分配块的最小块大小(通常范围从512字节到4 KB),因此小于这个大小或不是这个大小的精确倍数的文件将有一定数量的额外空间分配给它们。

那么当你分配一个10MB的文件'A'会发生什么?文件系统为文件内容保留了10MB的块(甚至允许最后几个额外的块以适应对文件或其元数据进行的任何小的编辑)。理想情况下,这些块将是连续的,如你的例子。当编辑'A'并将其缩小时,文件系统将会释放一些或全部(最可能是所有情况,因为在大多数情况下,编辑'A'需要将'A'的全部内容再次写入磁盘,所以没有什么理由文件系统优先将'A'保留在同一个物理位置,而不是将数据写到磁盘上其他位置的新位置),并且更新其引用以包括任何分配的新块,必要时。这就是说,在典型的情况下,使用现代文件系统和操作系统,我期望你的例子在磁盘上产生以下最终状态('b'和'a'表示分配给'B'的额外字节和“A”不包含任何有意义的数据):

xxxxxxxxxxxxxxxBBBBBBBBBBBBBBBBbbAAAAAAaaxxxxxxxxxxxxxxxxxxxxxx

但是真实世界的结果当然由文件系统,OS,和潜在的其它因素而改变(例如,使用一个SSD的数据碎片时变得无关紧要,因为磁盘的任何部分都可以以非常低的延迟进行访问,并且不会造成搜索惩罚,但同时将写周期最小化变得非常重要这样设备就不会磨损,所以操作系统可能会倾向于在这种情况下尽可能地放置'A'以减少需要覆盖的扇区数量。

所以简短的回答是,“这取决于”。

否是这样的:

首先创建文件答:(这里大A代表实际用于和数据“A”用于为保留数据,x代表免费)。

AAAAAAAAAAAAAaaaaaaaXXXXXXXXXXXXXXXXXXX

然后添加B:

AAAAAAAAAAAAAaaaaaaaBBBBbbbbbbbbbb

然后添加C,但没有留下未保留的空间:

AAAAAAAAAAAAAaaaaaaaBBBBbbbbCCCccc

如果A被截断此将会发生什么

AAAAAaaaaaaaxxxxxxxxBBBBbbbbCCCccc

如果B是现在已经扩大会出现这种情况:

AAAAAaaaaaaaBBBBxxxxxBBBBBBBBCCCccc

你看,对于B中的数据不再彼此靠近,这就是所谓的碎片。当您运行碎片整理工具时,数据会再次靠近在一起。

+0

您的解释对于哪个硬件,文件系统,操作系统完全有效? – Ingo 2011-04-09 07:31:53

+0

这大致适用于大多数HDD文件系统(根本不适用于SSD,与操作系统无关),但这当然是一个非常高层次的观点,我只是试图用提问者提出的问题来解释它。我可以引用NTFS规范或其他方法,但对我来说这似乎没有任何帮助。不过,我认为这个解释是简单而正确的,它显示了文件系统解决碎片,扩展/截断文件的一些常见问题。我不得不说它最接近FAT。 – 2011-04-09 10:47:43

+0

我不认为这是正确的,当所有可以说的是:这取决于。例如,比旧的A更短的新A会得到与旧的A相同的块,这对我来说不太可能 - 这意味着块将以最后释放的第一次使用的方式分配。如果你没有引用任何证据证明这确实是这样做的,并且出于什么原因,我把你所说的作为猜测。 – Ingo 2011-04-09 11:21:56

如何完成分配完全取决于文件系统类型(如FAT32,NTFS,jfs,reiser等等)和驱动程序软件。你假定文件将被连续存储并不一定是真实的 - 根据硬件的不同,将它存储为不同的模式可能会更高效。例如,假设您的磁盘有16个磁头并且磁盘块大小为512个字节,那么在16个不同的磁道上存储大量的8k数据可能是最有效的。
OTOH,最近的硬件不涉及旋转机械部件,故事剧烈变化 - 像“碎片化”这样的概念突然变得毫无意义,因为每个块的访问时间都是相同的 - 无论按照何种顺序完成。