2012-11-08

Ubuntu 的硬碟需要重整嗎 ?

「Linux 的檔案系統不用重整 ? 那只是都市叢林裡的神話 !」... 這 ... 這是阿舍借用某日本電影的台詞來改的,純屬博君一笑,而關於 Linux 所使用的 ext2、ext3 和 ext4 檔案系統是否需要重整 (Defragmentation) 的這個議題,在網路上,正、反二派都有說法,也都有舉證,但是,就阿舍查到的資料量來說,支持不用重整這個論點的人比較多,而且,有一堆的證舉來說明,相對的,支持要重整的聲音就弱了些,不過,聲音小不見得就是錯的哩 !

Credit DataBank

依照阿舍仔細的研讀後的結論是,ext2、ext3 和 ext4 等的檔案系統是有可能有需要重整的,但是,相對於 Windows 使用的 NTFS 和 FAT 檔案系統所需要的重整的機會來說,Linux 的檔案系統需要重整的機會,可能不及它的 1/100 之一哩 ! 雖然真的很少,但是,並不表示就不需要哩 !

ext2、ext3 和 ext4 檔案系統在設計上,就有考量到要減少同一個檔案的資料分散儲存(Fragmentation)的機會,尤其是 EX3 和 EX4 檔案系統會在無法將同一個檔案放連續的區塊(Block)的時候,會聰明的找一個比較近的區塊來放,這樣,硬碟的磁頭在讀取這個檔案的時候,就不用跑太遠,所以,在讀取速度上,就會和放在同一個區塊的時候差不多,因此,就算分散了,也不太需要重整的樣子哩 !

另外,ext3 和 ext4 檔案系統也有考量到檔案會變大而造成資料無法存在一起,所以,ext3 和 ext4 檔案系統會在檔案儲存的位置的後端保留一些空間,因此,就算檔案變大,也不用因為新增的資料沒地方放而被分散到其它的儲存位置,進行產生檔案資料分散的情況,就會造成檔案讀寫效能的低弱哩 !

除了就近儲存和預留空間之外,ext3 和 ext4 檔案系統還有提供延遲分配 (Delayed allocation) 的機制,就是檔案是到真了正要儲存到磁碟的時候,才會計算檔案所需的儲存空間並分配所使用的位置,不過,詳細運作方式遠比阿舍說的複雜,但是,概念大概是上述的意思哩 ! 不然,就開始講程式了,可是,阿舍的功力就不行了哩 !

所以,ext3 和 ext4 檔案系統是不太有機會讓硬碟出現太高的檔案不連續的比例的,不過,就阿舍看到的這篇文的實驗這篇 Paper 的內容,都十分明確的指出,在某些組合情況下,還是會讓 ext3 和 ext4 等檔案系統的上述機制無法有效降低檔案不連續的比例的,因此,阿舍的結論才會是,ext2、ext3 和 ext4 等的檔案系統是有可能有需要重整的,是會產生檔案儲存位置不連續比例高的情形的哩 !

但是,在實務上,是也不用太擔心 Linux 要重整這件事,因為,ext3 和 ext4 檔案系統的減少不連續儲存機制可以解決到絕大部份的情況,除非你讓軟體跳過 ext3 和 ext4 檔案系統的控制來存取硬碟資料,或是,剛好挑戰了 ext3 和 ext4 檔案系統防範功能的極限,否則,就不用太擔心了,如果,不放心,可以用下面的指令來查看看。( /dev/sda6 請換成你的裝置名稱)

sudo fsck -nvf /dev/sda6 

執行後,可以找到類似下面的這二行訊息,後面的百分比數字,就是檔案和資料夾不連續儲存的比例,阿舍自己的,連 1% 都不到哩 ! (  要提醒的是,fsck 指令請小心使用,請注意並確認後,再回應出現的訊息,如果不小心,是會變動到檔案系統的哩 ! )

1193 non-contiguous files (0.2%)
776 non-contiguous directories (0.1%)

另外,如果想要查所使用的 Ubuntu 是用那一種檔案系統的話,請用下面的這一行指令,一樣的,請把 /dev/sda6 換成你的裝置名稱。

sudo file -s /dev/sda6

如果真的遇到不連續儲存的比例很高時,那要怎麼辦呢 ? 請參考這篇文囉 !
參考資料:
http://en.wikipedia.org/wiki/Ext4
http://en.wikipedia.org/wiki/Ext3#Defragmentation
http://ubuntuforums.org/showthread.php?t=1434502
https://apps.ubuntu.com/cat/applications/hdd-ranger/
http://ols.fedoraproject.org/OLS/Reprints-2007/sato-Reprint.pdf
http://ols.fedoraproject.org/OLS/Reprints-2008/kumar-reprint.pdf
http://polishlinux.org/apps/cli/defragmentation-of-linux-filesystems/
http://www.webupd8.org/2010/03/install-defrag-defragmentation.html
http://askubuntu.com/questions/1090/why-is-defragmentation-unnecessary
http://www.howtogeek.com/115229/htg-explains-why-linux-doesnt-need-defragmenting/
http://askville.amazon.com/defrag-tune-Ubuntu-machine/AnswerViewer.do?requestId=8437568
http://david50.pixnet.net/blog/post/26065780-%5B%E7%AD%86%E8%A8%98%5Dubuntu-defragmenter-%EF%BC%8D-shake
http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?topic_id=9312&viewmode=compact&order=DESC&type=&mode=0&start=0

推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

3 則留言 :

TKY 提到...

阿舍,我用
sudo fsck -nvf 查了自己的硬碟,不連續率也是只有 1%。不過我試著用同樣的命令去查其他格式為 NTFS 分區時卻碰到了以下的問題:

fsck from util-linux 2.20.1
fsck: fsck.ntfs: not found
fsck: error 2 while executing fsck.ntfs for /dev/sda2



是還要加些什麼參數才能查嗎?

ayubiz 提到...

Hello TKY,


fsck 只有對 ext 系列的檔案系統有用 ... 阿舍也是遇到這個錯誤才知道的 ... 呵 ! ^^=

MEEEEE 提到...

Non-contiguous files高達 6.8

張貼留言

歡迎留言提問和討論 .... 😁