
我的 Linux 系統已開始在系統日誌中拋出 SMART 錯誤。我追蹤到它並認為問題出在磁碟上的單一區塊上。如何輕鬆地讓磁碟重新分配該區塊?我想知道在此過程中哪些文件被破壞了。 (我知道,如果磁碟上的一個區塊發生故障,其他區塊可能會效仿;我有一個良好的持續備份,只是想嘗試保持該磁碟正常工作。)
搜尋網路會導致壞塊 HOWTO,它描述了未安裝磁碟上的手動過程。看起來很複雜而且容易出錯。 Linux 中是否有工具可以自動執行此程序?我唯一的選擇是製造商的診斷工具,但我認為這會破壞壞塊,而不會報告被破壞的內容。最壞的情況,它可能是檔案系統元資料。
有問題的磁碟是主系統分割區。使用 ext3fs 和 LVM。這是來自 syslog 的錯誤日誌和來自 smartctl 的相關位元。
smartd[5226]: Device: /dev/hda, 1 Currently unreadable (pending) sectors
Error 1 occurred at disk power-on lifetime: 17449 hours (727 days + 1 hours)
... Error: UNC at LBA = 0x00d39eee = 13868782
有一個完整的 smartctl 轉儲在pastebin上。
答案1
你可以試試hdparm --write-sector <LBA> /dev/ice
。
我不知道有任何其他方法可以做到這一點 - 您需要手動將 LBA 轉換為檔案系統區塊(正如您已經發現的那樣)
答案2
我曾經寫過WD的磁碟固件,曾經寫過重新分配壞塊的韌體。
首先,大多數壞區塊是在讀取時檢測到的,而不是寫入時檢測到的。寫入是盲目完成的,這意味著資料在未經檢查的情況下寫入。因此,在寫入時,如果媒體損壞,您將不會知道,直到主機讀取該磁區。寫入時讀取磁區的一小部分(磁區標頭)以定位正確的磁區,因此,如果讀取磁區標頭時發生錯誤,磁碟機將重新分配該磁區並使用接收到的資料寫入該扇區從寫入命令。但是絕大多數壞塊是在讀取時檢測到的,並且僅僅因為寫入成功到扇區並不意味著介質是好的或扇區已被重新分配。
現在介紹壞區塊重新分配(也稱為重新分配)。是的,如果錯誤足夠嚴重(即 ECC 故障足夠嚴重),通常驅動器會嘗試重新分配扇區,但驅動器在 ECC 糾正後仍然可以恢復資料。通常這是自動完成的。唯一的例外是主機之前可以告訴磁碟機不要進行自動重新分配,但很少這樣做。
那麼,如果驅動器執行讀取操作但無法恢復數據,會發生什麼情況?沒有什麼。錯誤會報告給主機,但不會重新分配。問題是磁碟機可以重新分配磁區,但它根本不知道要在新重新分配的磁區中寫入哪些資料。例如,如果它只是寫入一堆零,然後再次讀取該磁區,它將傳回所有零,而不會表示資料無效。這本質上與資料損壞相同。由於各種原因,驅動器不能指望主機追蹤錯誤(例如,如果驅動器被移動到新主機怎麼辦?),因此最好的做法是當資料無法追蹤錯誤時什麼都不做。
然而,當壞扇區無法重新分配時,現代驅動器將保存壞扇區的位置。等待重新分配的壞扇區數量可以在SMART資料中找到。發生的情況是,如果對等待重新分配的壞扇區之一進行寫入,則會完成重新分配,因為在重新分配後驅動器現在具有可寫入的有效資料。因此,當人們說寫入壞扇區會重新分配它時,這實際上只是故事的一半。必須先讀取驅動器,以便驅動器可以發現所有無法自動重新分配的壞扇區。因此,您可以寫入整個驅動器,SMART 資料會說沒有壞扇區等待重新分配,但您不一定會清除驅動器上的所有壞扇區。因此,如果您確實想清除驅動器上的所有壞扇區,最好的方法是先讀取整個驅動器,然後寫入整個驅動器(當然,這會破壞驅動器上以前的所有資料)。
還有其他方法可以處理無法重新分配的壞區塊。如果磁碟機是冗餘 RAID 配置的一部分(即除 RAID 0 之外的任何配置),RAID 軟體應自動從其他磁碟機還原壞磁區的資料並將其寫入重新指派的磁區。 SCSI 磁碟有一個明確的重新分配區塊指令,即使沒有有效資料寫入區塊,主機也可以使用該指令強制重新分配,但其使用等級相當低。
答案3
我想你要做的就是:
e2fsck -c /dev/hda1
假設 /dev/hda1 是(未安裝的)分割區。或者:
e2fsck -c -c /dev/hda1
進行(較慢的)非破壞性讀寫測驗。它仍然需要被卸載。不過,我認為這不會為您提供任何丟失資料的詳細資訊。
答案4
如果您有備份並且知道這是邏輯錯誤而不是物理錯誤,那麼解決此問題的最佳方法是將光碟清除。
我會使用 MHDD,它相當容易使用,只要您記得將 Bios 中的 HDD 設定為 IDE 模擬,然後在工作完成後返回 AHCI,您就無需擔心。
啟動到 MHDD 後,在 ERASE 命令中選擇磁碟機類型並確認您的選擇。
給自己喝杯咖啡,這可能需要一段時間。
驅動器清零後,執行掃描 (f4),並將「重新映射」設為「開」(預設為「關閉」)。如果驅動器仍然有問題(這表示磁碟片上存在物理損壞並且驅動器處於穩定的向下傾斜狀態),此選項將透過將損壞區域映射到驅動器的健康部分來「修復」這些問題。
如果沒有 UNC 錯誤,那麼恭喜您,您的驅動器在未來幾年中仍然是朋友。