作為Windows系統用戶,會開始羨慕Linux,因為Linux的文件系統不需要碎片整理。如此屌的行徑,不禁讓系統用戶的小伙伴們都驚呆了,而在驚呆之後發現Linux的發行版本也都沒有磁盤碎片整理的功能。這是為什麼呢?
要理解為什麼Linux的文件系統不會想Windows的文件系統一樣產生碎片,你首先要明白碎片到底是如何產生的,還有這兩大操作系統的文件系統的工作方式到底有什麼不同。
什麼是磁盤碎片?
我們都相信定時整理文件系統中的碎片會讓我們的電腦運行得更快,但他我們卻都不知道這是為什麼?其實也是很簡單的原因。
這是因為,一個硬盤驅動器裡面包含了很多扇區,每一個扇區都可以存儲一小塊數據。對於文件,尤其是比較大的文件來說,他們必須要存儲在很多不同的扇區內。假設你的文件系統中有很多不同的文件,每一個文件都被存儲在連續的扇區群中。然後,你對增加了其中某一個文件的大小。文件系統首先會嘗試對該文件新增加的部分存儲在緊挨著原來的扇區群的某個扇區中。但是如果當中沒有足夠的連續扇區,這個文件就必須要被分解成多個小塊,這些操作對於你來說都是可見的。當你的硬盤讀取這些文件的時候,他的磁頭必須在不同的物理位置間跳轉以讀取連續的扇區群,這會降低它的速度。
碎片整理就是一個通過逐位(位是文件在磁盤中存儲的最小單位)移動文件來減少碎片的精密的過程,以此來確保每一個文件在硬盤中都是連續存儲的。
當然,對於固態硬盤來說這又有點不一樣,固態硬盤不需要移動文件也不需要碎片整理。因為對一個SSD(固態硬盤)做碎片整理會減少它的壽命。而且,在最新版本的Windows系統中,你也不再需要為碎片整理擔心,因為Windows會自動幫你完成。
Windows的文件系統如何工作
從前微軟使用的FAT文件系統——最後一次作為默認系統被看到是在Windows 98和ME,盡管這個系統還在USB驅動器中使用——並不能夠很好地排列文件。當你在FAT文件系統中保存文件時,它會盡可能地將文件排列在磁盤的首部。當你存放下一個文件時,它會將這個文件直接存放在第一個文件的後面,以此類推。所以當文件變大,永遠都會有碎片產生,因為文件的旁邊已經沒有空間來存放增加的部分。
微軟在Windows XP和2000中使用的較新的NTFS文件系統就嘗試變得更聰明一點。這個文件系統會在文件周圍放置更多名為”緩沖區“的自由空間,但是,任何一個Windows用戶都會告訴你,NTFS文件系統總有一天也會產生碎片的。
因為文件系統這樣的表現,他們需要碎片整理來保持性能。微軟只能在最新版的Windows系統中通過在後台自動運行碎片整理程序來減輕這個問題。
Linux的文件系統如何工作
Linux的ext2,ext3,ext4文件系統——ext4是Ubuntu和目前大多發行版所采用的文件系統——會以一種更加智能的方式來放置文件。Linux的文件系統會將文件分散在整個磁盤,在文件之間留有大量的自由空間,而不是像Windows那樣將文件一個接一個的放置。當一個文件被編輯了並且變大了,一般都會有足夠的自由空間來保存文件。如果碎片真的產生了,文件系統就會嘗試在日常使用中將文件移動來減少碎片,所以不需要專門的碎片整理程序。
因為這樣的工作方式,你可能會在你的文件系統塞滿之後看到碎片。如果文件系統95%(甚至80%)的空間被占用了,你就會開始看到一些碎片。然而,這樣的文件系統本來就是設計來在普通使用中減少碎片的。
如果你真的在Linux上出現了碎片的煩惱,你可能就需要一個更大的硬盤了。如果你真的需要對一個文件系統做碎片整理,最簡單的可能也是最可靠的方法就是將所有文件拷貝出來,然後清空原來的分區,再將文件拷貝回去。文件系統就會在你拷貝回去的過程中智能地將文件放置好。
其實呢,你也可以利用fsck命令來檢測一下一個Linux文件系統的碎片化程度,你只需要在輸出中查看非連續節點個數(non-contiguous inodes)就可以了。經過了解Windows和Linux的文件系統的工作流程,Linux之所以能那麼屌無需碎片整理,我們現在都知道了。