come copiare l'intero filesystem di root Linux sul nuovo disco rigido con ssh e tar


18

Ho bisogno di trasferire un intero filesystem di root Linux da un disco rigido guasto su un altro computer con una partizione aperta e disponibile. Sono abbastanza sicuro che questo implichi tare ssh, ma non ricordo esattamente come farlo.

Probabilmente sto usando un cd live sul nuovo host / target per eseguire qualcosa del genere:

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


fuori tema. non una domanda di programmazione. ma provassh user@failingsys "tar cfz - /" > oldsys.tar.gz

Vuoi stare attento a non tar / dev / (es. / Dev / random, / dev / sdX, ...). Ditto / proc /
Hennes,

Risposte:


19

Usa rsync. Dal nuovo host, è possibile utilizzare

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

Non proverei a coinvolgere qualcosa come tar perché probabilmente non funzionerà quando ci sono file rotti.


Finì per usare rsync, come descritto sopra da etagenklo e @Hennes. La migrazione è andata bene. Devo solo correggere grub, ma non dovrebbe essere poi così male.
CHK,

8
Aggiungerei -AHX come flag anche a rsync al fine di preservare acls, xattrs e hardlink risultando in una copia ancora più esatta degli originali.
Alexander Remesch,

5
Aggiungerei -x per ignorare gli elementi non presenti nel filesystem di root, quindi puoi saltare gli argomenti --exclude per vari percorsi.
Alex

4

Se entrambi i computer si trovano sulla stessa LAN (sicura), si consiglia di utilizzare un approccio diverso netcat. Questo di solito è molto più veloce in quanto non crittografa i dati.

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

che apre una porta di ascolto 1234 sulla buona macchina netcat -l -p 1234e convoglia i dati in entrata tarper estrarli (preservando mtime e permessi). L'host errato invia i dati a questa porta, anche usando tare netcat. Ho incluso alcuni --excludeparametri, in quanto /proce /syssono filesystem virtuali e quindi inutili sul nuovo host. (in particolare il file che rappresenta la RAM in ( /proc/kcore) aggiungerà una quantità non necessaria di dati).

Tuttavia, è necessario (anche) considerare di eseguire il dddump delle partizioni dell'unità guasta:

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

dove dovevi adottare /dev/sda1il dispositivo giusto. Fallo anche con altre partizioni sull'unità guasta.

Con quel dump sei sicuro di non aver perso metadati importanti (come ACL) che tarnon verranno catturati.


3

Perché si combina con la directory esclusa? Non è meglio montare lo stesso dispositivo in un'altra directory? i kernel moderni lo consentono. ad esempio, hai montato

/ dev / sda1 come / quindi fare: mkdir / CLEANROOT mount / dev / sda1 / CLEANROOT

dopo questo hai: / dev / sda1 come / / dev / sda1 come / CLEANROOT

Questo è lo stesso filesystem visibile in due posizioni, ma / CLEANROOT non ha montaggi additivi. Quindi è possibile eseguire il tar o rsync / CLEANROOT senza esclusioni invece di copiare / con esclusioni.

Ovviamente devi copiare un'altra partizione di dati quando ne hai.

La copia della partizione è il primo passo per il ripristino del server. un altro è rigenerare i settori di avvio, altrimenti il ​​sistema non si avvia dal disco copiato. Utile è la modalità di salvataggio quando si avvia dal CD di installazione / ripristino o pendrive.


1

Hai accesso fisico all'host in errore?

In tal caso, avviare da un CD live. Quindi utilizzare:

  • cumulo di rifiuti (dump / ripristina interi filesystem comprese le sue autorizzazioni).
  • Tar con / dev escluso. È possibile combinare questo con l'output a std_out e tubazioni che se netcat
    Il esclude sintassi è: tar --exclude='/dev'.
  • o rsync con lo stesso esclude. Per esempio
    rsync -zvr --exclude /dev/ / destination_computer_name_or_ip
  • o usa dd in questo modo:
    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

Se non è possibile eseguire l'avvio da un CD live, alcune delle soluzioni sopra rimarranno invariate, ma:

  1. Alcuni file potrebbero essere in uso / bloccati.
  2. Assicurati di escludere non solo / dev / ma anche / proc /.
    Per esempiotar --exclude='/dev' --exclude='/proc'

Sì, ho accesso fisico (e root) ad entrambi gli host. Andando a provare con rsync. il netcat si è arrestato in modo anomalo per la casella non riuscita per motivi sconosciuti. il filesystem di destinazione non vuole essere montato. fallisce con: #mount /dev/sda1 /mnt/fedora mount: unknown filesystem type 'LVM2_member'
CHK,


0

dovresti considerare di usare rsync

il comando follwoing presuppone 2 cose:

  1. sei sul sistema con disco rigido guasto
  2. la nuova partizione ha un'installazione Linux minima con ssh abilitato.

rsync / new_partition:/wherever/you/want/

Nota: il trailing / è importante, altrimenti i tuoi file finiranno in un livello di directory sopra


L'OP probabilmente vuole usare il -aparametro (e forse il -A), poiché conserva tempi, proprietà, collegamenti simbolici (e forse ACL) ecc. E il -e sshparametro, poiché i dati dovrebbero essere trasferiti su un altro computer. Quindirsync -aAv -e ssh root@failingharddrivehost:/ /good_computer/newpartition_mountpoint
mpy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.