Warum hört VMware auf, Daten mit ddrescue zu lesen?

688
Thorsten Schöning

Ich verwende VMware Workstation 15 Pro, um eine VM auszuführen, die einige aktuelle Rescue-Linux-Systeme enthält, um Daten von defekten USB-Festplatten mit ddrescue zu retten. Bei einigen GBs von Daten funktioniert das einwandfrei, dann verlangsamt sich ddrescue aufgrund der Beschädigung der Festplatte, überspringt schließlich einige Blöcke und beginnt je nach Leseziel mit einem höheren Durchsatz wieder zu lesen. Dieses Verhalten ist am Ende wie erwartet. Das Problem ist, dass VMware irgendwann einfach aufhört, gerettete Daten zu schreiben:

Während ddrescue behauptet, viele GBs Daten zu retten, wird das Zielgerät irgendwann nicht mehr um diese Daten erhöht. Stattdessen kann der letzte geschriebene Zeitstempel Tage alt sein oder selbst wenn er während des Neustarts der VM erhöht wird, wird er nur einmal und nie wieder erhöht. Es macht keinen Unterschied, ob ich nur ddrescue oder die gesamte VM oder sogar mein gesamtes System neu starte. Es werden anscheinend keine Daten mehr zur Zieldiskette hinzugefügt. Außerdem gibt es nicht genau einen und immer denselben Punkt, an dem dies passiert, aber es geschah bereits nach ~ 150 GB geretteten Daten, ~ 500, ~ 385 usw. Natürlich sehe ich keine konkreten Schreibfehler oder solche in VMwares Protokolle oder die des Hosts selbst. Das Zielgerät ist spärlich, daher dachte ich, dass die geretteten Daten alle 0 sein könnten, aber das ist auch nicht der Fall. Ich überprüfte mit xxd und der Eingabeposition von ddrescue. Das waren nicht alles 0, ddrescued behauptete, Daten zu retten und nichts wurde ins Ziel geschrieben. Das hätte auch nicht die unterschiedliche Größe des Zielgeräts erklärt, als das Problem in der Vergangenheit auftrat.

Mein Setup ist etwas Besonderes:

Der Host ist Windows 10 und die defekte USB-Festplatte enthält NTFS, das von verschiedenen Windows-Versionen nicht mehr gelesen werden kann. Deshalb versuche ich eine Linux-VM und ddrescue, weil das Einhängen in Linux als NTFS ebenfalls fehlschlägt. Da die kaputte USB-Festplatte etwas groß ist, habe ich die Rettungs-VM auf einer anderen, größeren USB-HDD erstellt. Diese VMs enthalten eine VMDK für / und eine weitere VMDK, um die Daten von der defekten USB-Festplatte zu empfangen. Und wie gesagt, das funktioniert im Allgemeinen, die VM läuft und beginnt, Daten zu retten, hört jedoch irgendwann auf, sie zu schreiben.

Das interessante daran ist, dass die defekte USB-HDD immer noch gelesen wird, was an der blinkenden LED und dem Ausgang von ddrescue zu sehen ist, und der Ziel-USB, der die VM enthält, wird auch weiterhin verwendet, um z. B. die Karte von ddrescue zu speichern. Da dies eine weitere VMDK ist, kann ich Änderungen an dieser Zuordnungsdatei sehen, der Zeitstempel für diese VMDK und ihre Größe werden im Laufe der Zeit usw. erhöht. Damit funktioniert VMDK. Außerdem habe ich das Gefühl, dass, wenn ddrescue Daten rettet, die blinkende LED der VM-USB-HDD viel zu viel für die Kartendatei von ddrescue blinkt, als ob GBs von Daten geschrieben würden. Sie erreichen die Ziel-VMDK jedoch aus irgendeinem Grund niemals. Ich habe sogar Process Monitor für Windows verwendet, um zu sehen, ob das Ziel-VMDK geschrieben wird und nach dem Auftreten des Problems wirklich nicht funktioniert. Es wird nur manchmal etwas gelesen, aber nicht auch GBs von Daten.

Ich füge ein paar Screenshots bei, die zwei Läufe von ddrescue dokumentieren: Der erste ist der Punkt, an dem ich gestern Abend aufgehört habe, wonach die Ziel-VMDK schon seit Stunden nicht mehr geschrieben wurde. Seine Größe beträgt ~ 385 GB Daten, während Ddrescue behauptet, ~ 580 GB gerettet zu haben. Die zweite stammt aus dem heutigen Zeitraum, in dem ddrescue behauptet hat, weitere ~ 15 GB an Daten gerettet zu haben, aber die Größe der Ziel-VMDK ist immer noch dieselbe wie zuvor. Die dritte zeigt die Eingabeposition des zweiten Screenshots, die nicht alle 0 ist. Daher sollten mindestens einige Datenbytes in die Ziel-VMDK geschrieben worden sein.

Hast du eine Idee, wie so etwas passieren kann? Oder wie kann ich das weiter debuggen, wo ich suchen muss? Einige spezielle Protokolle oder Debugging-Modus oder was auch immer?

Vielen Dank!

Screenshot 1 Screenshot 2 Screenshot 3

Protokolldatei 1 Protokolldatei 2

0

0 Antworten auf die Frage