
我的硬碟損壞了,其中有許多損壞的塊。我的救援ddrescue
非常成功(我的成功率為 99.5%)。很遺憾:
- 由於某種原因,有時但並非總是如此,當
ddrescue
遇到嚴重損壞的部分時,磁碟會“變得瘋狂”,並且要么只返回磁碟其餘部分的讀取錯誤,要么報告未對齊的讀取錯誤並終止;需要重新啟動電腦才能再次讀取這些部分。 - 第一個包含分區表的區塊被破壞,當核心一次又一次地重試讀取分區表時,系統啟動需要大約一個小時。
有趣的是:我根本不需要讀取分割區表,我正在執行「整個磁碟」救援。
那麼有沒有辦法告訴內核
- 不讀取分區表或
- 限制重試次數?
系統啟動加速將顯著提高恢復速度,因為在此階段系統啟動一個小時,然後繼續恢復幾分鐘,然後由於上述錯誤之一而重新啟動(我已通過啟動腳本自動執行此操作)。
dmesg
輸出:https://cloud.oprendek.sk/index.php/s/Mk8figkaspD8xRE
答案1
感覺以前回答過這個問題,但現在找不到了…
如果您的問題不僅在初始啟動期間仍然存在,而且在將有問題的驅動器熱插拔到已運行的系統時仍然存在,那麼您或多或少運氣不好。
在完整的 Linux 安裝中,您幾乎無法阻止每次連線時掃描磁碟機的分割區、UUID 和其他元資料。核心檢測分割區表,udev 建立磁碟/by-uuid 鏈接,等等。
但是,分區表支援在核心中是可選的(CONFIG_*_PARTITION
,是, , , ...*
之一)。因此,您可以編譯一個不支援任何/停用所有內核的自訂內核,然後(也防止 UUID 掃描等)將其與僅包含 ddrescue 的最小 initramfs 環境一起使用。MSDOS
EFI
MAC
這也會禁止您存取任何其他磁碟機上的分割區,除非您使用losetup
偏移/大小限製或裝置映射器 ( dmsetup
) 來模擬它。因此,您必須解決整體上缺少分區的問題。
- 限制重試次數?
不確定它是否會重試,您可以做的是設定超時(在 中/sys/block/*/device/timeouts
),我猜這只有在驅動器根本沒有響應時才有用。
對於內建的不可移動設備,您也可以使用libata.force=<port.device>:disable
核心參數來完全停用它。