跳過/縮短損壞磁碟上的分割區表讀取

跳過/縮短損壞磁碟上的分割區表讀取

我的硬碟損壞了,其中有許多損壞的塊。我的救援ddrescue非常成功(我的成功率為 99.5%)。很遺憾:

  • 由於某種原因,有時但並非總是如此,當ddrescue遇到嚴重損壞的部分時,磁碟會“變得瘋狂”,並且要么只返回磁碟其餘部分的讀取錯誤,要么報告未對齊的讀取錯誤並終止;需要重新啟動電腦才能再次讀取這些部分。
  • 第一個包含分區表的區塊被破壞,當核心一次又一次地重試讀取分區表時,系統啟動需要大約一個小時。

有趣的是:我根本不需要讀取分割區表,我正在執行「整個磁碟」救援。

那麼有沒有辦法告訴內核

  • 不讀取分區表或
  • 限制重試次數?

系統啟動加速將顯著提高恢復速度,因為在此階段系統啟動一個小時,然後繼續恢復幾分鐘,然後由於上述錯誤之一而重新啟動(我已通過啟動腳本自動執行此操作)。

dmesg輸出:https://cloud.oprendek.sk/index.php/s/Mk8figkaspD8xRE

答案1

感覺以前回答過這個問題,但現在找不到了…

如果您的問題不僅在初始啟動期間仍然存在,而且在將有問題的驅動器熱插拔到已運行的系統時仍然存在,那麼您或多或少運氣不好。

在完整的 Linux 安裝中,您幾乎無法阻止每次連線時掃描磁碟機的分割區、UUID 和其他元資料。核心檢測分割區表,udev 建立磁碟/by-uuid 鏈接,等等。

但是,分區表支援在核心中是可選的(CONFIG_*_PARTITION,是, , , ...*之一)。因此,您可以編譯一個不支援任何/停用所有內核的自訂內核,然後(也防止 UUID 掃描等)將其與僅包含 ddrescue 的最小 initramfs 環境一起使用。MSDOSEFIMAC

這也會禁止您存取任何其他磁碟機上的分割區,除非您使用losetup偏移/大小限製或裝置映射器 ( dmsetup) 來模擬它。因此,您必須解決整體上缺少分區的問題。

  • 限制重試次數?

不確定它是否會重試,您可以做的是設定超時(在 中/sys/block/*/device/timeouts),我猜這只有在驅動器根本沒有響應時才有用。

對於內建的不可移動設備,您也可以使用libata.force=<port.device>:disable核心參數來完全停用它。

相關內容