Newsgroup: it.comp.os.linux.debian
Titolo: Clonazione a caldo

Ciao a tutti,
avrei necessità di "clonare" un server debian su una macchina
virtuale. Pensavo di farlo creando un'immagine del disco mediante un
programma avviabile da cd per poi effettuare il restore sulla MV, però
purtroppo il server di produzione è raramente possibile spegnerlo,
quindi dovrei fare una copia a caldo. Dopo la clonazione schedulerò
degli script per la copia dei soli dati, ma non credo che la copia
file-per-file possa funzionare per "clonare" l'intero sistema...
Cosa mi consigliate di fare?
Esistono comandi sulla shell in grado di rendere possibile una
clonazione a caldo?
Grazie mille in anticipo per il vostro aiuto!

 Cosa mi consigliate di fare?
Io dubito di saperti aiutare, eh, però qualche informazione in più non 
avrebbe fatto male.
Di quale VM stiamo parlando?
Di che fs stiamo parlando?
Di che server stiamo parlando? Che vincoli hai quanto ad accesso in 
scrittura degli utenti?
Perché, per esempio:
http://www.virtualizationworks.com/VMware-vCenter-Converter.asp
in *certi* casi l'hot cloning lo fa bene.
-- 
Bye, Lem
Ceterum censeo ISLAM esse delendum
_____________________________________________________________________
Non sprecare i cicli idle della tua CPU. Usali per qualcosa di utile.
http://orbit.psi.edu/
 
http://www.worldcommunitygrid.org/index.jsp
 
http://boinc.berkeley.edu/projects.php

 in *certi* casi l'hot cloning lo fa bene.
Ho provato VMWare Converter ma purtroppo la clonazione a caldo di una
macchina Linux può avere come destinazione solo un sistema ESXi. Per
farlo ho provato ad installare un ESXi, senza successo, forse per
problemi dovuti alla incompatibilità hardware, dato che ESXi è molto
"selettivo"...
Cosa mi suggerite?

 Cosa mi consigliate di fare?
Io uso questo sistema:
- creo la VM di destinazione assegnandogli i dischi necessari. In base
all'utilizzo del server creerò uno o più dischi virtuali su uno o più
datastore (in genere se sono server DB ne creo 2, uno per il sistema e uno
per i dati)
- avvio la VM con finnix (
http://www.finnix.org
)
- partiziono i dischi come desidero. Io in genere faccio 3 partizioni
primarie sul primo disco (rispettivamente /, swap, /var) e un'unica
partizione per LVM sul secondo disco. Puoi mantenere indifferentemente il
partizionamento originale o cambiarlo a tua scelta.
- creo i filesystem come desidero (in genere ext3/4)
- monto quella che diverrà la root in /mnt, creo i vari mountpoint, monto i
vari volumi sui rispettivi mountpoint sotto /mnt (
p.es
. nell'esempio sopra
monterò /dev/sda1 su /mnt, /dev/sda3 in /mnt/var)
- a scelta con tar o con rsync sincronizzo i filesystem del vecchio server
con il nuovo. Se usi rsync puoi usare una cosa così:
# rsync -avHPAX --exclude=/proc --exclude=/sys root@[server]:/* /mnt/
se preferisci tar:
# ssh root@[server] "cd / ; tar -c -f - --exclude=proc --exclude=sys *" | \
  ( cd /mnt ; tar xf - )
- una volta completata la copia modifico /mnt/etc/fstab indicando
correttamente tutti i filesystem da montare (se diversi dal server sorgente
altrimenti è già a posto a meno dell'uso di UUID)
- modifico /mnt/etc/network/interfaces assegnando un IP diverso al server
- modifico eventuali altri file di configurazione (
p.es
. indirizzi IP di
demoni, ecc.ecc.)
- monto proc e sysfs:
# mount -t proc proc /mnt/proc ; mount -t sysfs sys /mnt/sys
- chrooto nel mio nuovo sistema
# chroot /mnt
- installo grub sul disco sda
# grub-install /dev/sda
- ricreo l'initrd
# update-initramfs -k all -u
- riavvio la macchina con un CTRL+ALT+CANC.
A questo punto se hai fatto tutto bene dovrebbe ripartire il tuo sistema
clonato. Ovviamente non è garantita l'integrità applicativa di eventuali
file/DB aperti durante la copia, ma il sistema funziona correttamente e da
questo momento puoi tenere sincronizzati i soli dati. Ovviamente non la /etc
e la /boot se non vuoi sputtanarti il sistema clonato.
-- 
Flavio Visentin
Ubuntu in Zulu significa "Non so usare Debian". (cit. CtRiX)

Grazie per il tuo ottimo consiglio Flavio!
Ho provato ad eseguire rsync, ma si blocca dandomi questo errore:
rsync: write failed on "/mnt/dev/shm/pulse-shm-3891146895": no space
left on device (28)
rsync error: error in file IO (code 11) at receiver.c(302)
[receiver=3.0.7]
rsync: connection unexpectedly closed (429 bytes received so far)
[generator]
rsync error: error in rsync protocol data stream (code 12) at
io.c(601) [generator=3.0.7]
Sapresti dirmi come fare?
Grazie mille di nuovo! :)

 left on device (28)
Disco destinazione pieno, e stai copiando /dev che non mi sembra
proprio il caso.
SHM? Shared memory?
Ma che razza di aggeggio stai cercando di copiare? ;-)
-- 
           |Save our planet!
    Ciao   |Save wildlife!
   roberto |For your E-MAIL use ONLY recycled Bytes  !!
           |roberto poggi   
rpo...@softhome.net

 Ma che razza di aggeggio stai cercando di copiare? ;-)
Qualcosa di Brutto brutto brutto
http://www.youtube.com/watch?v=7CJzAA6dE2s


Ho aggiunto --exclude=/dev/shm
Ho anche provato con --exclude=/dev
Adesso mi da quest'altro errore:
rsync: write failed on "/mnt/lib/modules/2.6.35-22-generic/kernel/
sound/pci/rme9652/snd-hdsp.ko": no space left on device (28)
rsync error: error in file IO (code 11) at receiver.c(302)
[receiver=3.0.7]
rsync: connection unexpectedly closed (429 bytes received so far)
[generator]
rsync error: error in rsync protocol data stream (code 12) at
io.c(601) [generator=3.0.7]
Non credo proprio che ci siano problemi di spazio, perchè la macchina
virtuale di destinazione l'ho creata con un HD di 40GB uguale alla
sorgente.
Per questo test sto cercando di copiare una macchina virtuale Ubuntu
Desktop 10 sul quale avevo installato Hylafax, se il test andrà a buon
fine poi dovrò copiare un server fisico Debian...
Cosa potrei fare per risolvere?

 Cosa potrei fare per risolvere?
cosa c'e' montanto su /mnt?
forse la partizione di destinazione?
aggiungi anche --exclude=/mnt e vivi felice :-)
da.

Ho aggiunto anche --exclude=/mnt
ma da sempre lo stesso errore:
rsync: write failed on "/mnt/lib/modules/2.6.35-22-generic/kernel/
sound/pci/rme9652/snd-hdsp.ko": no space left on device (28)
ecc...


l'errore si verifica subito o dopo un po?
la partizione di destinazione è vuota?
mi indichi per intero il comando che lanci?
prova a postare anche il risultato di questi comandi:
mount
df
fdisk -l
da.

 fdisk -l
Device       Boot   Start   End     Blocks       Id    System
/dev/sda1   *        1         5221   41937651   83   Linux


ok, ok.
forse ci siamo
da quel che vedo la partizione /dev/sda1 non è montata, in pratica 
quando riempi i 200mb della ramdisk, rsync termina.
prova montare sda1 con:
mount /dev/sda1 /mnt
e rilancia il comando.

 e rilancia il comando.
Il comando mount mi da questo errore: <<mount: you must specify the
filesystem type>>
A questo punto ho provato con "mount -t ext2 /dev/sda1 /mnt", ma dice
che non può trovare il filesystem ext2 su dev sda1. Stessa cosa con
ext3.

 ext3.
era già stato formattato in precedenza?
puoi sempre fare un
mke2fs /dev/sda1
per sicurezza, poi riprovare a montare la partizione
da.

Adesso la copia sta andando avanti, grazie! :)
Al termine vi farò sapere cosa è successo e se la clonazione è andata
a buon fine...

Ho provato a lanciare il comando originale di THe_ZiPMaN
rsync -avHPAX --exclude=/proc --exclude=/sys root@[server]:/* /mnt/
la copia sembrava andare avanti adesso, ma dopo alcuni minuti ho avuto
questo messaggio:
sent 2028282 bytes    received 2775249881 bytes   2981511.72 bytes/sec
total size is 2772094204   speedup is 1.00
rsync error: some files/attrs were not transferred (see previous
errors) (code 23) at main.c(1526) [generator=3.0.7]

 errors) (code 23) at main.c(1526) [generator=3.0.7]
Non hai montato il filesystem di destinazione con il supporto per gli
attributi estesi e le acl.
Dai per ogni mountpoint il comando:
# mount -o remount,user_xattr,acl /mnt
# mount -o remount,user_xattr,acl .......
e poi riesegui l'rsync. Aggiornerà solo le differenze.


 # mount -o remount,user_xattr,acl .......
Considerando il risultato del comando mount, che è questo:
none on / type tmpfs (rw,relatime,size=200128k)
/ramdisk/dev/sr0 on /cdrom type iso9660 (ro,relatime)
/dev/loop0 on /FINNIX type squashfs (ro,relatime)
none on /UNIONFS type aufs (rw,relatime,si=c5bd5ef6)
none on /proc type proc (rw,relatime)
none on /sys type sysfs (rw,relatime)
tmpfs on /dev type tmpfs (rw,relatime,size=10240k,mode=755)
devpts on /dev/pts type devpts (rw,relatime,mode=600,ptmxmode=000)
devshm on /dev/shm type tmpfs (rw,relatime)
quali comandi dovrei quindi lanciare?
Ho provato con:
# mount -o remount,user_xattr,acl /mnt
# mount -o remount,user_xattr,acl /FINNIX
# mount -o remount,user_xattr,acl /cdrom
Dopo questo ho rilanciato rsync, ma ottengo questo errore:


 errors) (code 23) at main.c(1526) [generator=3.0.7]
ora potrei dire qualche sciocchezza, quindi 'coriegetemi se sbalio'
il messaggio di errore parla di 'files/attrs' e fa riferimento a 
'previous errors', se scorri l'output della console dovresti vedere in 
dettaglio quali file o quali attributi hanno dato problemi.
se l'errore è inerente ad 'attrs' insisterei con il consiglio di ZipMan, 
se il problema è inerente a files allora portebbe non riuscire a copiare 
alcuni files 'particolari' come ad esempio quelli in dev. Se è questo il 
caso ritenta con --exclude=/dev
Tra l'altro (e qui mi sa che dico una boiata) con i sistemi recenti i 
file in dev vengono creati automaticamente all'avvio (udev?), mentre 
anni a anni fa bisognava crearli manualmente con il MAKEDEV, ergo non ti 
dovrebbero servire.
da.

 caso ritenta con --exclude=/dev
Ho provato anche con --exclude=/dev, ma il problema persiste. Il
comando completo è:
rsync -avHPAX --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/
mnt root@[server]:/* /mnt/
Dopo ciò ho provato a fare il mount di proc e sys, ma senza successo.
Come dice ZipMan ho usato:
mount -t proc proc /mnt/proc ; mount -t sysfs sys /mnt/sys
Gli errori dati da mount sono:
mount: mount point /mnt/proc does not exist
mount: mount point /mnt/sys does not exist

Qualcuno sa dirmi come potrei risolvere per fare questa copia a caldo?
Grazie mille per il vostro aiuto!


se si tratta solo di quella cartella, direi che va bene cosě, la 
clonazione č andata a buon fine.
su linux.debian.user.italian in  questi giorni c'e' un thread proprio su 
rsync e l'errore di cui sopra, dacci un occhio...
da.

 rsync e l'errore di cui sopra, dacci un occhio...
Grazie per la tua risposta bifz.
Purtroppo non credo che la clonazione sia andata a buon fine, perchè
quando provo ad avviare la MV non viene trovato il sistema operativo
ed il boot fallisce...

 ed il boot fallisce...
Questo dovrebbe dipendere dal fatto che grub non č installato sul nuovo 
disco.
Finita la clonazione prova a installare grub. Per fare ciņ di solito uso 
i comandi riportati sotto.
Controlla attentamente /etc/fstab e /boot/grub/grub.conf e se sono 
cambiati i nomi dei device, modifica i files.
mount -o bind /dev /mnt/dev
mount -o bind /proc /mnt/proc
chroot /mnt
grub-install
<ctrl> d
Ora sono un po di fretta e non ho modo di verificare se ho scritto 
correttamente, per ogni comando cerca di capire cosa fa e modificalo se 
necessario.
da.

Ho rieseguito rsync eliminando tutti gli exclude, e non ho avuto
problemi a fare il mount di proc e sys... Il comando eseguito è:
rsync -avHPAX root@[server]:/* /mnt/
Dopo aver seguito tutta la procedura di ZipMan ho riavviato con Ctrl
+alt+canc, ed il boot è fallito dando questi avvisi:
Gave up waiting for root device. Common problems:
- Boot args (cat /proc/cmdline)
   - Check rootdelay= (did the system wait long enough?)
   - Check root= (did the system wait for the right device?)
- Missing modules (cat /proc/modules; ls /dev)
ALERT!   /dev/disk/by-uuid/d502cb6e-789e-46eb-b580-0f66d7268a56 does
not exist.
Dropping to a shell!
BusyBox v1.15.3 (Ubuntu 1:1.15.3-1ubuntu5) built-in shell (ash)
Enter 'help' for a list of built-in commands.
(initramfs)
Cosa potrei fare?

 Dropping to a shell!
Su /dev/disk/by-uuid/ non c'è d502cb6e-789e-46eb-b580-0f66d7268a56, ma
7767a0ef-e05f-4a5f-aa2a-a3eb1103f910
Sono riuscito a fare il boot modificando il menu di Grub, sostituendo
"root=UUID=sequenza_di_numeri" con "root=/dev/sda1".
C'è altro che dovrei modificare per non avere problemi?

 Cosa potrei fare?
ciao, questo problema dipende dal fatto che il nuovo disco ha un uuid 
diverso (giustamente),
per vedere l'uuid del nuovo disco:
|
blkid /dev/sda1
dovresti sostituire nel file /etc/fstab l'uuid che hai ottenuto a quello 
esistente per la partizione radice
a questo punto basta fare un chroot nella partizione target e 
riconfigurare grub
chroot /mnt
dpkg-reconfigure grub
<ctrl> d
riavvia e ci dovremmo essere..
da.
|

 riavvia e ci dovremmo essere.
Ciao bifz.
Ecco quello che ho fatto:
Modificando manualmente i comandi del menu di grub, come detto prima,
il SO parte. Dopo l'avvio ho sostituito in /etc/fstab l'uuid vecchio
col nuovo. A questo punto, se riavvio, il SO non parte, perchè il menu
di grub è tornato come prima a far riferimento ad un uuid errato.
Ho provato quindi così:
1) modifico il menu di grub col tasto "e"
2) avvio il SO
3) installo grub con "grub-install /dev/sda"
4) eseguo "dpkg-reconfigure grub"
5) reboot
Al solito non riparte il SO se non modifico manualmente il menu di
grub... come posso fare?

Sembra che adesso funzioni :)
Ho modificato il file /boot/grub/grub.cfg sostituendo il vecchio UUID
col nuovo...
Provo a riepilogare tutti i passi seguiti per effettuare questa
clonazione a caldo, correggetemi se sbaglio ;)
- creo la VM di destinazione
- avvio la VM con finnix (
http://www.finnix.org
)
- partiziono i dischi come desidero (ho creato una singola partizione
primaria e bootable con cfdisk)
- creo i filesystem come desidero (ho eseguito "mke2fs /dev/sda1")
- monto quella che diverrà la root in /mnt (ho eseguito "mount /dev/
sda1 /mnt")
- con rsync sincronizzo i filesystem del vecchio server con il nuovo:
# rsync -avHPAX root@[server]:/* /mnt/
- una volta completata la copia modifico /mnt/etc/fstab indicando
correttamente tutti i filesystem da montare (ho sostituito l'UUID
vecchio col nuovo, che ho trovato con "blkid")
- modifico /mnt/etc/network/interfaces assegnando un IP diverso al
server (non ho ip statico, quindi non modifico)
- monto proc e sysfs:
# mount -t proc proc /mnt/proc ; mount -t sysfs sys /mnt/sys
- chroot nel mio nuovo sistema
# chroot /mnt
- installo grub sul disco sda
# grub-install /dev/sda
- ricreo l'initrd
# update-initramfs -k all -u
- riavvio la macchina con un CTRL+ALT+CANC

 grub... come posso fare?
l'unica cosa che mi viene in mente ora č un
update-grub
dopo aver lanciato il comando, prima di riavviare,  prova a verificare 
se in /boot/grub/grub.cfg trovi l'uuid del disco corretto.
non sono sicuro se č necessario un grub-install dopo l'update-grub, per 
sicurezza lo rifarei...
da.

 sicurezza lo rifarei...
Ho eseguito update-grub, e sembra andato a buon fine, infatti il boot
funziona correttamente... Finalmente pare che ci siamo :) Grazie per
il vostro aiuto!!
L'unica incongruenza sembra essere su /etc/fstab:
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/sda1 during installation
UUID=7767a0ef-e05f-4a5f-aa2a-a3eb1103f910 /               ext4
errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
UUID=92f648ce-7232-478f-9afb-5f399afd5a23 none            swap
sw              0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8
0       0
c'è un riferimento a "swap" con
UUID=92f648ce-7232-478f-9afb-5f399afd5a23, non presente sulla
directory /dev/disk/by-uuid del clone, mentre è presente
sull'originale.

 sull'originale.
Ti manca la partizione di swap sul sistema di destinazione.
Ipotizzando che sia la /dev/sda2 devi creare lo swap con il comando:
mkswap -U 92f648ce-7232-478f-9afb-5f399afd5a23 /dev/sda2


 mkswap -U 92f648ce-7232-478f-9afb-5f399afd5a23 /dev/sda2
Grazie THe_ZiPMaN.
Cmq sul clone non ho /dev/sda2, pare che non sia stato copiato...
Su /dev del clone ho:
sda, sda1
Su /dev dell'originale ho:
sda, sda1, sda2, sda5
Risultato di blkid sul clone:
/dev/sda1: UUID="7767a0ef-e05f-4a5f-aa2a-a3eb1103f910" TYPE="ext2"
Risultato di blkid sull'originale:
/dev/sda1: UUID="65bb0876-322d-42b9-a8e8-527f28261048" TYPE="ext4"
/dev/sda5: UUID="e6e783c0-4b73-43bb-aefe-220aec382854" TYPE="swap"
Come mai non mi ritrovo gli altri sda sul clone? Il comando che ho
eseguito per la copia è: rsync -avHPAX root@[server]:/* /mnt/
Cosa dovrei fare?

Aiutatemi per favore, come posso risolvere?

 Aiutatemi per favore, come posso risolvere?
Ciao, dalle informazioni che hai fornito, sul disco della macchina di 
destinazione non esiste nessuna partizione di swap.
Per crearla puoi usare fdisk, o  gparted  se preferisci lavorare da 
interfaccia grafica.
Molto probabilmente sul disco di destinazione è stata creata una sola 
partizione sda1 che occupa tutto lo spazio del disco.
Una strada potrebbe essere quella di ridimensionare con gparted la 
partizione sda1 e fare spazio per la partizione di swap che dovrai creare.
Un'altra strada (che io ti raccomando anche se più lunga) è quella di 
cancellare la partizione attuale, e crearne due nuove, una che ospiterà 
il filesystem, l'altra per lo swap (per la dimensione  ti consiglio  
2*qta_di_ram).
Una volta che hai finito di partizionare il disco, e assegnato il tipo 
corretto alle partizioni (82 per lo swap e 83 per ext2/3/4) dovrai 
formattare la partizione che ospiterà il filesystem (mke2fs), e lanciare 
mkwap come ti ha indicato THe_ZipMan per assegnare l'uuid corretto alla 
partizione di swap.
A questo punto puoi procedere con la procedura che hai riepilogato neui 
messaggi precedenti.
da.
p.s. dai tuoi messaggi deduco (ma potrei sbagliarmi, quindi ignora la 
postilla se è il caso) che ti sei avvicinato da poco al mondo *nix e non 
hai ancora chiari tanti concetti basilari tra cui partizioni, 
filesystems, swap ecc. ti consiglierei di leggerti con molta, molta 
calma alcuni dei manuali tipo 'linux user guide' o 'linux system 
administrator guide' che fanno parte del ldp o anche il manuale del 
sistemista debian. Io li lessi molto tempo fa, prima del millennium bug 
:-),  non so se sono ancora manutenuti ma credo che siano comunque una 
lettura edificante.

 # update-initramfs -k all -u
Thx ;)