Kopieren eines beschädigten Home-Verzeichnisses erzwingen

7

Ich habe ein Home-Verzeichnis auf einer Festplatte, die viele beschädigte Dateien enthält. Ich versuche, die meisten Dateien so gut wie möglich zu speichern. Ich versuche mit ein Backup meines Home-Verzeichnisses auf einem externen Laufwerk zu erstellen

tar -cvf backup /home/myHome

und auch versucht haben

rsync -vfh /home/myHome /media/backup

Beide Methoden werden beendet, wenn eine beschädigte Datei gefunden wurde. Gibt es eine Möglichkeit, den einen oder anderen zu zwingen, das Kopieren fortzusetzen und fehlerhafte Dateien zu ignorieren, alles zu kopieren, was zum Kopieren möglich ist, und mir am Ende der nicht kopierten Dateien ein Protokoll anzuzeigen?

Vielen Dank.

DuckDucking
quelle
Ich habe nicht genug Zeit für eine vollständige Antwort, aber mein Ansatz wäre, die Partition mit / home schreibgeschützt zu mounten und dann eine Kopie des Images der Partition in einer Datei mit zu speichern dd conv=noerror if=/dev/sdXY of=/media/backup/sdXY.dump. Dann können Sie fsckdie Bilddatei und mounten sie mit -o loop.
Forcefsck

Antworten:

3

Ich habe dafür ein kleines Drehbuch geschrieben

#!/bin/bash
echo "copying from $1"

find $1 -type f -print0 | while read -d $'\0' -r file ; do
    echo Processing "$file"
    target="$2""$file"
    if (test -f "$target") then
        echo File Exists:  "$target"
    else
        echo copying to "$target"
        targetDir=`dirname "$target"`

        if (! [ -d "$targetDir" ]) then
            mkdir "$targetDir"
        fi

        ddrescue -e0 -r0 -v -n "$file" "$target"
        if ([ $? -ne 0 ]) then
            echo Copy failed, deleting "$target"
            rm -f "$target"
        fi
    fi
done
Ruedi Steinmann
quelle
4

Wenn auf Ihrem externen Laufwerk genügend Speicherplatz vorhanden ist, führen Sie eine vollständige Kopie der Partition durch und überspringen Sie nicht wiederherstellbare Sektoren. Machen Sie dann eine Kopie der Kopie und rufen Sie diese fsckauf.

Verwenden Sie für die Kopie der Partition vom fehlerhaften Laufwerk myrescueoder, wenn dies nicht flexibel genug ist ddrescueoder dd_rescue. Alle diese Tools überspringen unlesbare Bereiche oder versuchen, sie wiederholt zu lesen. Passen Sie dies an, je nachdem, ob wiederholte Lesevorgänge möglicherweise funktionieren (z. B. optische Medien oder Disketten) oder im Gegenteil das fehlerhafte Laufwerk früher abnutzen (z. B. die meisten Festplattenfehler). Siehe auch Speichern von Daten von einem fehlerhaften Laufwerk . So stellen Sie Daten von einer fehlerhaften SD-Karte wieder her.

sudo myrescue /dev/sda42 >/media/backup/home.raw
cp /media/backup/home.raw /media/backup/home.recovering
/sbin/fsck -f /media/backup/home.recovering
sudo mount -o loop /media/backup/home.recovering /mnt
cp -a /mnt /media/backup/home.saved
Gilles 'SO - hör auf böse zu sein'
quelle
1

Erstens macht die Verwendung von rsync -aHv--- rsync -vfhkeinen Sinn für das, was Sie versuchen zu tun.

rsync hat ein --ignoring-existierendes Flag, das Sie verwenden können. Führen Sie es aus, rsync -aHv --ignore-existingbis es mit einem E / A-Fehler beendet wird. Notieren Sie sich den Namen der fehlgeschlagenen Datei und erstellen Sie eine leere Version auf dem externen Laufwerk, auf das sie kopiert worden wäre, wenn rsync funktioniert hätte. Führen Sie den Befehl rsync erneut aus, und --ignore-existent führt dazu, dass nicht versucht wird, die fehlgeschlagene Datei zu kopieren. Hoffentlich kopiert rsync alles andere, aber wenn es erneut stoppt, wiederholen Sie diesen Vorgang. Wiederholen, bis rsync vollständig ausgeführt wird.

Kyle Jones
quelle
danke, aber das wird ein Schmerz sein, weil es Hunderte von beschädigten Dateien gibt ... :(
DuckDucking
1

Eine andere Lösung:

find /home/user -type f -print0 | xargs -0 -JXXX -n1 rsync --relative -lptgoHv XXX /external-disk

findgeneriert eine Liste von Dateien und xargsruft rsyncnacheinander mit ihnen auf. --relative stellt sicher, dass Sie einen Baum auf der externen Festplatte anstelle eines flachen Verzeichnisses erhalten. Lassen Sie dieses Argument also nicht aus rsync.

Kyle Jones
quelle
Vielen Dank. Möchtest du das -JXXX und das andere XXX am Ende erklären? Vielen Dank. Ist das echtes XXX oder muss ich dort etwas anderes platzieren?
DuckDucking
-JXXX weist xargsan, XXX in der übergebenen Argumentliste rsyncdurch einen Dateinamen aus der findbereitgestellten Liste zu ersetzen . Ohne das -J xargswürde der Dateiname am Ende der Arg-Liste stehen.
Kyle Jones
Ich habe das versucht und es heißt "Fehler ungültiges Argument -JXXX"
DuckDucking
Wow, ein Xargs, der alt genug ist, um -J nicht zu akzeptieren. OK, versuchen Sie -IXXXstatt -JXXX; es sollte genauso funktionieren.
Kyle Jones
nein, man xargs eingeben Ich sehe, dass -J eine Option ist, aber es gibt mir immer noch diese Nachricht. Ich werde das versuchen.
DuckDucking
0

Verwendung cpio -ivd -H tarBefehl

Manpage sagt das

Dadurch werden die in der Datei directory.cpio archivierten Dateien abgerufen und im aktuellen Verzeichnis abgelegt. Die Option '-i' extrahiert das Archiv und die Option '-v' zeigt die Dateinamen beim Extrahieren an. Wenn Sie mit einem archivierten Verzeichnisbaum arbeiten, müssen Sie die Option '-d' verwenden, um nach Bedarf Verzeichnisse zu erstellen.

-H ist für das Format

sieh das und das

harish.venkat
quelle
Nein, ich möchte einen Tar aus meinem Home-Verzeichnis erstellen, aber das Verzeichnis enthält viele beschädigte Dateien. Ich möchte, dass tar alle Dateien sichert, die gut sind, und ein Archiv erstellt.
DuckDucking