2011-04-09 235 views
0

假設我保存在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

回答

1

很多這將取決於你正在使用什麼類型的文件系統(以及操作系統如何與它交互)。 Windows中NTFS文件系統的行爲可能與Ubuntu的ext3文件系統在同一組邏輯操作中的行爲完全不同。

然而,一般來說,大多數現代文件系統將文件定義爲一系列指向磁盤塊的指針。有一個描述最小可分配塊的最小塊大小(通常範圍從512字節到4 KB),因此小於這個大小或不是這個大小的精確倍數的文件將有一定數量的額外空間分配給它們。

那麼當你分配一個10MB的文件'A'會發生什麼?文件系統爲文件內容保留了10MB的塊(甚至允許最後幾個額外的塊以適應對文件或其元數據進行的任何小的編輯)。理想情況下,這些塊將是連續的,如你的例子。當編輯'A'並將其縮小時,文件系統將會釋放一些或全部(最可能是所有情況,因爲在大多數情況下,編輯'A'需要將'A'的全部內容再次寫入磁盤,所以沒有什麼理由文件系統優先將'A'保留在同一個物理位置,而不是將數據寫到磁盤上其他位置的新位置),並且更新其引用以包括任何分配的新塊,必要時。這就是說,在典型的情況下,使用現代文件系統和操作系統,我期望你的例子在磁盤上產生以下最終狀態('b'和'a'表示分配給'B'的額外字節和「A」不包含任何有意義的數據):

xxxxxxxxxxxxxxxBBBBBBBBBBBBBBBBbbAAAAAAaaxxxxxxxxxxxxxxxxxxxxxx

但是真實世界的結果當然由文件系統,OS,和潛在的其它因素而改變(例如,使用一個SSD的數據碎片時變得無關緊要,因爲磁盤的任何部分都可以以非常低的延遲進行訪問,並且不會造成搜索懲罰,但同時將寫週期最小化變得非常重要這樣設備就不會磨損,所以操作系統可能會傾向於在這種情況下儘可能地放置'A'以減少需要覆蓋的扇區數量。

所以簡短的回答是,「這取決於」。

-1

否是這樣的:

首先創建文件答:(這裏大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

0

如何完成分配完全取決於文件系統類型(如FAT32,NTFS,jfs,reiser等等)和驅動程序軟件。你假定文件將被連續存儲並不一定是真實的 - 根據硬件的不同,將它存儲爲不同的模式可能會更高效。例如,假設您的磁盤有16個磁頭並且磁盤塊大小爲512個字節,那麼在16個不同的磁道上存儲大量的8k數據可能是最有效的。
OTOH,最近的硬件不涉及旋轉機械部件,故事劇烈變化 - 像「碎片化」這樣的概念突然變得毫無意義,因爲每個塊的訪問時間都是相同的 - 無論按照何種順序完成。