簡單譯文:
這段linux官方資料主要介紹了外部碎片(external fragmentation)、內部碎片(internal fragmentation)的概念及相關情況,說明了linux文件系統在磁盤還有5%空閑空間的情況下是不需要碎片整理的。(Linux native file systems do not need defragmentation under normal use and this includes any condition with at least 5% of free space on a disk.)。而在實際使用中,磁盤在還有8%左右未使用時就會有警告產生,所以碎片整理是不用考慮的。
產生碎片整理想法的主要在兩類朋友中,一類是受windows思想影響的朋友,還有一類是對操作系統原理有一定程度了解的朋友。
我在這里先簡單地說明一些問題。
所有地操作系統都會產生磁盤碎片,這正是某些朋友產生疑慮的原因。這個碎片在上面地官方資料中稱為內部碎片。它是這樣產生的,假設一個磁盤的空間有20k,它的基本存儲單位為簇,設有兩個文件,一個7k,一個1k。當簇的大小為4k時,磁盤分為了5個簇,兩個文件共占用3個簇,即使用了12k,其中浪費地空間就是4k,也就是產生了內部碎片4k。因此我們就了解了:內部碎片主要是造成磁盤空間的浪費。請注意:windows的磁盤碎片整理功能所整理的碎片不是這個碎片,也無法對這個碎片進行操作,它所對應的碎片概念是外部碎片。
那么,可以對內部碎片進行優化處理嗎?答案是肯定的。以上面的例子來說,如果把每一簇分成2k,那么20k的磁盤就分為了10個簇,7k和1k兩個文件共占用了5個簇,10k的空間,浪費的空間,即內部碎片為2k。
由此可見,簇分的越小,所浪費的空間越少。這也是NTFS比FAT32優秀的一個地方。在Win 2000的FAT32文件系統的情況下,分區大小在2GB~8GB時簇的大小為4KB;分區大小在8GB~16GB時簇的大小為8KB;分區大小在 16GB~32GB時,簇的大小則達到了16KB。而Win 2000的NTFS文件系統,當分區的大小在2GB以下時,簇的大小都比相應的FAT32簇小;當分區的大小在2GB以上時(2GB~2TB),簇的大小 都為4KB。相比之下,NTFS可以比FAT32更有效地管理磁盤空間,最大限度地避免了磁盤空間的浪費。
有的朋友會進一步的思考,那么為什么文件系統不是把簇分的非常的小呢?這里就引出了另一個問題,文件訪問查找的問題。還是以上面的例子說明,當我們要查找使用一個文件時,就需要通過頁表來進行訪問。打個比方,你住的地方就好比是文件所占用的簇,但是要找到你,就得通過你的住址來進行訪問,而訪問文件則是通過文件分配表。如果住的人多,地址也就很多,那么要查到你住的地址所花的時間也就很多。同樣的道理,當簇分的越小,記錄簇的地址也就越大,查找文件所在的簇所花的時間也就越多。當簇為4k時,簇的地址是5個,而簇為2k時,簇的地址是10個。因而簇的大小是在空間和時間上取得平衡的一個結果。
這里也對另一個問題作一些提示,有些第三方分區軟件可以自定義簇的大小,建議采用默認值,否則會在某些情況下產生一些問題。
有的朋友會進一步提問:那么為什么在普通情況下NTFS分的簇會比FAT32的要小,而訪問速度會差不多呢?這又牽涉到文件訪問機制等等問題。這里我就不再介紹了,其實這個問題我也不能完全說清,有興趣的朋友可以找一些操作系統方面的資料進行閱讀,可以在一定程度上解決這個問題。
好,下面開始我們的重點:linux不需要碎片整理!
windows概念下的碎片,在上面linux官方資料中稱為外部碎片,它就是影響性能的那個碎片概念。(This is called "external fragmentation" or simply "fragmentation" and is a common problem with MS-DOS file systems. )而linux一般不會產生這種碎片。外部磁盤碎片應該稱為文件碎片,是因為文件被分散保存到整個磁盤的不同地方,而不是連續地保存在磁盤連續的簇中形成的。
當應用程序所需的物理內存不足時,一般操作系統會在硬盤中產生臨時交換文件,用該文件所占用的硬盤空間虛擬成內存。虛擬內存管理程序會對硬盤頻繁讀寫,產生大量的碎片,這是產生硬盤碎片的主要原因。
其他如IE瀏覽器瀏覽信息時生成的臨時文件或臨時文件目錄的設置也會造成系統中形成大量的碎片。文件碎片一般不會在系統中引起問題,但文件碎片 過多會使系統在讀文件的時候來回尋找,引起系統性能下降,嚴重的還要縮短硬盤壽命。另外,過多的磁盤碎片還有可能導致存儲文件的丟失。
上面所說的就是windows如何產生外部碎片的,其實這與文件系統所使用的數據結構有關。對於FAT來說,使用的是chain式的結構來記錄一個文件所使用的簇。這種方式的好處就是有助於文件的動態增長的需要。但是卻帶了碎片的問題,使得讀寫文件的時候,磁頭頻繁移動。對於CD-ROM,由於是 read-only的,所以不存在數據增長的問題,所以,采用了連續的方法來記錄數據,也不會產生碎片,而linux的ext等文件格式與CD-ROM的存儲有相似之處。
下面這篇文章通俗易懂地解說了為什么linux不需要碎片整理以及windows為什么需要碎片整理:
請注意,官方資料所說的是linux文件系統在磁盤還有5%空閑空間的情況下是不需要碎片整理的。(Linux native file systems do not need defragmentation under normal use and this includes any condition with at least 5% of free space on a disk.)。而在實際使用中,磁盤在還有8%左右未使用時就會有警告產生,所以碎片整理是不用考慮的。
而下文中說的是20%。
引用:
為什么Linux不需要磁盤碎片整理
作者:OneAndOneIs2
翻譯:rainking
有一個關於Linux的問題經常被問及:為什么Linux不需要磁盤碎片整理呢?在這里,我試圖就“為什么有的文件系統比另一些文件系統更加需要磁盤碎片整理”給出一個簡單的,非技術性的答案。
我將試圖用一個ASCII矩陣來解釋所有的原理,而不是用那些枯燥而晦澀的術語來打擊大家的積極性。下面就是我將用來解釋原理的矩陣:
a b c d e f g h i j k l m n o p q r s t u v w x y z- a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- n 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
以上這個矩陣就可以簡單的用來表示一個很小的硬盤,初始狀態是空的,全部都被0填充。在矩陣頂部和左側的a-z都是用來定位每一個數據的。最左上角的那個0就是aa,最右上角的那個0就是za,最左下角的就是az。
我將以一個大家都非常非常熟悉的文件系統開始,一個經常需要磁盤碎片整理的系統—FAT。其實無論Windows用戶還是Linux用戶都會用到FAT文件系統。因為USB閃盤一般都使用這個文件系統。FAT是一個非常非常重要的文件系統,雖然它經常需要磁盤碎片整理。
我現在在磁盤上加入一個文件,於是磁盤看起來會變成這個樣子:
- a b c d e f g h i j k l m n o p q r s t u v w x y z
- a T O C h e l l o . t x t a e l e 0 0 0 0 0 0 0 0 0 0
- b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
- e H e l l o , _ w o r l d 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
(為了看起來更加清楚,g-z的空行被省略了)
正如你所看到的,前4行是TOC(Table Of Contents),即所謂的內容表。TOC會存儲磁盤上所有文件的位置。在我上面的例子中,TOC包含了一個名字叫做“hello.txt”的文件,並且這個文件的內容是從ae到le的。往下看ae到le之間的內容,我們能看到這個文件的內容是“Hello,_world”
到目前為止,一切都正常對嗎?好,那我們再來添加一個文件:
- a b c d e f g h i j k l m n o p q r s t u v w x y z
- a T O C h e l l o . t x t a e l e b y e . t x t m e z
- b e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
- e H e l l o , _ w o r l d G o o d b y e , _ w o r l d
- f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
正如你所見,第二個文件被緊接着放置在第一個文件之后。這樣的好處是你所有的文件都會緊密地放置在一起,這樣讀取它們將會非常的迅速和方便。要知道磁盤上最慢的就是讀寫頭的移動了,它移動的越少,則讀取的速度越快。
但是,當我們需要修改第一個文件的時候,問題就出來了。現在假設我們需要在“hello.txt”文件的尾部加入兩個感嘆號,我們就會遇到問題:沒有空間!文件“bye.txt”擋住了“hello.txt”的去路。這時候我們有兩個解決方法,但是沒有一個是完美的。
1 我們把文件“hello.txt”刪掉,然后再“bye.txt”后面加入修改過后的“hello.txt”。
2 我們把文件“hello.txt”拆成兩部分存儲,這樣在“bye.txt”之前就不會有空的磁盤空間了。
第一種種方式表現出來就是這樣:
- a b c d e f g h i j k l m n o p q r s t u v w x y z
- a T O C h e l l o . t x t a f n f b y e . t x t m e z
- b e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
- e 0 0 0 0 0 0 0 0 0 0 0 0 G o o d b y e , _ w o r l d
- f H e l l o , _ w o r l d ! ! 0 0 0 0 0 0 0 0 0 0 0 0
第二種種方式表現出來就是這樣:
- a b c d e f g h i j k l m n o p q r s t u v w x y z
- a T O C h e l l o . t x t a e l e a f b f b y e . t x
- b t m e z e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
- e H e l l o , _ w o r l d G o o d b y e , _ w o r l d
- f ! ! 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
這就是為什么FAT格式的文件系統經常需要磁盤碎片整理的原因。所有的文件都緊挨着存放,所以任何時候,只要一個文件需要增大,就會產生碎片。而任何文件被刪除了,就會留下一個空白區域。於是很快磁盤就會變成一堆亂糟糟的隨便和空白,效率就會變低了。
而Linux 卻用一種不同的方式來處理這種問題。對於單用戶來說Windows的文件系統已經夠好的了,但是Linux生來就是為多用戶設計的系統,它總是假設在同一時間有多個用戶試圖去操作不同的文件。所以Linux相對FAT文件系統,使用了另一種方法來設計自己的文件系統。Linux文件系統看起來是這樣的:
- a b c d e f g h i j k l m n o p q r s t u v w x y z
- a T O C h e l l o . t x t h n s n 0 0 0 0 0 0 0 0 0 0
- b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
- e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- n 0 0 0 0 0 0 0 H e l l o , _ w o r l d 0 0 0 0 0 0 0
- o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
當我們添加了文件以后就變成這樣了:
- a b c d e f g h i j k l m n o p q r s t u v w x y z
- a T O C h e l l o . t x t h n s n b y e . t x t d u q
- b u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
- e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- n 0 0 0 0 0 0 0 H e l l o , _ w o r l d 0 0 0 0 0 0 0
- o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- u 0 0 0 G o o d b y e , _ w o r l d 0 0 0 0 0 0 0 0 0
- v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
這種文件系統的好處是磁盤的磁頭可以一直位於中間位置,而所有的文件平均下來都會非常近。
當我們仍然給“hello.txt”加入兩個感嘆號時,我們來看看這會引起多大的麻煩:
- a b c d e f g h i j k l m n o p q r s t u v w x y z
- a T O C h e l l o . t x t h n u n b y e . t x t d u q
- b u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
- e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- n 0 0 0 0 0 0 0 H e l l o , _ w o r l d ! ! 0 0 0 0 0
- o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- u 0 0 0 G o o d b y e , _ w o r l d 0 0 0 0 0 0 0 0 0
- v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
對了!一點麻煩都沒有!
Windows總是試圖把文件存儲在盡量靠近磁盤開始位置的地方,這導致當磁盤利用率變高的時候它經常會產生磁盤碎片。
Linux卻在整個磁盤上存儲文件,所以當文件的大小需要改變的時候,總是有足夠的空間。
當然當磁盤利用率接近飽和的時候Linux也會需要文件整理。但是只要磁盤還有20%以上的可用空間,那么這種整理是基本不會發生的。
還有一點必須了解的是,即使當一個操作系統說某個磁盤已經完全碎片整理完畢了,但是根據一個磁盤的物理結構,碎片仍然會存在。因為磁盤總是由很多盤片和磁道組成的。
讓我們來看看一個磁盤有兩個盤片,aa到zm是第一個,an到zz是第二個。
- a b c d e f g h i j k l m n o p q r s t u v w x y z
- a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- a b c d e f g h i j k l m n o p q r s t u v w x y z
- n 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
一下的文件系統是有碎片的,因為文件橫跨了行m和n。而這兩行不是在一個盤片上的。要讀取這個文件,磁盤的磁頭必須從盤片1的最末尾跨越到盤片2的最開始。
- a b c d e f g h i j k l m n o p q r s t u v w x y z
- a T O C h e l l o . t x t r m e n 0 0 0 0 0 0 0 0 0 0
- b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 H e l l o , _ w o
- a b c d e f g h i j k l m n o p q r s t u v w x y z
- n r l d ! ! 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
最后,希望我以上的解釋能讓你明白為什么Linux不需要磁盤碎片整理,如果你還是沒有明白,請盡管提出讓你疑惑的地方。
對windows進行磁盤碎片整理的朋友,這里也做一點小小的友情提示。
1、整理磁盤碎片的時候,要關閉其他所有的應用程序,包括屏幕保護程序,最好將虛擬內存的大小設置為固定值。不要對磁盤進行讀寫操作。
2、整理磁盤碎片的頻率要控制合適,過於頻繁的整理也會縮短磁盤的壽命。一般經常讀寫的磁盤分區一周整理一次。
最后想說說思考的話題。
那些想在linux下進行磁盤碎片整理的朋友,你們考慮過兩個事實嗎?
第一,為什么類unix系統產生幾十年了,沒有人做一個磁盤碎片整理軟件?而即使是到現在,在這個論壇上也沒有朋友提到過遇到linux病毒,我們仍然能找到許多類unix殺毒軟件?我就至少能列出3種免費殺毒軟件。
第二,很多類unix操作系統都是長年累月不關機的,諸如銀行、電信、軍工等系統,你能想象它們停止磁盤讀寫,在長達幾小時內進行磁盤碎片整理所帶來的后果嗎?這些機器的磁盤讀寫量可是比家用機大多了。
Linux的ext2, ext3, 和 ext4 文件系統 ——Ubuntu和大多數最新的Linux發布版中使用的是ext4——采用了一種更聰明的方法來存放文件。與把多個文件並排放在磁盤上不同,Linux文件系統把所有文件都分散到了整個磁盤上,每兩個文件之間都留有相當巨大的空閑空間。當文件被修改、體積增加時,它們通常有足夠的空間來擴展。一旦有碎片產生時,文件系統會嘗試移動整個文件來消除碎片,所以你不需要一個碎片整理工具。