LF Tip: Clonando PCs completos por la red

ArticleCategory: [Choose a category, translators: do not translate this, see list below for available categories]

UNIX Basics

AuthorImage:[Here we need a little image from you]

this is me

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Gerrit Renker

en to es guadapeich

AboutTheAuthor:[A small biography about the author]

Obtuvo su titulaci�n en inform�tica en el a�o 2.001.

Abstract:[Here you write a little summary]

Es frecuente encontrarse con la necesidad de replicar los datos desde un ordenador a otro. Un m�todo seguro, sencillo y efectivo es utilizar un clonado por la red como se describe en este C�mo.

ArticleIllustration:[One image that will end up at the top of the article]

[Illustration]

ArticleBody:[The main part of the article]

Escenario

Mientras que el clonado de animales ("la oveja Dolly") y de embriones humanos es un �rea de investigaci�n muy discutida y dudosa, no hay duda que alg�n conocimiento en el clonado de ordenadores es menos peligroso (si est� hecho correctamente) y m�s �til para quien escribe cuidadosamente scripts de configuraci�n y opciones. Debido a la Ley de Moore y el r�pido progreso en la fabricaci�n de ordenadores, es casi seguro que uno se encontrar� un escenario de replicado durante el uso de una distribuci�n - puede ser que cambies el PC casero por un port�til o que un nuevo procesador m�s r�pido sale a la venta y tienes bastante dinero para comprar un nuevo ordenador. La tarea es tomar el sistema de archivos completo del ordenador A y ponerlo a funcionar en el ordenador B. Hay dos maneras de hacerlo; una que no est� explicada en este C�mo es abrir la carcasa, conectar f�sicamente los discos duros y hacer la copia localmente sobre un mismo ordenador. Esto frecuentemente no es posible - abrir la carcasa puede implicar la p�rdida de la garant�a - y tambi�n tiene riesgos ya que una persona inexperta puede da�ar f�sica y el�ctricamente el equipo. Y m�s que eso, una vez perd� los datos de un disco de esta forma por culpa de un mal programa de bajo nivel. La otra aproximaci�n, que requiere que ambos PCs tengan tarjetas de red (lo que es un caso frecuente en equipos caseros), es mucho m�s segura y se explica aqu�.

La idea com�n subyacente a todos los m�todos descritos a continuaci�n es establecer una conexi�n de red entre el ordenador "origen" (el que va a ser clonado) y el ordenador "destino" (el clon). Esto es simple si ambos est�n conectados a un hub, en otro caso puedes conectar las tarjetas de red mediante un cable cruzado (los cables rectos normales no se pueden utilizar). Para el PC destino, un Live-CD (como Knoppix o LNX-BBC) o una instalaci�n minimalista es necesaria de tal forma que la tarjeta de red est� operativa y ssh y/o netcat puedan ser usados. Hay tambi�n algunas distribuciones en disquete que te lo permitir�n (en mi equipo tomsrtb no levant� la tarjeta de red al inicio). Si quieres instalar una nueva distribuci�n, esa es tambi�n una alternativa f�cil. Ambos ordenadores necesitan ser configurados con direcciones IP en la misma red de forma que puedan "hablar" uno con otro, como se muestra en la ilustraci�n superior.

M�todos posibles

Con la configuraci�n b�sica descrita hay varias formas de realizar el clonado:

Lo primero es complicado, si no imposible, si tus discos duros no son del mismo tipo y con la misma geometr�a. Es grandioso para cosas como copiar im�genes iso (dd if=/dev/cdrom of=the.iso), o disquetes - este (script de copia de disquete) es un ejemplo de un script diskcopy utilizando dd. El otro inconveniente del m�todo basado en dd es que el espacio vac�o tambi�n ser� copiado, ocupando tiempo innecesariamente. La tuber�a de tar y cpio toma mucho tiempo (incluso horas) y tiene varios problemas. Por ejemplo, hay restricciones en el nombre de los ficheros y uso de los enlaces, perdi�ndolos en los archivos en /dev, y similares. Yo no recomendar�a esta soluci�n para el replicado. Si tienes diferentes sistemas de ficheros en el origen y destino, rsync(1) es probablemente la mejor elecci�n. S�lo necesita que ssh est� corriendo y transmitir� archivos eficazmente entre ambos mediante un eficiente protocolo incorporado. Incluso tiene una opci�n -D para los archivos de dispositivos, as� como muchas otras opciones para utilizar en la mayor�a de las situaciones posibles. Es una herramienta muy �til para las copias de seguridad diarias, copias espejo y cosas as�, la p�gina de manual con sus muchos ejemplos merece la pena estudiarla. Un ejemplo de clonado v�a rsync se explica en [1].

Aqu�, nosotros usamos el m�todo mediante dump y restore el cual significa replicar el sistema de ficheros completo. Es r�pido, efectivo y obtiene el resultado deseado con el m�nimo esfuerzo, por lo tanto ideal para la replicaci�n completa. Tuve que hacer realmente el procedimiento entero de clonado dos veces, puesto que el PC destino fue devuelto y sustituido. En ambos casos no se encontraron problemas y se obtuvo una copia arrancable funcional en el plazo de aproximadamente una hora de copiado de gigabytes. Este enfoque requiere que tanto el PC origen como el destino tengan el mismo tipo de sistema de ficheros. Asumimos que �ste es ext2 o ext3, puesto que son los tipos actualmente m�s usados (vea las notas abajo).

Configurando ssh

Una vez que hayas configurado un sistema con una instalaci�n m�nima o tengas en funcionamiento un Live-CD, el paso siguiente es instalar ssh (si no estas utilizando netcat para la transferencia seg�n se explica m�s abajo). Esto requiere que el PC origen tenga sshd (the secure shell daemon) corriendo. Comprueba /etc/init.d/ si dudas. En el PC destino, teclea como root:
ssh-keygen -t rsa
Para mantener las cosas simples, no entres una clave. La llave p�blica est� en el archivo /root/.ssh/id_rsa.pub. Copia este archivo al PC origen mediante
scp /root/.ssh/id_rsa   SourcePC:/tmp
donde SourcePC es la direcci�n IP del PC origen. Cuando pregunte si estas seguro, teclea un completo ''yes'' (solamente "y'' algunas veces no funciona). Estas todav�a siendo preguntado por la contrase�a de root en el PC origen. Ahora agrega el PC destino como un nodo de la red confiable mediante
cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys
en el PC origen. Para comprobar si todo est� correcto, repite el anterior comando de copia en el PC destino. No ser�s preguntado mas por la contrase�a.

Creando un sistema de ficheros en el PC destino

El primer paso es siempre particionar el disco duro en el ordenador destino y entonces crear el sistema de ficheros ext2/ext3. El �ltimo es activar la variante preferida de journalling simplemente colocando la opci�n -j (journalling) en mke2fs (requiere tener soporte ext3 en el kernel). Puedes incluso convertir un sistema ext2 a ext3, mira tune2fs(8). Digamos que en el ordenador origen tenemos la configuraci�n siguiente:

Partici�n Tama�o Usada %Usada Montada en
/dev/hda3 2.7G 552M 22% /
/dev/hda5 7.8G
1.6G 22% /usr
/dev/hda7 6.3G 1.7G 28% /usr/share
/dev/hda8 3.4G 601M 19% /home
/dev/hda12 5.3G 1.9G 37% /opt
/dev/hda1 587M 70M 13%
/var/backup

Recomiendo hacer siempre alguna clase de partici�n. Si no en caso de fallo en el sistema de ficheros o corrupci�n de algunos sectores del disco duro se pueden destruir todos tus datos. Y de acuerdo a la Ley de Murphy, es seguro que suceder� si no tomas precauciones usando particiones diferentes en vez de usar una �nica. Tuve un caso recientemente con un kernel gracioso y no hab�a particionado el disco, perd� todos mis datos sobre el sistema de ficheros corrupto. Arriba se muestra que /usr se hizo demasiado grande, por eso /usr/share ha sido a�adido. Es el momento para conseguir un disco duro mayor.

En el PC destino lanza parted (recomendado) o tu particionador favorito (Qtparted es una bonita variante en modo gr�fico, que dice ser un clon de Partition Magic). Crea particiones al menos tan grandes como las del PC origen. No olvides la partici�n swap. Despu�s de salvar la tabla de particiones, instala un sistema de ficheros en todas la particiones recientemente creadas, usando
mke2fs -j -L <label> /dev/xxx
donde xxx es el nombre de la partici�n y <label> una etiqueta. Normalmente uso cosas como ''/usr'' como etiquetas (las ver�s en el arranque). Puedes configurar varias cosas mediante tune2fs(8), como la revisi�n del sistema de ficheros de forma regular.

Transferir el sistema de ficheros

Primero necesitas montar todas las particiones nuevas. Comenzamos con la ra�z del sistema ("/") y montamos el resto de directorios. Es perfectamente posible unir dos particiones del PC origen en una sola en el destino, es lo que haremos con /usr/ y /usr/share en el ejemplo anterior. As� monta tu futuro sistema ra�z con
mount /dev/xxx   /mnt
Al clonar es necesario cambiar al directorio destino
cd /mnt
Ahora la red, teclea en el PC destino
ssh targetPC 'dump -0 -f - /' | restore -r -f -
donde targetPC es la direcci�n IP del ordenador destino. Las opciones significan ''-0'' para una copia de seguridad completa, ''-f -'' le dice que use stdin/stdout como descriptor de archivo y ''-r'' indica a restore que recree el sistema de ficheros mediante volcado por la red en el PC destino. Para m�s opciones mira dump(8) y restore(8). Abajo puedes ver la salida para transferir el sistema de ficheros ra�z.
$ ssh 10.42.3.42 'dump -0 -f - /' | restore -r -f -
DUMP: Date of this level 0 dump: Tue Feb 22 15:50:12 2005
DUMP: Dumping /dev/hda3 (/) to standard output
DUMP: Label: debian
DUMP: Writing 10 Kilobyte records
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 547312 blocks.
DUMP: Volume 1 started with block 1 at: Tue Feb 22 15:50:14 2005
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Volume 1 completed at: Tue Feb 22 15:51:43 2005
DUMP: Volume 1 546590 blocks (533.78MB)
DUMP: Volume 1 took 0:01:29
DUMP: Volume 1 transfer rate: 6141 kB/s
DUMP: 546590 blocks (533.78MB)
DUMP: finished in 89 seconds, throughput 6141 kBytes/sec
DUMP: Date of this level 0 dump: Tue Feb 22 15:50:12 2005
DUMP: Date this dump completed: Tue Feb 22 15:51:43 2005
DUMP: Average transfer rate: 6141 kB/s
DUMP: DUMP IS DONE
Restore siempre crea un archivo restoresymtable el cual puede ser borrado una vez que estas convencido de que no se han producido errores durante la reconstrucci�n del sistema de ficheros. Finalizado el sistema de ficheros ra�z, ahora procedemos con cada partici�n, comenzando con /usr (asumiendo que tu actual directorio de trabajo es la ra�z del futuro sistema de ficheros).
mount /dev/xxx  ./usr

cd ./usr

ssh targetPC 'dump -0 -f - /usr' | restore -r -f -
El ciclo mount-cd-dump/restore se repite para todos los directorios que tengas. Con miras a /usr/share (el cual en el PC origen tiene su propia partici�n) puedes, despu�s del paso anterior, simplemente cambiar al directorio ./usr/share (f�jate en el ".") y entonces repetir
ssh targetPC 'dump -0 -f - /usr/share' | restore -r -f -
Restore solo se queja si los archivos existen en el sistema de ficheros que est� siendo restaurado, as� cuando ponemos dos particiones diferentes del PC origen en el PC destino no hay problema. Clonar un PC completo tom� sobre una hora con ssh y tarjetas de red de 100MB (con cable cruzado algo m�s).

Nota: Para volcar un sistema de ficheros, no es necesario que est� montado. Puedes tambi�n pasar un nombre de partici�n, como /dev/hda6, en vez del nombre del directorio donde se monta la partici�n.

Alternativa:  netcat

Una alternativa, en vez de usar ssh, es netcat(1) que se abrevia como nc. Netcat es la navaja suiza de los TCP/IP cliente-servidor y permite crear una tuber�a sobre la red. El ejemplo anterior es entonces modificado como sigue. Asumimos que la partici�n montada bajo /var/backup va a ser transferida mediante dump/restore desde el PC origen a el PC destino.

En el punto de llegada (PC destino) crea una sesi�n de escucha de netcat v�a -l que vuelque su salida a restore.
nc -l -p 2000 -q 1 | restore -r -f -
En el PC origen crea otra sesi�n de netcat que tome su entrada desde una tuber�a donde target-IP es la direcci�n IP del PC destino.
dump -0 -f - /var/backup | nc <target-ip>   2000
La opci�n -q es para parar nc despu�s de recibir el final del fichero, pero yo tengo que terminarlo manualmente en mi caso. Recomiendo usar ssh de todas formas.

Limpiando

Felicidades, si lo conseguiste b�sicamente has clonado un sistema. Ahora queda convertir esta copia en un PC usable. Lo primero es actualizar /etc/fstab con los nuevos datos, o no ser�s capaz de usar las particiones clonadas. Si la direcci�n IP cambia, tambi�n necesitas actualizarla (/etc/hosts, /etc/network/interfaces en debian). La siguiente cosa importante es la configuraci�n de arranque que en la mayor�a de los casos debe ser actualizada. Con lilo, edita /etc/lilo.conf (en particular la opci�n root=... ) y entonces corre lilo -v. Con grub, edita /boot/grub/menu.lst (o /boot/grub/grub.conf dependiendo sobre cual est� el enlace) y entonces teclea grub,
grub> root (hd0,xxx)

... filesystem is ...

grub> setup (hd0)

... lots of output here

grub> quit 
o corre grub-install /dev/xxx donde xxx es tu disco duro. Aqu� comprueba ambos, root (hdn,xxx) y la configuraci�n a�adida a root=/dev/xxx.

En el caso com�n de que ahora tengas mejor hardware en el PC clonado nuevo, querr�s actualizar la configuraci�n de tu kernel a medida. Si estas usando un sistema que viene con montones de m�dulos preconfigurados (como RedHat, SuSe, Mandrake, Fedora ...) no te preocupes, es bastante posible que exista un m�dulo utilizable. En caso contrario, lspci -vv y compilar el kernel es algo com�n y est� descrito en muchos sitios. Si tu tarjeta gr�fica es diferente ahora, actualiza /etc/X11/XF86Config-4 (o xorg.conf en RH/Fedora) para reflejarlo, o no tendr�s salida gr�fica. Es posible usar las herramientas de gr�ficos para configurar X arrancando en el nivel 3 si tienes esas herramientas. En debian, alguna investigaci�n es necesaria, yo fui afortunado al encontrar que el controlador cambi� de r128 a radeon y eso fue lo que hice.

Otros sistemas

Este c�mo explica el procedimiento de clonado para sistemas de ficherosext2/ext3. �rdenes muy similares se pueden encontrar en muchos otros sistemas. Por ejemplo, varios Unices como FreeBSD, HP-UX, IRIX tambi�n suministran las �rdenes dump/restore; en Solaris se llama ufsdump/ufsrestore. Hay sistemas de ficheros que no ofrecen la utilidad de volcado, por ejemplo ReiserFS. En este caso recomendar�a usar rsync. Mira [1] para un informe de clonado de un sistema Linux con �xito.

Referencias

[1] ''Replicating a Linux System - Yet Another Method.'' Ben Okopnik, Linux Gazette Issue 83, October 2002.