Wie kopiere ich nur gute Dateien von einem Verzeichnis in ein anderes?

Wie kopiere ich nur gute Dateien von einem Verzeichnis in ein anderes?

Ich habe ein beschädigtes Dateisystem. Ich möchte die „Überlebenden“, also die noch funktionierenden Dateien, kopieren. Meine Frage lautet also: Wie kopiere ich nur funktionierende Dateien von einem Verzeichnis in ein anderes?

Bitte beachten Sie, dass eine Datei beispielsweise 10 GB groß sein kann und 5 GB davon kopiert werden können. Wenn das für das Kopieren zuständige Tool also das Zielverzeichnis sofort zum Speichern kopierter Inhalte verwendet, sollte es solche Teildateien entfernen, sobald klar wird, dass es unmöglich ist, die gesamte Datei zu kopieren (weil sie nicht lesbar ist).

Gute Datei– eine Datei, die ohne E/A-Fehler vom Anfang bis zum Ende gelesen werden kann.

Wichtig: dies sollte automatisch erfolgen, d. h. ohne Benutzerinteraktion (mit Benutzerinteraktion verwende ich bereits Midnight Commander).

Aktualisieren: Aus praktischen Gründen ist es erforderlich, dass die maximale Anzahl von Versuchen zum Lesen der Datei angegeben werden kann, da das Tool sonst leicht in eine Endlosschleife geraten könnte, wenn es immer wieder versucht, eine Datei zu lesen. Wenn also beispielsweise ein bestimmter Dateiabschnitt nicht gelesen werden kann (aufgrund eines E/A-Fehlers) und es X Versuche gab, gehen Sie davon aus, dass die Datei nicht gut ist.

Antwort1

Es gibt ein Dienstprogramm namens ddrescueoder dd_rescue. Das sind zwei verschiedene Dienstprogramme, die verschiedene Ansätze verwenden, um dasselbe zu tun. Sie kopieren Daten von A nach B, aber im Gegensatz zu cp schlagen sie nicht fehl, sondern wiederholen die Versuche mehrmals und überspringen, wenn sie die Daten nicht lesen können.
Diese Dienstprogramme sind nicht dateisystemabhängig, aber Sie können sie entweder manuell oder mit auf Dateien ausführen find.
Ich empfehle jedoch, wenn möglich, dd_rescuedas gesamte beschädigte Laufwerk in eine einzelne Image-Datei an einem sicheren Ort zu kopieren, dann dieses Image zu mounten und die Dateien von dort auf die übliche Weise zu kopieren. Das Image wird ohne Fehler lesbar sein.
Verwenden Sie zuerst dd_recue.

Antwort2

fsck -aAm einfachsten ist es, einen oder auf dem beschädigten Dateisystem auszuführen fsck -y(wenn es das Root-Dateisystem ist, booten Sie mit einer Live-CD und mounten Sie es als externes Volume). Alle Dateien, die wiederhergestellt werden können, landen an ihrem ursprünglichen Speicherort, die anderen landen in /lost+found– wo Sie, wenn Sie möchten, versuchen können, etwas daraus wiederherzustellen.

Die genannten Optionen bewirken Folgendes:

Optionen für verschiedene dateisystemspezifische fscks sind nicht standardisiert. Im Zweifelsfall konsultieren Sie bitte die Manpages des dateisystemspezifischen Prüfers. Obwohl nicht garantiert, werden die folgenden Optionen von den meisten Dateisystemprüfern unterstützt:

-A Repariert das Dateisystem automatisch ohne Rückfragen (verwenden Sie diese Option mit Vorsicht). Beachten Sie, dass e2fsck(8) -a nur aus Gründen der Abwärtskompatibilität unterstützt. Diese Option ist der Option -p von e2fsck zugeordnet, die im Gegensatz zur Option -a, die einige Dateisystemprüfer unterstützen, sicher zu verwenden ist.

(...)

-y Bei einigen dateisystemspezifischen Prüfprogrammen bewirkt die Option -y, dass das fs-spezifische fsck immer versucht, erkannte Dateisystembeschädigungen automatisch zu beheben. Manchmal kann ein Experte das fsck besser manuell steuern. Beachten Sie, dass nicht alle dateisystemspezifischen Prüfprogramme diese Option implementieren. Insbesondere fsck.minix(8) und fsck.cramfs(8) unterstützen die Option -y zum Zeitpunkt des Schreibens dieses Artikels nicht.

verwandte Informationen