Clonando estaciones de trabajo con Linux

Introducción
Cualquiera que haya tenido que instalar un parque de 10 – 100 estaciones de trabajo con exactamente los mismos sistema operativo y programas se habrá preguntado si hay un modo mejor – y más rápido – de hacerlo que mover los CDs de caja en caja. Clonar consiste en instalar – una vez – una estación de trabajo modelo, y después copiarla en todas las demás.
El propósito de este texto es explorar algunos de los muchos modos de clonar la configuración del disco duro de una estación de trabajo. En el proceso de clonación, utilizaremos las posibilidades nativas de Linux para producir más o menos el mismo efecto que el bien conocido Norton Ghost del mundo de Windows.
Aunque estaremos lanzando las estaciones de trabajo bajo Linux, el sistema operativo final bajo el que correrán puede ser o no Linux. Actualmente, empleo este sistema para un parque de estaciones Windows ME que se tienen que reformatear al menos una vez al año – por razones evidentes.

Cambio entre discos duros

El modo más viejo de clonar un disco duro requiere dos estaciones de trabajo (A es el modelo, B es el clon), y otro ordenador C. Sólo C necesita estar bajo Linux.

1. Sacamos los discos duros de las estaciones de trabajo, y se los añadimos a C. Hay que tener cuidado de dejar el disco duro original de C en la primera posición IDE. Por ejemplo:

	IDE bus 0, master	=>	disco duro de C	=>	/dev/hda
	IDE bus	0, slave	=>	disco duro de A	=>	/dev/hdb
	IDE bus 1, master	=>	disco duro de B	=>	/dev/hdc

Entonces tenemos que copiar los contenidos de /dev/hdb a /dev/hdc. Si son del mismo modelo, podemos conseguirlo con una copia plana byte a byte:

dd if=/dev/hdb of=/dev/hdc

o incluso:

cp /dev/hdb /dev/hdc

Hay modos más fáciles de hacer la copia, sin embargo, debería estar al tanto de los siguientes puntos:

  • Los discos duros deben ser del mismo modelo exactamente: hay problemas entre versiones más recientes/viejas del mismo disco duro.
  • Puede tener problemas con sectores defectuosos bien en A o en B.
  • Usted está copiando también todas las partes vacías del disco A al B; esto puede tomar algún tiempo y no tiene utilidad para nuestros propósitos.

Este modo puede ser el mejor para la gente que utiliza gestores de arranque como lilo o grub, pues el sector de arranque se copia junto con todo lo demás.

El segundo modo, ligeramente más complicado, de copiar A en B, consiste en dos pasos:

  • Primero, usdted tiene que hacerse con la tabla de particiones de B (con fdisk, cfdisk,…)
  • Entonces formatea las particiones de B (con mkfs.ext2, mkfs.vfat, mkswap)
  • Hace la copia efectiva

