避免在 ext4 中損壞塊
我在跑步
$ uname -a Linux myhostname 4.14.15-041415-generic #201801231530 SMP Tue Jan 23 20:33:21 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Nitrux Description: Nitrux 1.1.4 Release: 1.1.4 Codename: nxos
ext4
它有一個帶有系統分區和交換分區的硬碟。硬碟既不能完成Smartshort
測試,也不能完成Smart測試long
。SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Short offline Completed: read failure 90% 32232 11202419 # 2 Extended offline Completed: read failure 90% 32229 11202419
也許應該更換磁碟。
同時,是否可以簡單地指示文件系統避開對應的塊
LBA
?這樣就不會從那裡產生進一步的讀/寫錯誤。事實上,這似乎是一個孤立的錯誤,硬碟(當然,該區域除外)仍然能夠工作。SMART參數很奇怪,因為有待重新分配的未決扇區,但也有
0
重新分配的扇區。請注意,這個硬碟大約有 10 年的歷史。ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x002f 200 200 051 Pre-fail Always - 19 3 Spin_Up_Time 0x0027 140 139 021 Pre-fail Always - 3966 4 Start_Stop_Count 0x0032 098 098 000 Old_age Always - 2058 5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0 7 Seek_Error_Rate 0x002e 100 253 000 Old_age Always - 0 9 Power_On_Hours 0x0032 056 056 000 Old_age Always - 32232 10 Spin_Retry_Count 0x0032 100 100 000 Old_age Always - 0 11 Calibration_Retry_Count 0x0032 100 100 000 Old_age Always - 0 12 Power_Cycle_Count 0x0032 098 098 000 Old_age Always - 2001 192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 206 193 Load_Cycle_Count 0x0032 200 200 000 Old_age Always - 1851 194 Temperature_Celsius 0x0022 103 086 000 Old_age Always - 40 196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0 197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 78 198 Offline_Uncorrectable 0x0030 200 200 000 Old_age Offline - 70 199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0 200 Multi_Zone_Error_Rate 0x0008 200 200 000 Old_age Offline - 89
在連結頁面中沒有選擇的答案。我必須保持系統正常執行,並且我想避免
dd
(並且在這種情況下沒有關於如何使用它的明確範例)。我可以fsck.ext2 -c
在已掛載的文件系統上執行嗎?
從
e2fsck
手冊頁(e2fsck
也連結到 names和fsck.ext2
):fsck.ext3``fsck.ext4
請注意,通常在掛載的文件系統上執行 e2fsck 是不安全的。唯一的例外是如果指定了
-n
選項,並且未-c
指定、-l
或-L
選項。但是,即使這樣做是安全的,如果文件系統已掛載,則列印的結果也是無效的。如果詢問您是否應該檢查已掛載的文件系統,唯一正確的答案是“否”。只有真正知道自己在做什麼的專家才應該考慮以任何其他方式回答這個問題。e2fsck``e2fsck
所以答案是“不,你不能
fsck
以任何可能對文件系統進行任何更改的模式在已安裝的 ext2/3/4 文件系統上執行”。在引導時,可能會在根文件系統以只讀模式掛載或系統仍在 initramfs 上執行時對其進行檢查。
fsck
但是在這種情況下,如果指示必須進行任何更改,則應立即重新啟動系統。如果磁碟塊完全失敗,即使重複重試也不會導致磁碟確信數據已正確讀取,則磁槃無法自動重新分配該塊,直到其內容被作業系統覆蓋 - 因為重新分配沒有擁有正確的數據相當於默默地破壞數據(通過用零替換數據塊)。這比簡單地產生讀取錯誤的文件更糟糕,因為損壞的數據可能會被用於進一步處理並默默地導致其他結果被損壞,直到最終被注意到。
產生讀取錯誤的文件通常很容易從備份中恢復,除非它是關鍵系統文件並且系統崩潰或如果該文件失去則無法執行恢復工具。
SMART 指示有待重新分配的扇區但沒有實際重新分配的事實可能僅意味著失敗的扇區被系統文件佔用,這些文件通常只被讀取而實際上從未被寫入。如果你能弄清楚這些文件屬於哪個包,你可以指示包管理系統重新安裝那個包;Nitrux 似乎使用
.deb
軟體包,因此apt-get reinstall <package name>
執行命令也是如此。這將導致文件被重寫,從而允許磁碟完成重新分配。不幸的是,一些磁碟製造商已經創建了 SMART 實現不完整的磁碟,所以只有當它告訴壞消息時,你才能真正信任 SMART;如果它說一切正常,但作業系統報告讀/寫錯誤,那麼不管 SMART 說什麼,都是壞事——而且由於 HDD 是磨損物品,在大多數情況下是磁碟出現故障。
20 多年來,我一直在伺服器管理領域擔任各種角色以謀生。在那段時間裡,我們的團隊看到一個 10 多年前仍在使用的磁碟的反應是——現在仍然是:
“我的天啊!如果那個磁碟由於某種原因而停止運轉,幾乎無法保證它會再次重新啟動。我們甚至可以以合理的價格和響應時間獲得這樣的舊硬體的備件嗎?在至少,我們需要製定一個非常現實的計劃,當(而不是如果)那個東西失敗時該怎麼辦,最好現在就盡快更換或虛擬化那個舊東西。”
當然,我們處理的伺服器幾乎總是每天 24 小時、每年的每一天、在其整個生命週期內執行——而您的系統可能並非如此。
但是一個 10 年曆史的磁碟,如果在其設計的細分市場的“典型”方式附近使用,肯定會很好地進入浴缸曲線的上升邊緣:它的設計壽命已經超過並且它正在磨損。