Linux
gparted 是否充分利用了壞塊列表?
假設有一個硬碟驅動器
/dev/sda
,並且兩者都有:
/dev/sda1
是一個佔用整個磁碟的 ext4分區,而且它幾乎沒有數據。dumpe2fs -b /dev/sda1
輸出壞塊列表,在這種情況下輸出單個高數字b表示靠近末尾的壞塊/dev/sda
;b幸運的是不是任何文件的一部分。現在需要在 的開頭添加一個交換分區
/dev/sda1
,並且gparted
( v0.30.0-3ubuntu1 ) 用於:
- 調整(縮小)sda1的大小,使其在幾 GB 之後開始,但在同一位置結束。
- 在縮小sda1留下的間隙中添加一個交換分區。
所以
gparted
完成了工作,我們dumpe2fs -b /dev/sda1
再次執行。發生什麼了?可以…?
- 什麼都不輸出,意味著調整大小忘記了壞塊。
- 輸出b不變。
- 輸出b + o其中o是對應於剛剛
/dev/sda1
開始收縮的位置的偏移量。注意: 為簡化問題,假設有問題的硬碟沒有SMART韌體。(關於韌體的評論是題外話。)
GParted 不考慮任何 ext2/3/4 壞塊列表;我通過創建一個帶有強制壞塊的 ext4 文件系統來檢查這一點,然後使用 GParted 移動它。在移動的分區上執行
dumpe2fs -b
會顯示相同偏移處的壞塊。結果為 2,因此文件系統忽略的壞塊不再對應於介質上的真正壞塊。這意味著文件系統會忽略它可以安全使用的塊,並且可能會使用它應該避免的壞塊。
在某種程度上,這確實是有道理的。當 GParted(或任何其他工具)移動分區時,它不使用特定於文件系統的工具,而是移動容器。這通常是有效的,因為文件系統數據是相對於它的容器的;通常文件系統資料結構不需要因為移動而更新。然而,壞塊列表描述了不隨其容器移動的特性……讓 GParted 處理這將非常複雜:它不僅必須更新壞塊列表本身,還必須將數據移開這樣壞塊在移動文件系統中的新位置就不會被使用。