首頁 > 軟體

如何在 Linux 中整理磁碟碎片

2020-06-16 17:52:25

有一神話是 Linux 的磁碟從來不需要整理碎片。在大多數情況下這是真的,大多數因為是使用的是優秀的紀錄檔系統(ext2、3、4等等)來處理檔案系統。然而,在一些特殊情況下,碎片仍舊會產生。如果正巧發生在你身上,解決方法很簡單。

 

什麼是磁碟碎片

檔案系統會按塊更新檔案,如果這些塊沒有連成一整塊而是分布在磁碟的各個角落中時,就會形成磁碟碎片。這對於 FAT 和 FAT32 檔案系統而言是這樣的。在 NTFS 中這種情況有所減輕,但在 Linux(extX)中卻幾乎不會發生。下面是原因:

在像 FAT 和 FAT32 這類檔案系統中,檔案緊挨著寫入到磁碟中。檔案之間沒有空間來用於增長或者更新:

NTFS 中在檔案之間保留了一些空間,因此有空間進行增長。但因塊之間的空間是有限的,碎片也會隨著時間出現。

Linux 的紀錄檔型檔案系統採用了一個不同的方案。與檔案相互挨著不同,每個檔案分布在磁碟的各處,每個檔案之間留下了大量的剩餘空間。這就給檔案更新和增長留下了很大的空間,碎片很少會發生。

此外,碎片一旦出現了,大多數 Linux 檔案系統會嘗試將檔案和塊重新連續起來。

 

Linux 中的磁碟整理

除非你用的是一個很小的硬碟或者空間不夠了,不然 Linux 很少會需要磁碟整理。一些可能需要磁碟整理的情況包括:

  • 如果你編輯的是大型視訊檔或者 RAW 照片,但磁碟空間有限
  • 如果你使用一個老式硬體,如舊筆電,你的硬碟會很小
  • 如果你的磁碟開始滿了(大約使用了85%)
  • 如果你的家目錄中有許多小分割區

最好的解決方案是購買一個大硬碟。如果不可能,磁碟碎片整理就很有用了。

 

如何檢查碎片

fsck 命令會為你做這個,換句話說,如果你可以在 LiveCD 中執行它,那麼就可以用於所有解除安裝的分割區

這一點很重要:在已經掛載的分割區中執行 fsck 將會嚴重危害到你的資料和磁碟

你已經被警告過了。開始之前,先做一個完整的備份。

免責宣告: 本文的作者與本站將不會對您的檔案、資料、系統或者其他損害負責。你需要自己承擔風險。如果你繼續,你需要接受並了解這點。

你應該啟動到一個 live 對談中(如使用安裝磁碟,系統救援CD等)並在你解除安裝的分割區上執行 fsck 。要檢查是否有任何問題,請在使用 root 許可權執行下面的命令:

  1. fsck-fn [/path/to/your/partition]

您可以執行以下命令找到分割區的路徑

  1. sudofdisk-l

有一個在已掛載的分割區中執行 fsck(相對)安全的方法是使用-n開關。這會對分割區進行唯讀檔案系統檢查,而不會寫入任何東西。當然,這並不能保證十分安全,你應該在建立備份之後進行。在 ext2 中,執行

  1. sudofsck.ext2 -fn /path/to/your/partition

這會產生大量的輸出,大多數錯誤資訊的原因是分割區已經掛載了。最後會給出一個碎片相關的資訊。

如果碎片率大於 20% 了,那麼你應該開始整理你的磁碟碎片了。

 

如何簡單地在 Linux 中整理碎片

你要做的是備份你所有的檔案和資料到另外一塊硬碟中(手動複製他們),格式化分割區,然後重新複製回去(不要使用備份軟體)。紀錄檔型檔案系統會把它們作為新的檔案,並將它們整齊地放置到磁碟中而不產生碎片。

要備份你的檔案,執行

  1. cp-afv [/path/to/source/partition]/* [/path/to/destination/folder]

記住星號(*)是很重要的。

注意:通常認為複製大檔案或者大量檔案,使用 dd 或許是最好的。這是一個非常底層的操作,它會複製一切,包含空閒的空間甚至是留下的垃圾。這不是我們想要的,因此這裡最好使用 cp

現在你只需要刪除原始檔。

  1. sudorm-rf [/path/to/source/partition]/*

可選:你可以使用如下命令將空閒空間用零填充。也可以用格式化來達到這點,但是如果你並沒有複製整個分割區而僅僅是複製大檔案(它通常會形成碎片)的話,就不應該使用格式化的方法了。

  1. sudoddif=/dev/zero of=[/path/to/source/partition]/temp-zero.txt

等待它結束。你可以用 pv 來監測進度。

  1. sudoapt-get install pv
  2. sudopv-tpreb | of=[/path/to/source/partition]/temp-zero.txt

這就完成了,只要刪除這個用於填充的臨時檔案就行。

  1. sudorm[/path/to/source/partition]/temp-zero.txt

待你清零了空閒空間(或者跳過了這步)。重新複製回檔案,將第一個cp命令翻轉一下:

  1. cp-afv [/path/to/original/destination/folder]/* [/path/to/original/source/partition]

 

使用 e4defrag

如果你想要簡單的方法,安裝 e2fsprogs

  1. sudoapt-get install e2fsprogs

用 root 許可權在分割區中執行 e4defrag。如果你不想或不能解除安裝該分割區,你可以使用它的掛載點而不是路徑。要整理整個系統的碎片,執行:

  1. sudo e4defrag /

在掛載的情況下不保證成功(你也應該在它執行時不要使用你的系統),但是它比複製全部檔案再重新複製回來簡單多了。

 

總結

linux 系統中由於它的紀錄檔型檔案系統有效的資料處理很少會出現碎片。如果你因任何原因產生了碎片,簡單的方法是重新分配你的磁碟,如複製出去所有檔案並複製回來,或者使用e4defrag。然而重要的是保證你資料的安全,因此在進行任何可能影響你全部或者大多數檔案的操作之前,確保你的檔案已經被備份到了另外一個安全的地方去了。


via: https://www.maketecheasier.com/defragment-linux/

作者:Attila Orosz 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-09/123528.htm


IT145.com E-mail:sddin#qq.com