Virtualizzare un server con Vmware usando netcat


Da server vero a server virtuale…

Recentemente c’è stata la necessità di trasferire il servizio erogato da un server in un ambiente virtuale con l’intenzione di dismettere fisicamente la macchina. Si è pensato di trasferire tutto il filesystem (RedHat 7.3, kernel 2.4.xx) in un ambiente virtuale Vmware, ricostruire il boot in grub, correggere i puntamenti dei dischi in fstab (controller Mylex, 3 dischi in raid), infine caricare il modulo del controller scsi adatto (BusLogic oppure LSI). Questa scelta, dovuta a molteplici fattori, è stata forse laboriosa, ma ha permesso di estrarre un filesystem e reimpostare con pochi passaggi un sistema di test prima e di produzione poi.

Per estrarre il filesystem a caldo, è stato usato netcat (nc), un piccolo e potente tool chiamato “il coltellino svizzero della rete”, che permette di aprire porte TCP e UDP e attraverso queste, inviare e ricevere dati.

Un’implentazione di nc la troviamo sulla pagina del GNU Netcat project (A rewrite of the well-known networking tool, but more portable, with new features and fully GNU compliant)

GNU netcat 0.7.1, una reimplementazione del famoso tool per networking.
Utilizzo di base:
connessione ad un host: nc [opzioni] hostname port [port] ...
attesa connessione: nc -l -p port [opzioni] [hostname] [porta] ...
modalita tunneling: nc -L hostname:porta -p porta [opzioni]

in ubuntu lo possiamo installare con:

$ sudo apt-get install netcat

netcat

“TCP/IP swiss army knife
A simple Unix utility which reads and writes data across network
connections using TCP or UDP protocol. It is designed to be a reliable
“back-end” tool that can be used directly or easily driven by other
programs and scripts. At the same time it is a feature-rich network
debugging and exploration tool, since it can create almost any kind of
connection you would need and has several interesting built-in
capabilities.”

Questo fantastico tool lo troviamo anche in molti live CD. Se usato unitamente a comandi come dd o tar è possibile recuperare dischi fisici, anche in raid, files o addirittura interi filesystem e “spararli” tramite la rete su un altro host, come viene descritto in questo documento. UPDATE questo (nuovo) documento.

L’ambiente virtuale è stato testato su un server Pentium III SMP Xeons, 4 GB di RAM, con Ubuntu 6.06.1 LTS sul quale è stato installato Vmware server.

Per fare il boot nella macchina virtuale ospite ho usato l’immagine ISO di slax (che possiamo scaricare da qui), al posto del CD fisico .

Quello che segue è più o meno la cronaca di quell’esperienza:

Dalla console di vmware server, scegliamo l’opzione custom e creiamo un’immagine da da 8 o 16GB, dove “netcattare” il filesystem del server, impostiamo la rete a bridged e all’avvio premiamo Esc per impostare il boot da CD (cioè dall’iso del liveCD). Al prompt di slax (utente root, password toor) creiamo con fdisk la partizione di swap (1GB, sda2) e quelle dei filesystems /boot e root (100MB, 7GB oppure 100MB, 15GB, sda1 e sda3) con fdisk.

UPDATE:

è possibile creare due sole partizioni copiando il contenuto della partizione montata come boot nella directory /boot del nuovo filesystem.
prepariamo l’area di swap:
# mkswap /dev/sda2 987966

e formattiamo le partizioni sda1 e sda3 con il comando:

# mke2fs -j /dev/sda1
# mke2fs -j /dev/sda3

che monteremo poi per ospitare la copia del filesystem del server (server1):

# mount /dev/sda2 /mnt/sda2

# mount /dev/sda1 /mnt/sda1
# mount /dev/sda3 /mnt/sda3

# cd /mnt/sda3

(la stessa cosa andrà fatta per la partizione sda1)

(Nella pratica per poter accedere al filesystem dopo il boot, è stato necessario aggiornare e2fsprogs per RH 7.3, per gestire l’fsck del filesystem journal ext3)

Configuriamo la rete:

# modprobe pcnet32
# ifconfig eth0 192.168.1.5 netmask 255.255.255.0
# route add default gw 192.168.1.1

e prepariamo il comando (che lanceremo un attimo prima di quello di server1)

# nc -l -p 8000 |tar zxvPp

Apriremo cioè una porta TCP 8000 per ricevere i filesystems di server1.
colleghiamoci quindi su server1 e digitiamo

# cd /
# tar czvp –same-owner -exclude /proc |nc -w 5 192.168.1.5 8000

UPDATE:

# tar czvp - - same-owner - - exclude /proc . |nc -w 5 192.168.1.5 8000

Dove 192.168.1.5 è l’indirizzo IP di slax e /proc è la dir da escludere, mentre 8000 è la porta TCP.

Su /mnt/sda3 di slax vedremo che arriveranno, più o meno velocemente, tutti i files di server1.

