Überspringen/Verkürzen des Lesens der Partitionstabelle auf einer defekten Festplatte

Überspringen/Verkürzen des Lesens der Partitionstabelle auf einer defekten Festplatte

Ich habe eine kaputte Festplatte mit vielen beschädigten Blöcken. Ich führe die Rettung ddrescuerecht erfolgreich durch (ich bin bei 99,5 %). Leider:

  • Aus irgendeinem Grund ddrescue„dreht“ die Festplatte manchmal, aber nicht immer, bei stark beschädigten Teilen „durch“ und gibt entweder nur Lesefehler für den Rest der Festplatte zurück oder meldet einen nicht ausgerichteten Lesefehler und bricht ab. Der Computer muss neu gestartet werden, damit diese Teile wieder gelesen werden können.
  • Der erste Block, der die Partitionstabelle enthält, ist beschädigt und der Systemstart dauert etwa eine Stunde, wenn der Kernel immer wieder versucht, die Partitionstabelle zu lesen.

Lustige Sache: Ich muss die Partitionstabelle überhaupt nicht lesen, ich führe eine Rettung der „gesamten Festplatte“ durch.

Gibt es eine Möglichkeit, dem Kernel mitzuteilen,

  • die Partitionstabelle nicht zu lesen oder
  • um die Anzahl der Wiederholungsversuche zu begrenzen?

Eine Beschleunigung des Systemstarts wird die Wiederherstellungsgeschwindigkeit drastisch steigern, weil das System in dieser Phase eine Stunde lang startet, dann mehrere Minuten lang mit der Wiederherstellung fortfährt und dann aufgrund eines der oben genannten Fehler neu gestartet wird (ich habe dies durch ein Startskript automatisiert).

dmesgAusgabe:https://cloud.oprendek.sk/index.php/s/Mk8figkaspD8xRE

Antwort1

Ich glaube, ich habe das schon einmal beantwortet, kann es aber im Moment nicht finden ...

Wenn Ihr Problem nicht nur beim ersten Hochfahren, sondern auch beim Hotpluggen des fehlerhaften Laufwerks an ein bereits laufendes System weiterhin besteht, haben Sie mehr oder weniger Pech gehabt.

Bei einer vollständigen Linux-Installation können Sie praktisch nicht verhindern, dass ein Laufwerk bei jeder Verbindung nach Partitionen, UUIDs und anderen Metadaten gescannt wird. Der Kernel erkennt Partitionstabellen, udev erstellt disk/by-uuid-Links und so weiter.

Die Unterstützung von Partitionstabellen ist im Kernel jedoch optional ( CONFIG_*_PARTITION, *ist eine von MSDOS, EFI, MAC, ...). Sie könnten also einen benutzerdefinierten Kernel kompilieren, der keine unterstützt / alle deaktiviert, und ihn dann (um auch UUID-Scans und dergleichen zu verhindern) mit einer minimalen Initramfs-Umgebung verwenden, die nur ddrescue enthält.

Dadurch können Sie auch nicht mehr auf Partitionen auf Ihren anderen Laufwerken zugreifen, es sei denn, Sie emulieren dies mit losetupOffset/Größenbeschränkungen oder alternativ mit dem Gerätemapper ( dmsetup). Sie müssen also das Fehlen von Partitionen als Ganzes umgehen.

  • um die Anzahl der Wiederholungsversuche zu begrenzen?

Ich bin nicht sicher, ob es erneute Versuche durchführt. Was Sie tun können, ist, Timeouts (in /sys/block/*/device/timeouts) festzulegen, was aber, denke ich, nur dann sinnvoll wäre, wenn das Laufwerk überhaupt nicht reagiert.

Bei integrierten, nicht entfernbaren Geräten können Sie auch libata.force=<port.device>:disableKernelparameter verwenden, um es vollständig zu deaktivieren.

verwandte Informationen