En este caso, copiar significa montar:

	mkdir /mount/A ; mkdir /mount/B
	mount /dev/hdb /mount/A
	mount /dev/hdc /mount/B
	cp -dpR /mount/A/* /mount/B
	umount /dev/hdb ; umount /dev/hdc

Puede haber un poquito de dolor si hay un montón de estaciones de trabajo para clonar, pero lleva menos tiempo que una instalación completa… y puede estar seguro de que tienen la misma configuración.

Importante: si está usando un gestor de arranque como lilo o grub para lanzar una estación de trabajo Linux, entonces tiene que escribir un fichero de configuración del gestor de arranque personalizado e instalarlo en el sector de arranque del disco B.

Básicamente, usted necesita decirle al gestor de arranque:

  • Que use el disco /dev/hdc para escribir en el sector de arranque; aquí es donde está actualmente su disco duro clonado.
  • Que emplee el disco /dev/hda para lanzarse; aquí es donde estará su disco duro clonado cuando lo arranque.

¡Tenga cuidado: puede acabar teniendo que usar sus discos de rescate si hace esto mal! Estando aquí, hágalo. Ya ha sido avisado. Antes de empezar, eche una mirada de cerca a su /etc/lilo.conf actual o a su /boot/grub/menu.1st, y a sus páginas man.

Alternativamente, si simplemente está arrancando Linux, usted puede:

  • copiar los archivos al disco B
  • devolver el disco B a la estación de trabajo B
  • lanzar la estación de trabajo B desde el diskette de rescate que elaboró para la estación de trabajo A cuando instaló el sistema
  • ejecutar lilo o grub directamente

Este segundo modo puede ser mucho más fácil para gente con menos horas de vuelo en sistemas Linux. 🙂

Otra versión de la misma configuración es, si el disco C es suficientemente grande, copiar una vez desde A a C, y después copiar tantas veces de C a B1, B2, B3, … Si su instalación IDE tiene buses suficientes (o está usando SCSI), usted puede copiar 5 discos o más a la vez.

No hace falta decirlo, nosotros usamos esto sólo si no tenemos ninguna red instalada – una situación bastante poco común en estos tiempos. Sin embargo, la velocidad puede ser bastante alta dado que estamos trabajando directamente a las velocidades de las interfaces IDE.

Copiando sobre una red

Copiar sobre ua red consiste en lanzar la estación de trabajo B con un diskette o CD con un sistema operativo que pueda guiar la red (veamos ahora … aquí Linux está dentro, Windows está fuera) y obtener la imagen del disco duro bien directamente de la estación A, o más habitualmente, de un servidor de archivos C. En nuestros ejemplos, emplearé la estación B como el ordenador a configurar y supondré que tenemos los archivos imagen de la estación A directamente copiados a un directorio en el servidor C.

Hay varias «diminutas» distribuciones de Linux-en-un-diskette dsiponibles ahí fuera. MicroLinux(muLinux) es mi favorita, pero todas trabajan de modo similar

La idea es arrancar desde el diskette, e instalar la red.

Entonces usted puede bien:

  • Tener una imagen completa del disco duro en el servidor, que entonces puede copiar al disco local con una copia byte a byte. Igual que la copia directa de disco a disco, es más sencillo de configurar, pero también tiene los mismos avisos.
  • Tener el sistema de archivos listo en el servidor, lo que significa que usted tiene que particionar el disco local, formatear las particiones y copiar recursivamente los archivos desde la red a su disco.

Un ejemplo del primer modo, sobre NFS:

	mkdir /mount/C
	mount server:/exported.directory /mount/C
	dd if=/mount/C/my.image of=/dev/hda
	umount server:/exported.directory

Un ejemplo del segundo (suponiendo que ya ha configurado y formateado las particiones en el disco duro local /dev/hda):

	mkdir /mount/B ; mkdir /mount/C
	mount /dev/hda /mount/B
	mount server:/exported.directory /mount/C
	cp -dpR /mount/C/* /mount/B
	umount server:/exported.directory /mount/C
	umount /dev/hda

En el segundo caso, si está usando un gestor de arranque, recuerde instalarlo bien inmediatamente después de copiar los archivos, o después de reiniciar la estación de trabajo B desde un diskette de rescate.

Lo bonito con Linux es que, en esencia, copiar una imagen o archivos separados desde una red es exactamente lo mismo que hacerlo de otro disco duro en su ordenador.

NFS no es naturalmente el único modo de descargar el archivo o archivos desde el servidor C. Hoy día hay a elegir muchos protocolos adecuados igual que tiene disponibles clientes en su diskette de arranque. Le sugeriría que usase cualquier servidor que ya tenga instalado en su red. Algunas posibilidades:

NFS (Network File System, Sistema de Archivos en Red)
Éste es el modo nativo que los sistemas Un*x emplean para compartir archivos; es robusto y fácil de instalar. Mi favorito.
HTTP (como en un servidor Web)
Fácil de instalar en el lado del servidor, pero puede ser difícil de encontrar un cliente adecuado. Usado principalmente con scripts de instalaciones automatizadas. Usted ya puede tener uno de éstos ejecutándose.
FTP
Menos fácil en el lado del servidor, pero muy fácil de encontrar clientes. Usted ya puede tener uno de éstos ejecutándose.
TFTP (trivial FTP)
Muy fácil de instalar en el servidor, muy fácil de usar el cliente. Muchos enrutadores (p. ej. Cisco) usan tftp para almacenar sus archivos de confoguración.
SMB (o Netbios)
Sí, éste funciona. Su servidor puede correr bajo, bien Linux + Samba o cualquier versión de WinXX. Por qué lo querría así usted, es asunto suyo, sin embargo.
rcp o scp
(scp es preferible por seguirdad)
rsync
Otro de mis favoritos. Usado normalmente para sincronizar un archivo de copia de seguridad o un servidor web con el servidor principal. Esto puede resultar en un pequeño agujero de seguridad si el servidor C está accesible desde fuera de su red, así que tenga cuidado de bloquearlo en su cortafuegos. Realiza compresión.

Hay una distribución de CD reciente llamada Knoppix que le lanza directamente a un escritorio KDE. Desde aquí, usted puede usar todas sus herramientas basadas en gráficos regulares si está más inclinado a eso.


Lanzando desde la red

Una curva final es lanzar la estación de trabajo B directamente desde la red sin usar un disco de arranque. La idea es decirle a la BIOS que cargue un mínimo driver de red desde una EPROM. El control es transferido entonces a ese driver, que avanza sobre la red buscando un servidor DHCP del que pueda obtener una dirección IP y un núcleo imagen. Entonces lanza el núcleo, que como resultado obtiene el sistema de archivos raíz desde un servidor NFS.

En este momento, la estación de trabajo B está lista y funcionando con un sistema LInux. Entonces usted puede formatear sus disco duro local y copiar los archivos desde el servidor.

No hace falta decirlo, esto es bastante más complicado de realizar que desde un diskette o CD Linux. Sin embargo, el proceso puede ser completamente automatizado y es adecuado para grandes redes con muchas estaciones de trabajo que se deben reconfigurar a menudo.

Otra curva del mismo tipo es olvidarnos completamente de los discos duros locales de las estaciones de trabajo B1, B2, B3 … y hacerles arrancar cada vez desde la red. Los archivos de los usuarios se almacenan en el servidor de archivos NFS central.


Lecturas posteriores

Otro programa usado por muchos administradores de clusters científicos es dolly. He oído mucho y bueno de él, pero aún no lo he probado.

Al lanzar desde una red, mire etherbootPXE


PS. ¿querría alguien traducir este artículo? Lo escribí en el espíritu de la licencia de software GPL, esto es, usted es libre (y de hecho le animo) de copiarlo, enviarlo y traducirlo — pero, por favor, POR FAVOR, ¡avíseme por email! Quiero tener un seguimiento de las traducciones — es bueno para el curriculim 🙂

Autor:Alan Ward
Traducción al español por José Gregorio Del Sol Cobos
el día 19 de Mayo 2003,
para La Gaceta de Linux

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.