有一神話是 Linux 的磁盤從來不需要整理碎片。在大多數情況下這是真的,大多數因為是使用的是優秀的日志系統(ext2、3、4等等)來處理文件系統。然而,在一些特殊情況下,碎片仍舊會產生。如果正巧發生在你身上,解決方法很簡單。
文件系統會按塊更新文件,如果這些塊沒有連成一整塊而是分布在磁盤的各個角落中時,就會形成磁盤碎片。這對於 FAT 和 FAT32 文件系統而言是這樣的。在 NTFS 中這種情況有所減輕,但在 Linux(extX)中卻幾乎不會發生。下面是原因:
在像 FAT 和 FAT32 這類文件系統中,文件緊挨著寫入到磁盤中。文件之間沒有空間來用於增長或者更新:
NTFS 中在文件之間保留了一些空間,因此有空間進行增長。但因塊之間的空間是有限的,碎片也會隨著時間出現。
Linux 的日志型文件系統采用了一個不同的方案。與文件相互挨著不同,每個文件分布在磁盤的各處,每個文件之間留下了大量的剩余空間。這就給文件更新和增長留下了很大的空間,碎片很少會發生。
此外,碎片一旦出現了,大多數 Linux 文件系統會嘗試將文件和塊重新連續起來。
除非你用的是一個很小的硬盤或者空間不夠了,不然 Linux 很少會需要磁盤整理。一些可能需要磁盤整理的情況包括:
最好的解決方案是購買一個大硬盤。如果不可能,磁盤碎片整理就很有用了。
fsck
命令會為你做這個,換句話說,如果你可以在 LiveCD 中運行它,那麼就可以用於所有卸載的分區。
這一點很重要:在已經掛載的分區中運行 fsck 將會嚴重危害到你的數據和磁盤。
你已經被警告過了。開始之前,先做一個完整的備份。
免責聲明: 本文的作者與本站將不會對您的文件、數據、系統或者其他損害負責。你需要自己承擔風險。如果你繼續,你需要接受並了解這點。
你應該啟動到一個 live 會話中(如使用安裝磁盤,系統救援CD等)並在你卸載的分區上運行 fsck
。要檢查是否有任何問題,請在使用 root 權限運行下面的命令:
fsck-fn [/path/to/your/partition]
您可以運行以下命令找到分區的路徑
sudofdisk-l
有一個在已掛載的分區中運行 fsck
(相對)安全的方法是使用-n
開關。這會對分區進行只讀文件系統檢查,而不會寫入任何東西。當然,這並不能保證十分安全,你應該在創建備份之後進行。在 ext2 中,運行
sudofsck.ext2 -fn /path/to/your/partition
這會產生大量的輸出,大多數錯誤信息的原因是分區已經掛載了。最後會給出一個碎片相關的信息。
如果碎片率大於 20% 了,那麼你應該開始整理你的磁盤碎片了。
你要做的是備份你所有的文件和數據到另外一塊硬盤中(手動復制他們),格式化分區,然後重新復制回去(不要使用備份軟件)。日志型文件系統會把它們作為新的文件,並將它們整齊地放置到磁盤中而不產生碎片。
要備份你的文件,運行
cp-afv [/path/to/source/partition]/* [/path/to/destination/folder]
記住星號(*)是很重要的。
注意:通常認為復制大文件或者大量文件,使用 dd
或許是最好的。這是一個非常底層的操作,它會復制一切,包含空閒的空間甚至是留下的垃圾。這不是我們想要的,因此這裡最好使用 cp
。
現在你只需要刪除源文件。
sudorm-rf [/path/to/source/partition]/*
可選:你可以使用如下命令將空閒空間用零填充。也可以用格式化來達到這點,但是如果你並沒有復制整個分區而僅僅是復制大文件(它通常會形成碎片)的話,就不應該使用格式化的方法了。
sudoddif=/dev/zero of=[/path/to/source/partition]/temp-zero.txt
等待它結束。你可以用 pv
來監測進度。
sudoapt-get install pv
sudopv-tpreb | of=[/path/to/source/partition]/temp-zero.txt
這就完成了,只要刪除這個用於填充的臨時文件就行。
sudorm[/path/to/source/partition]/temp-zero.txt
待你清零了空閒空間(或者跳過了這步)。重新復制回文件,將第一個cp
命令翻轉一下:
cp-afv [/path/to/original/destination/folder]/* [/path/to/original/source/partition]
如果你想要簡單的方法,安裝 e2fsprogs
,
sudoapt-get install e2fsprogs
用 root 權限在分區中運行 e4defrag
。如果你不想或不能卸載該分區,你可以使用它的掛載點而不是路徑。要整理整個系統的碎片,運行:
sudo e4defrag /
在掛載的情況下不保證成功(你也應該在它運行時不要使用你的系統),但是它比復制全部文件再重新復制回來簡單多了。
linux 系統中由於它的日志型文件系統有效的數據處理很少會出現碎片。如果你因任何原因產生了碎片,簡單的方法是重新分配你的磁盤,如復制出去所有文件並復制回來,或者使用e4defrag
。然而重要的是保證你數據的安全,因此在進行任何可能影響你全部或者大多數文件的操作之前,確保你的文件已經被備份到了另外一個安全的地方去了。
via: https://www.maketecheasier.com/defragment-linux/
作者:Attila Orosz 譯者:geekpi 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出