So kopieren Sie das gesamte Linux-Root-Dateisystem mit ssh und tar auf eine neue Festplatte

18

Ich muss ein gesamtes Linux-Root-Dateisystem von einer fehlerhaften Festplatte auf einen anderen Computer mit einer offenen, verfügbaren Partition übertragen. Ich habe ziemlich sicher , dass dies beinhaltet tarund ssh, aber ich kann mich nicht genau erinnern , wie dies zu tun.

Wahrscheinlich benutze ich eine Live-CD auf dem neuen / Ziel-Host, um so etwas auszuführen :

ssh user@failingharddrivehost "some tar command | piped into something else"

CHK
quelle
offtopic. keine programmierfrage. aber versuchenssh user@failingsys "tar cfz - /" > oldsys.tar.gz
Sie möchten darauf achten, dass Sie nicht tar / dev / (zB / dev / random, / dev / sdX, ...). Ditto / proc /
Hennes

Antworten:

19

Verwenden Sie rsync. Vom neuen Host können Sie verwenden

rsync -avP --numeric-ids --exclude='/dev' --exclude='/proc' --exclude='/sys' root@failedharddrivehost:/ /path/to/destination/

Ich würde nicht versuchen, etwas wie Teer mit einzubeziehen, da es wahrscheinlich nicht funktioniert, wenn defekte Dateien vorhanden sind.

etagenklo
quelle
Endete mit rsync, wie oben von etagenklo und @Hennes beschrieben. Die Migration verlief gut. Ich muss nur Grub reparieren, aber das sollte nicht so schlimm sein.
CHK
8
Ich würde -AHX auch als Flags zu rsync hinzufügen, um Acls, Xattrs und Hardlinks beizubehalten, was zu einer noch genaueren Kopie der ursprünglichen Fs führt.
Alexander Remesch
5
Ich würde -x hinzufügen, um Elemente zu ignorieren, die sich nicht im Root-Dateisystem befinden. Dann können Sie die --exclude-Argumente für verschiedene Pfade überspringen.
Alex
4

Wenn sich beide Computer im selben (sicheren) LAN befinden, empfehle ich einen anderen Ansatz netcat. Dies ist normalerweise viel schneller, da die Daten nicht verschlüsselt werden.

root@good_host$ cd good_partition; netcat -l -p 1234 | tar xvpmf -
root@bad_host$ tar -cv -f- --exclude=/proc --exclude=/sys / | netcat good_host.ip 1234

Dies öffnet einen Abhörport 1234 auf dem guten Computer netcat -l -p 1234und leitet die eingehenden Daten weiter, um sie tarzu extrahieren (wobei die Zeit und die Berechtigungen erhalten bleiben). Der fehlerhafte Host sendet die Daten an diesen Port, ebenfalls mit tarund netcat. Ich habe einige --excludeParameter eingefügt, da /procund /syssind virtuelle Dateisysteme und daher auf dem neuen Host unbrauchbar. (Insbesondere die Datei, die Ihren RAM in ( /proc/kcore) darstellt, fügt eine unnötige Datenmenge hinzu.)

Sie sollten jedoch (auch) in Betracht ziehen, dddie Partitionen des fehlerhaften Laufwerks zu sichern:

user@good_host$ cd good_partition; netcat -l -p 1234 > dump_of_bad_partition_1.dd
root@bad_host$ dd if=/dev/sda1 | netcat good_host.ip 1234

wo musste man sich /dev/sda1auf das richtige gerät einstellen. Tun Sie dies auch mit anderen Partitionen auf dem fehlerhaften Laufwerk.

Mit diesem Dump sind Sie sicher, dass Sie keine wichtigen Metadaten (wie ACLs) verpasst haben, die tarnicht erfasst werden.

mpy
quelle
3

Warum kombinierst du mit Directory Exclusive? Ist es nicht besser, dasselbe Gerät in ein anderes Verzeichnis zu laden? moderne kerne erlauben diesen weg. Sie haben zum Beispiel gemountet

/ dev / sda1 as / then do: mkdir / CLEANROOT mount / dev / sda1 / CLEANROOT

Danach haben Sie: / dev / sda1 als / / dev / sda1 als / CLEANROOT

Dies ist dasselbe Dateisystem, das an zwei Stellen sichtbar ist, aber / CLEANROOT hat keine zusätzlichen Mounts. Dann können Sie tar oder rsync / CLEANROOT ohne Ausschlüsse ausführen, anstatt / with exclusions zu kopieren.

Natürlich müssen Sie andere Datenpartitionen kopieren, wenn Sie welche haben.

Das Kopieren der Partition ist der erste Schritt für die Serverwiederherstellung. Eine andere Möglichkeit besteht darin, Boot-Sektoren neu zu generieren, da das System sonst nicht von einer kopierten Festplatte bootet. Nützlich ist der Rettungsmodus, wenn Sie von einer Installations- / Rettungs-CD oder einem pendrive booten.

Znik
quelle
1

Haben Sie physischen Zugriff auf den fehlerhaften Host?

Wenn ja, booten Sie von einer Live-CD. Dann benutze:

  • dump (kopiert / stellt ganze Dateisysteme einschließlich ihrer Berechtigungen wieder her).
  • Teer mit / dev ausgeschlossen. Sie können dies kombinieren mit zu std_out Ausgeben und kochend , dass , obwohl netcat
    Die Syntax auszuschließen ist: tar --exclude='/dev'.
  • oder rsync mit dem gleichen ausschließt. Z.B
    rsync -zvr --exclude /dev/ / destination_computer_name_or_ip
  • oder benutze dd so:
    nc -l 4242 | gunzip | cat > my_full_disk_backup_of_PC_named_foo
    dd if=/dev/sda of=- bs=1M | gzip | nc -p 4242 name_of_the_destination

Wenn Sie nicht von einer Live-CD booten können, bleiben einige der oben genannten Lösungen gleich, aber:

  1. Einige Dateien sind möglicherweise in Verwendung / gesperrt.
  2. Stellen Sie sicher, dass Sie nicht nur / dev /, sondern auch / proc / ausschließen.
    Z.Btar --exclude='/dev' --exclude='/proc'
Hennes
quelle
Ja, ich habe physischen (und Root-) Zugriff auf beide Hosts. Ich werde es mit rsync versuchen. das netcat stürzte aus unbekannten gründen für die fehlerbox ab. Das Zieldateisystem möchte nicht gemountet werden. es scheitert mit: #mount /dev/sda1 /mnt/fedora mount: unknown filesystem type 'LVM2_member'
CHK
0

Sie sollten in Betracht ziehen, rsync zu verwenden

Der folgende Befehl setzt zwei Dinge voraus:

  1. Sie befinden sich auf dem System mit einer fehlerhaften Festplatte
  2. Neue Partition hat eine minimale Linux-Installation mit aktiviertem ssh.

rsync / new_partition:/wherever/you/want/

Hinweis: Das abschließende / ist wichtig, da Ihre Dateien sonst in einer Verzeichnisebene darüber abgelegt werden

MelBurslan
quelle
Das OP möchte wahrscheinlich den -aParameter (und möglicherweise den -A) verwenden, da er die Zeiten, den Besitz, die Symlinks (und möglicherweise die ACLs) usw. und den -e sshParameter beibehält, da die Daten auf einen anderen Computer übertragen werden sollen. Sorsync -aAv -e ssh root@failingharddrivehost:/ /good_computer/newpartition_mountpoint
mpy