Linux

如何使我的磁碟取消映射掛起的不可讀扇區

  • June 10, 2020

根據 smartd 的說法,我有一個帶有一些待處理的不可讀扇區的磁碟。讓磁碟重新映射它們並停止 smartd 抱怨的最簡單方法是什麼?

今天,我每小時都會收到兩個:

9 月 10 日 23:15:35 希爾頓 smartd [3353]:設備:/dev/sdc,1 目前不可讀(待處理)扇區

該系統是執行 Ubuntu Linux 9.10 (jaunty) 的 x86 系統。該磁碟是 LVM 組的一部分。這是 smartctl 辨識磁碟的方式:

型號系列:Western Digital Caviar 第二代 Serial ATA 系列
設備型號:WDC WD5000AAKS-00TMA0
序列號:WD-WCAPW4207483
韌體版本:12.01C01
使用者容量:500,107,862,016 字節

掛起的不可讀扇區是返回讀取錯誤並且驅動器已標記為在第一個可能的機會重新映射的扇區。但是,在發生以下兩種情況之一之前,它無法進行重新映射:

  1. 扇區重讀成功
  2. 扇區被重寫

在那之前,該部門仍然懸而未決。所以你有兩種對應的方法來處理這個:

  1. 繼續嘗試重新讀取扇區,直到成功
  2. 用新數據覆蓋該扇區

顯然,(1) 是非破壞性的,因此您可能應該先嘗試一下,但請記住,如果驅動器開始以嚴重的方式出現故障,那麼從壞區域連續讀取可能會使其故障更快. 如果您有很多待處理的扇區和其他錯誤,並且您關心驅動器上的數據,我建議您停止使用它並使用出色的工具ddrescue來恢復盡可能多的數據。然後丟棄驅動器。

如果有問題的扇區包含您不關心的數據,或者可以從備份中恢復,那麼覆蓋它可能是最快和最簡單的解決方案。然後,您可以查看驅動器的重新分配和掛起計數,以確保該扇區得到處理。

您如何找出文件系統中扇區對應的內容?我在smartmontools網站上找到了一篇很棒的文章,雖然它是相當技術性的,並且是特定於 ext2/3/4 和 reiser 文件系統的。

我在自己的一個 (Mac) 驅動器上使用的一種更簡單的方法是find / -xdev -type f -print0 | xargs -0 ...讀取系統上的每個文件。在執行之前記下掛起的計數。如果扇區在文件中,您會從用於讀取文件的工具(例如 md5sum)中收到一條錯誤消息,向您顯示該扇區的路徑。然後,您可以將注意力集中在重新讀取此文件上,直到它讀取成功。通常這會解決問題,如果它是一個不經常使用的文件,只需要重讀幾次。如果錯誤消失,或者您在讀取所有文件時沒有遇到任何錯誤,請檢查掛起計數以查看它是否減少。如果有,問題已通過閱讀解決。

如果多次嘗試(例如 20 次)後無法成功讀取文件,則需要覆蓋文件或文件中的塊,以允許驅動器重新分配扇區。您可以在文件(而不是分區)上使用 ddrescue 來僅覆蓋一個扇區,方法是複製到臨時文件然後再次複製回來。請注意,此時僅刪除文件是一個壞主意,因為壞扇區將進入空閒列表,在那裡更難找到。完全覆蓋它也很糟糕,因為這些扇區將再次進入空閒列表。您需要重寫現有的塊。的notrunc選項dd是執行此操作的一種方法。

如果您沒有遇到錯誤,並且掛起的計數沒有減少,那麼該扇區必須在空閒​​列表中或文件系統基礎結構的一部分(例如 inode 表)中。您可以嘗試用 填充所有可用空間cat /dev/zero >tempfile,然後檢查掛起計數。如果它出現故障,則問題在空閒列表中,現在已經消失。

如果該扇區在基礎架構中,則問題會更嚴重,您可能會在遍歷目錄樹時遇到錯誤。在這種情況下,我認為唯一明智的解決方案是重新格式化驅動器,必要時可以選擇使用 ddrescue 來恢復數據。

密切關注驅動器。扇區重新分配是煤礦中非常好的金絲雀,可能會在驅動器發生故障時為您提供早期警告。通過儘早採取行動,您可以防止以後發生災難性和非常痛苦的滑坡。我並不是說一些扇區重新分配表明您應該丟棄驅動器。所有現代驅動器都需要進行一些重新分配。但是,如果驅動器不是很舊(< 1 年)或者您經常進行新的重新分配(> 1/月),那麼我建議您盡快更換它。

我沒有經驗證據來證明這一點,但我的經驗表明,可以通過不時讀取整個磁碟來減少磁碟問題,或者通過dd原始磁碟或通過使用find. 我在過去幾年中遇到的幾乎所有磁碟問題都首先出現在很少使用的文件中,或者出現在不經常使用的機器上。這在啟發式上也是有意義的,因為如果一個扇區被頻繁地重新讀取,驅動器有機會在它第一次檢測到該扇區的小問題時重新分配它,而不是等到該扇區完全不可讀。驅動器無法對扇區做任何事情,除非主機以某種方式訪問它,要麼通過讀取或寫入它,要麼通過執行 SMART 測試之一。

我想嘗試每晚或每週讀取整個磁碟的 cron 作業的想法。目前我正在使用“窮人的 RAID”,其中我在機器中有第二個硬碟驅動器,我每晚都將主磁碟備份到它。在某些方面,這實際上比 RAID 鏡像要好,因為如果我誤操作並刪除了一個文件,我可以立即從備份磁碟中獲取昨天的版本。另一方面,我相信硬體 RAID 控制器可以在後台監控、報告和修復出現的磁碟問題。我目前的備份腳本用於rsync避免複製未更改的數據,但鑑於需要重新讀取所有扇區,最好複製所有內容,或者有一個單獨的腳本每週讀取整個原始磁碟。

引用自:https://unix.stackexchange.com/questions/1869