Una volta finita la copia (nel nostro caso poco più di un’ora), possiamo iniziare a modificare il sistema copiato per permettere il boot dal nuovo dispostivo scsi (vmware ha un controller BusLogic) e le righe di fstab che puntano alla nuova root.

Per permettere il boot del filesystem occorre sostituire il device /dev/rd/c0d0 in in /etc/fstab e /etc/mtab, per cui la situazione delle partizioni precedente:
/dev/rd/c0d0p1 * 1 13 104391 83 Linux
/dev/rd/c0d0p2 14 204 1534207+ 82 Linux swap
/dev/rd/c0d0p3 205 2231 16281877+ 83 Linux

viene convertita così:

/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 204 1534207+ 82 Linux swap
/dev/sda3 205 2231 16281877+ 83 Linux

Il file /etc/fstab attuale contiene:

/dev/sda1 /boot ext3 defaults 1 2
/dev/sda3 / ext3 defaults 1 1
/dev/sda2 swap swap defaults 0 0

anche il file /etc/mtab necessita del cambio
/dev/rd/c0d0p3 / ext3 rw 0 0

che diventa:
/dev/sda3 / ext2 rw 0 0

I moduli scsi in /etc/modules.conf
alias scsi_hostadapter aic7xxx
alias scsi_hostadapter1 DAC960
alias scsi_hostadapter2 DAC960

diventano:
alias scsi_hostadapter BusLogic
alias usb-controller usb-uhci
alias eth0 vmnics
# Added by VMware Tools
probeall vmnics vmxnet pcnet32

si ricreano le dipendenze dei moduli:
# depmod -a

lsmod adesso riporta:
...
vmhgfs 37504 4
vmxnet 9056 1
BusLogic 94304 3
sd_mod 12832 6
scsi_mod 104800 2 [BusLogic sd_mod]

infine si modifica il file /boot/grub/menu.lst per il nuovo device:
boot=/dev/sda
title server1 (2.4.x)
root (hd0,0)
kernel /vmlinuz.2.4.x 3 ro root=/dev/sda3
initrd /initrd-2.4.x

e si esegue
# grub-install /dev/sda

Questa è un’applicazione (nautilus nel 2002!) del sistema virtualizzato :

reboot😉

Se vuoi suggerirmi o commentare qualcosa, puoi scrivere a “Antonio Doldo” <adoldo@tiscali.it>

Ecco alcune schermate della configurazione di vmware e boot con slax, il resto è storia🙂







Info Antonio Doldo
www.toolinux.it - www.virtualboxes.org - adoldo.wordpress.com - Linux user & Android fan

9 Responses to Virtualizzare un server con Vmware usando netcat

  1. Per proteggere i dati, penso si possano usare questi cloni SSL di netcat:
    http://sourceforge.net/projects/nssl
    http://sourceforge.net/projects/snetcat/
    Non si sa mai, soprattutto in una grossa LAN🙂

  2. Pietro scrive:

    ciao è molto bello questo articolo

  3. morfito scrive:

    clap ! clap !
    complimenti

  4. Antonio Doldo scrive:

    Grazie dei complimenti e dei suggerimenti,
    Antonio

  5. diego scrive:

    complimetnti per l’articolo molto interessante
    l’unica cosa: il link al sito: http://www.rajeevnet.com/hacks_hints/os_clone/os_cloning.html non funziona piu’. Non hai un altro link che spieghi la stessa cosa? grazie…

  6. Antonio Doldo scrive:

    @diego
    Grazie dei complimenti.
    Lo stesso argomento è adesso visibile su:

    http://frilug.fh-friedberg.de/uploads/media/os_cloning.html

    Enjoy🙂

  7. Fabio scrive:

    Ciao, sto cercando di virtualizzare un vecchio server redhat. Ho seguito le istruzioni passo passo, ma non riesco a capire una cosa: all’inizio sul server virtuale mi fai creare due partizioni (sda1 swap ed sda2 ext2)
    Arrivato al settaggio del boot le partizioni diventano 3 sda1 sda2 ed sda3. Cosa devo fare?

  8. Antonio Doldo scrive:

    @Fabio
    Scusami, ma hai ragione. Il fatto che nel server di partenza la partizione esisteva una partizione /boot mentre nell’immagine virtuale ho creato due sole partizioni non avendo più il problema di lilo, copiando in /boot il contenuto.
    Di fatto dovresti copiare nella partizione di root anche tutta la directory /boot del server da virtualizzare, modificando il file /etc/fstab.
    Capisco che forse sto facendo ancora più confusione, ma il concetto è che nel disco virtuale si può modificare lo stato delle partizioni, a patto che il file /etc/fstab abbia i giusti puntatori. Ti prego, se puoi, di postare il tuo.
    Grazie della segnalazione.
    Ciao,
    Antonio

  9. Antonio Doldo scrive:

    @tutti
    Ho fatto le modifiche segnalate da Fabio, spero di non aver dimenticato nulla.
    Excuse moi….
    Antonio

Lascia un commento

Effettua il login con uno di questi metodi per inviare il tuo commento:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: