Come clonare al meglio un sistema in esecuzione su un nuovo disco rigido usando rsync?


22

Ho un sistema in esecuzione come server che ha un hard disk difettoso. Mentre tutti i dati importanti sono su un RAID e il backup e tutto il resto, non ho un'immagine del sistema stesso. Non c'è bisogno specifico in quanto posso ovviamente fare l'installazione, ma voglio comunque provare a fare una hotcopy prima di percorrere il percorso di ripristino. So che ci sono alcuni aspetti negativi di questo come processo, ma lì non credo che ci siano molti aspetti negativi nel provarlo come primo ricorso.

  • Sistema operativo: Ubuntu 12.04.4 LTS
  • Senza testa
  • Non spero di installare troppi nuovi software poiché il disco sta già fallendo :)
  • Il sistema è in esecuzione. Ho paura di fermarlo aumenta le possibilità che il disco non torni indietro. Questo significa che potrebbe essere fuori dd?
  • Il nuovo disco non ha le stesse dimensioni (è due volte più grande) di quello precedente, complicando ulteriormente il problema di dd.

La mia idea era di

  • collegare a caldo la nuova unità nel sistema
  • crea un filesystem
  • montalo in / mnt / somedir
  • sincronizzare i file
  • un po 'di magia fstab
  • un po 'di magia di avvio

Le domande che ho ancora sono:

Quale sarebbe un buon comando rsync? Stavo pensando di:

rsync -aAXx  / /mnt/somedir/ 
   --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found}

(Salto altre dir, ad esempio il mio raid montato ecc.)

Dove sono le opzioni:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-A, --acls                  preserve ACLs (implies -p)
-X, --xattrs                preserve extended attributes
-x, --one-file-system       don't cross filesystem boundaries

In particolare, sto saltando -H, -v e --progress per accelerare il processo.
Funzionerebbe con Ubuntu? Non sono sicuro che Ubuntu utilizzi hardlink, ma non credo di aver bisogno dell'opzione, vero?

Dopo questa corsa potrei riavviare (forse con un'unità USB live) ed eseguire nuovamente rsync se il vecchio disco si avvia ancora. Ciò riparerebbe tutti i file non leggibili / modificati perché suppongo che il sistema fosse in esecuzione.


Come riparare l'avvio?
Quindi il mio piano sarebbe quello di cambiare l'UUID per /nel mio fstab (devo ancora cercare su Google come trovare l'UUID) e fare un po 'di magia in modo che il sistema si avvii effettivamente dal nuovo disco

Ho dimenticato qualcosa o ho pianificato qualcosa di specificamente stupido?

Risposte:


16

Puoi prendere l'UUID per tutti i dispositivi a blocchi con il blkidcomando. (Vuoi quello che dice solo UUID, non PARTUUID)

Le opzioni rsync che utilizzo sono -avhPHAXx.

Non credo che -v o --progress accelerino qualsiasi cosa a meno che tu non sia su una console / tty molto lenta.

L'uso di -x elimina la necessità di tutte le esclusioni supponendo che si trovino tutte su file system diversi (sul mio sistema, tutte tranne quelle perse + trovate sono).

L'unico programma usato di frequente che conosco che utilizza collegamenti fisici (almeno sul mio sistema) è git, quindi è per questo che aggiungo l'opzione -H. L'unico problema penso che non avresti usato -H è che occuperà un po 'più di spazio.

Per quanto riguarda il bootloader, se stai usando GRUB2 con MBR, il comando che uso è grub-install /dev/sda(sostituisci sda con l'unità corretta per te). Ciò dovrebbe rendere avviabile la nuova unità. Se stai usando un bootloader o UEFI diverso, allora controllerei su Google come ottenere il corretto avvio della nuova unità. Ricorda solo che / boot sulla nuova unità dovrà trovarsi nella stessa partizione in cui si trova attualmente (supponendo che tu non stia utilizzando un UUID anche per / boot), altrimenti dovrai modificare fstab di conseguenza.


Non credo di averli su sistemi separati, temo, quindi l'esclusione sembra prudente. Sto leggendo cose contrastanti sulla velocità di - v, quindi non sono sicuro di cosa fare lì;). Git è un buon punto, sono sicuro / home ne hai un po '!
Nanne,

1
Bene, / proc, / sys e molto probabilmente / dev sono sicuramente filesystem / mountpoint diversi da /, quindi non c'è assolutamente alcun motivo per escluderli quando si ha -x. Se non sei sicuro di cosa sia o meno parte del tuo filesystem di root, corri mountper controllare. Tutto ciò che è lì dentro non dovrà essere escluso manualmente.
bparker,

Non sono sicuro di come e perché, ma gli esclusi erano comunque sbagliati. In realtà erano sulla pista asciutta che ho fatto, non so perché. (beh, ho copiato il formato da un posto semi-casuale, quindi questo potrebbe essere il motivo?). Ad ogni modo, con la -x saldamente a posto secondo il tuo consiglio, non mi sono preoccupato troppo, l'unica cosa che è successa è stata che anche alcune cose non importanti (vecchi backup di backup) sono state "salvate".
Nanne,

Questo mi ha salvato un $$. Ho clonato il sistema da 12 GB + su Linode su un nodo nuovo di zecca. Dopo oltre 5 anni, funziona ancora. Grazie ragazzi!
geeth

Quindi, quando si partiziona il filesystem clonato pronto ad accettare i cloni, la mia partizione di root dovrebbe avere il flag di avvio impostato mentre li mantengo non sincronizzati, o devo impostarlo appena prima di mettere in produzione l'unità clonata. Altrimenti, suppongo che l'unità clonata sia quindi avviabile, il che non è davvero desiderato. Nella mia situazione, l'unità clone è un disco su un server separato. E Rsync viene utilizzato per mantenerlo allineato con prod.
NZ Dev

11

L'ho fatto con successo (dopo un paio di prove).

ero solito

sudo rsync -ahPHAXx --delete --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found} / /mnt

Quindi ho resettato il mio /mnt/etc/fstabfile per la partizione di avvio e il mio spazio di scambio.

Quindi ho dovuto ripristinare GRUB

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
sudo grub-install --recheck /dev/sdX
sudo update-grub

Si noti che questo è solo per i dischi formattati MBR.
Teque5

2

Non tentare di correggere l'avvio con questa unità; la mia raccomandazione:

  1. Collegare un'unità su un altro computer invece di rischiare un hotswap sul computer guasto.
  2. rsync i tuoi file non di sistema attraverso il nuovo disco.
  3. Su un disco rigido separato, creare un avvio, una radice minima e uno scambio. Installa lo stesso sistema operativo che desideri clonare dal disco rigido malato.
  4. Avvia da questo nuovo disco (idealmente su un computer separato, se non puoi rischiare tempi di inattività sull'host di destinazione, altrimenti puoi avviare l'host di destinazione con questo disco).
  5. Aggiungi il disco dal passaggio 2 a questo nuovo sistema, con i punti di montaggio corretti. Ora hai un clone dell'unità di sistema. È possibile (facoltativamente) copiare le partizioni su questo nuovo disco, ma la mia raccomandazione è di mantenere il disco come requisito minimo per l'avvio del sistema operativo. Come hai capito, avere troppe cose sulla partizione primaria rende difficile il recupero. Assicurati di copiare correttamente la configurazione di rete poiché il tuo server è senza testa.
  6. Sostituisci semplicemente l'unità sul sistema malato con questa nuova coppia di dischi (se scegli di non avviare inizialmente la destinazione al punto 4).
  7. Reboot.

Posso rischiare tempi di inattività, è un server non essenziale. Stavo andando per l'hotswap (fondamentalmente hot-add) perché quella copia sarebbe stata molto più veloce. Non ci dovrebbero essere troppi rischi, ho pensato, dato che stiamo parlando SATA (almeno II). A parte questo, qual è il motivo per suggerire un disco di avvio aggiuntivo? Ciò non complicherebbe le cose per alcuni software già installati, homedir ecc? Sembra più lavoro che sto cercando di evitare: D
Nanne

È quello che uso in produzione; Montare / home, / etc, / var, / usr e / opt su dischi esterni (attualmente su LVM) e / e / boot su un disco separato. In questo modo non devo preoccuparmi quando il disco principale si guasta, lo sostituisco senza influire sui miei servizi :) All'inizio è un po 'di lavoro ma ti salva a lungo termine. Soprattutto quando si esaurisce lo spazio su una partizione e è necessario aggiungere un volume senza tempi di inattività.
Burhan Khalid,

Mentre fai un buon punto, non è un requisito che attualmente non ho, né ho bisogno :). Ci sono molti altri dischi nel sistema (circa 7) e devo disegnare la linea da qualche parte; D. Quindi il sistema operativo non deve essere suddiviso al momento. Voglio dire: sono d'accordo che il sistema è buono, ma non è qualcosa che sto cercando ora; D. Quindi se lascio tutto su 1 disco, il fatto che sto copiando esterno renderà molto lento, non è vero?
Nanne,

Dipende dalla tua interfaccia verso l'esterno, su Ethernet dovrebbe essere veloce, su USB 2 più veloce, su USB 3 ancora più veloce. Non lo farà molto lentamente - ovviamente non copiare le directory in cui si sta scrivendo (come dire, / tmp, che non ti serve comunque) o ovunque vengano scritte le pipe.
Burhan Khalid,

0

Ho trascorso molto tempo su una distro di Centos Freepbx per rsync e ho un nuovo disco di avvio e, infine, dopo aver risolto UUID fstab e grub non funziona.

L'ultimo passo per farlo funzionare è

dd if=/dev/sda of=/tmp/mbrsda.bak bs=512 count=1
dd if=/tmp/mbrsda.bak of=/dev/sdb bs=446 count=1
grub

Quando ci si trova nella CLI di Grub (ovvero al grub>prompt):

device (hd0) /dev/sda
device (hd1) /dev/sdb
root (hd0,0) 
setup (hd0) 
root (hd1,0)
setup (hd1)
quit

Premere entere ora è possibile arrestare, rimuovere il vecchio disco e avviarne uno nuovo.

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.