Clonado de un sistema linux

Solapas principales

Introducción


En la siguiente guía se mostrara un método de copiado que permita tener un sistema arrancable fiel a la copia,o sea un clon.
El destino puede ser otra partición en el mismo disco
O bien pude copiarse en otro disco duro dentro de la misma pc y asi migrar el sistema a uno nuevo o de mayor capacidad.
También copiaremos en forma remota hacia otra pc sin un sistema operativo instalado.
Finalmente una combinación de ambos procedimientos permitirá otras variantes de copia hacia diversos destinos.

Metodo


Existen distintos métodos para copiar un sistema así como herramientas específicas para ello.
En esta guía usaremos rsync para copiar y las aplicaciones y procedimientos que cualquier sistema linux trae.

Nota:!La manipulacion de directorios,las copias y modificaciones a los mismos, pueden ocacionar perdida de datos
es conveniente y recomendable antes de iniciar estas tareas tener una copia a resguardo en algun soporte distinto de los que se va a manipular a continuación !!!!!

Copiar hacia otro disco duro


Con linux debian instalado en PC1 (origen) en un disco que llamaremos arbitrariamente sdb, particionado del siguiente modo


sdb                                                                    
├─sdb1 ext3             /          
├─sdb2 ext3             /home      
├─sdb3 swap            [SWAP]     

 

Podemos ver como esta montado el sistema de directorios con :

 

 df -h
S.ficheros     Tamaño Usados  Disp Uso% Montado en
udev             490M      0  490M   0% /dev
tmpfs            100M   3,5M   97M   4% /run
/dev/sdb1         11G   7,6G  2,8G  73% /
tmpfs            498M      0  498M   0% /dev/shm
tmpfs            5,0M   4,0K  5,0M   1% /run/lock
tmpfs            498M      0  498M   0% /sys/fs/cgroup
/dev/sdb2         28G    12G   15G  45% /home
tmpfs            100M   4,0K  100M   1% /run/user/1000

Vemos que el sitema tiene una particion dedicada al directorio raiz / y otra para /home
en el caso de tener una unica particion para todo el sistema incluido /home, hay que tenerlo en cuenta a la hora de hacer una copia mediante rsync.

El sistema se copiara desde sdb(origen) hacia el disco sda (destino)que se encuentra tambien instalado en PC1
Una vez ejecutados todos los pasos se podra iniciar debian desde sda(destino), teniendo un clon del original.

.

Preparacion


El primer paso es preparar el disco sda (destino) con las particiones necesarias y formatearlas

Necesitaremos dos particiones


sda                                                                    
├─sda1 ext3   
│                               
├─sda2 ext3   

Nota; Salvo se indique lo contrario el simbolo '/' corresponde al directorio raiz del sistema y su contenido

Destinaremos sda1 para / y sda2 para /home

Si solo vamos a usar este disco crearamos una particion swap

Terminado el proceso de particionado,formateado y antes de continuar es conveniente tener a mano cierta informacion

kernel actual (1)

$ uname -a 

Nuestros discos y particiones:(2)

# fdisk -l  

UUID (3)

# blkid 

O tambien

 lsblk -no NAME,UUID  /dev/sda
sda    
├─sda1 495ab113-7639-471a-b989-88cbad95528d
├─sda2 0119eed3-3211-4575-8c72-85ff8bd39d1e
├─sda3 
└─sda5 914b081d-c893-4e80-ac79-d54ae9e78a6e

Toda esta información,sera útil y necesaria en los siguientes pasos

.

Crear los puntos de montaje


En el siguiente paso creamos los puntos de montaje en el sistema origen y montamos las particiones creadas en sda

# mkdir /media/rootcopia
# mkdir /media/homecopia 

Nota: Los puntos de montaje y nombre de los directorios son arbitrarios (4) !

Una vez creados,montamos las particiones

# mount   /dev/sda1  /media/rootcopia
# mount   /dev/sda2   /media/homecopia 

Una vez montadas nos disponemos a copiar el sistema mediante rsync

Con las opciones -aAX, los datos son transferidos en modo archivo, asegurándose que los enlaces simbólicos, dispositivos, permisos y atributos de propiedad,tiempos de modificación, ACLs y atributos extendidos son preservados.

La opción --exclude hará que aquellos ficheros que coincidan con los patrones dados sean excluidos.
Los contenidos de /dev, /proc, /sys, /tmp y /run se excluyeron porque son inicializados al cargar el sistema (mientras que las carpetas en si mismas no son creadas),mientras que /lost+found es específico del sistema de archivos.

Notese que /home ha sido excluido por encontrarse en otra partición y se copiara en el siguiente paso

Nota:(4) Atencion, si el directorio donde se montan las particiones es distinto al del ejemplo (/media),hay que excluirlos en el copiado para evitar un bucle infinito.
En el ejemplo se ha excluido /media y con eso es suficiente .

 

Copiando

 


El primer paso es copiar el contenido de / cuyo destino es /media/rootcopia

Ejecutamos dede un terminal y como root

rsync -avxHAX --numeric-ids --exclude=/dev --exclude=/proc --exclude=/sys --exclude=/tmp --exclude=/run --exclude=/mnt --exclude=/media --exclude=/lost+found --exclude=/home   /   /media/rootcopia

Nota: rsync puede incluir la opcion -n (--dry-run) la cual permite simular el proceso sin efectuarlo,quiza sea una buena medida hacer una prueba previa incluyendo esta opción para controlar errores

Notese que /home ha sido exluido por encontrarse en otra particion y sera copiado a continuacion

Procedemos a copiar /home cuyo destino es /media/homecopia

rsync  -av --exclude=.thumbnails/* --exclude=.cache/midori/* --exclude=.local/share/Trash/* --exclude=.cache/mozilla/* --exclude=.swp/* --exclude=varcopia/* --exclude=.gvfs   /home/*  /media/homecopia

Nota: Las exclusiones indicadas en la copia de /home pueden ser obviadas si se quiere una copia exacta, excepto quizá --exclude=.gvfs

Una vez terminada la copia, podemos controlar que el destino contenga lo que esperamos

cd /media/copiaroot
ls 
cd /
ls

Referencia:

exdebian.org/wiki/rsync-ssh-como-transporte-y-autenticación-mediante-claves-sin-frase

Ultimos pasos


Procedemos a crear dentro de /media/rootcopia los subdirectorios proc,dev,sys

# mkdir /media/rootcopia/proc
# mkdir /media/rootcopia/dev
# mkdir /media/rootcopia/sys

Los montamos del siguiente modo :

# mount -o bind  /dev   /media/rootcopia/dev/
# mount -t sysfs  none  /media/rootcopia/sys
# mount -t proc   none  /media/rootcopia/proc

Finalmente ejecutamos

# chroot      /media/rootcopia

Si diera algun mensaje de error ,volvemos a montar con el comando

# mount -o remount,exec  /media/rootcopia

Ver referencia chroot
Guia sencilla sobre chroot

Ya dentro de chroot efectuaremos los ultimos pasos

En primer lugar adecuar /fstab para que refleje las particiones que seran montadas durantel el booteo
El metodo mas seguro para definir las particiones es usando las UUID (3)

Nota: Un paso conveniente por seguridad es guardar una copia de /fstab antes de modificarlo como referencia

# cp /media/rootcopia/etc/fstab  /media/rootcopia/etc/fstab.copia

Editamos con nano

Nota: Estamos dentro del chroot,por lo tanto se esta editando /etc/fstab del sistema copiado!!

# nano /etc/fstab 

Adecuamos las UUID de las particiones donde montan en sda / y /home (y eventualmente swap) comentando el resto

Ejemplo:

# /etc/fstab: static file system information.
#
# Use 'vol_id --uuid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#                
proc            /proc           proc    defaults        0       0

UUID=4427f33b-226a-4449-b88e-71106c7f14e9 /               ext3    errors=remount-ro 0       1

UUID=4a278842-b6e7-4335-bcaa-954117b16a14 /home           ext3    defaults        0       2

UUID=cdd5ee4c-91b6-4f27-ae59-9d08a9659d93 none            swap    sw              0       0

Adecuar las UUID a las que correspondan (3)

Finalmente salimos del editor guardando

# Ctrl + x  , contesamos  s (sí)

Grub


Si nuestro objetivo es tener una copia en un disco booteable con su propio grub, habra que indicarle que inscriba el MBR de sda

grub-install  /dev/sda

Y procedemos a actualizar grub en /sda

update-grub

Nota: Se debe indicar disco y no disco/particion, ejemplo : /dev/sda, /dev/sdb !!!

De este modo, y si configuramos en el BIOS SETTING el disco (sda)como disco primario (de booteo) al iniciar la pc sera este grub el que cargue
Tambien actualizando grub en sdb os-prober detectara el nuevo sistema y lo incluira
Otra opcion es crear una entrada en /etc/grub.d/40_custom indicando el nuevo sistema

Initramfs


Nota: Es probable que dado que se copia en un distinto hardware dara error al iniciar, pues no cargara los drivers adecuados entonces se debera adaptar la initramfs acorde al nuevo hardware

Dado que ya tenemos instalada linux-image, habra que reconfigurar ejecutando:

# dpkg-reconfigure linux-image-(especificar el kernel version que anotamos al inicio (1))
 

Ver kernel-handbook.alioth.debian.org

Salimos de charoot

#exit

Desmontamos proc,sys,dev

 
umount  /media/rootcopia/sys
umount  /media/rootcopia/proc
umount  /media/rootcopia/dev

Si todo ha salido bien, y reiniciando, grub(en sdb) debera mostrar el nuevo sistema ( en sda)y se podra iniciar con el

Y si queremos usar solo el nuevo disco hacia donde se ha clonado, poniéndolo como disco primario iniciara y mostrara el propio grub con el nuevo sistema


Copiar hacia otra pc sin un sistema operativo instalado


En este escenario,PC2(destino) no tiene un sistema instalado,necesitamos poder crear particiones y formatearlas
necesitamos tambien poder acceder de forma remota para tranferir las copias y ademas hacer chroot

Preparando el disco


Iniciamos con un live cd,que contara con las herramientas y aplicaciones necesarias

El primer paso es preparar el disco sda (destino),con las particiones necesarias y formatearlas

Necesitaremos tres particiones


sda                                                                    
├─sda1 ext3   
│                               
├─sda2 ext3 
|
|_sda3 swap 

Nota; Salvo se indique lo contrario el simbolo '/' corresponde al directorio raiz del sistema y su contenido

Destinaremossda1para /,sda2 para /home, y sda3para swap

Crear los puntos de montaje


El siguiente paso es crear dos puntos de montaje en el sistema live y montar las particiones creadas en sda

# mkdir /media/rootcopia
# mkdir /media/homecopia 

Nota: Los puntos de montaje y nombre de los directorios son arbitrarios (4) !

Montamos las nuevas particiones

# mount   /dev/sda1  /media/rootcopia
# mount   /dev/sda2   /media/homecopia 

A continuacion vamos a iniciar el servidor ssh y permitir el acceso a root, como usuario remoto, que por defecto esta denegado en sshd

Primero debemos establecer una contraseña de root en el sistema live (si hiciera falta)

A continuacion editamos /etc/ssh/sshd_config y configuramos para permitir el acceso a root

PermitRootLogin  yes 

Iniciar/reiniciar sshd si hiciera falta

systemctl start sshd

Comprobamos que desde PC1(origen)tenemos acceso a PC2(destino)por ejemplo ejecutando ping -c1 ip.PC2

Comprobamos tener acceso al servidor ssh como usuario root

ssh  root@ip.PC2 

 

Copiando

 


Procedemos a copiar / y a continuación /home desde PC1 hacia PC2

Nota: Realizaremos la copia sobre ssh,es un modo cómodo y seguro de tranferir datos remotamente

Copiamos primero / ejecutando:

rsync -avxHAX --numeric-ids --exclude=/dev --exclude=/proc --exclude=/sys --exclude=/tmp --exclude=/run --exclude=/mnt --exclude=/media --exclude=/lost+found --exclude=/home  -e ssh  /  root@ip_pc2(destino):/media/rootcopia

Copiamos a continuación/home

rsync  -av --exclude=.thumbnails/* --exclude=.cache/midori/* --exclude=.local/share/Trash/* --exclude=.cache/mozilla/* --exclude=.swp/* --exclude=varcopia/* --exclude=.gvfs  -e ssh /home/*  root@ip_pc2(destino):/media/homecopia

Una vez finalizada las copias el procedimiento que resta es similar al indicado en el primer caso

Ultimos pasos


Ya tenemos montadas las particiones en /media/rootcopia y /media/homecopia

Procedemos a crear dentro de /media/rootcopialos subdirectorios proc,dev,sys

# mkdir /media/rootcopia/proc
# mkdir /media/rootcopia/dev
# mkdir /media/rootcopia/sys

Los montamos del siguiente modo :

# mount -o bind  /dev   /media/rootcopia/dev/
# mount -t sysfs  none  /media/rootcopia/sys
# mount -t proc   none  /media/rootcopia/proc

Finalmente ejecutamos:

# chroot      /media/rootcopia

Si diera algun mensaje de error ,volvemos a montar con el comando

# mount -o remount,exec  /media/rootcopia

Ya dentro de chroot efectuaremos los ultimos pasos,en primer lugar adecuar /fstab, para que refleje los punto de montajes correspondiente al nuevo disco/particiones

El metodo mas confiable es usar las UUID ;ejecutamos

#blkid

Nota: Un paso conveniente y por seguridad es guardar una copia de /fstab como referencia

# cp /media/rootcopia/etc/fstab  /media/rootcopia/etc/fstab.copia

Editamos con nano

# nano /etc/fstab 

Adecuamos las UUID de las particiones donde montan en sda,/,/home yswap

Finalmente salimos del editor guardando

# Ctrl + x  , contestamos  s (sí)

Siendo un nuevo sistema, indicaremos que grub inscriba los primeros datos en el MBR del disco

# grub-install  /deb/sda  

 

# upate-grub

Initramfs


Nota: Es probable que dado que se copia en un distinto hardware dara error al iniciar el sistema pues no cargara los drivers adecuados entonces se debera adaptar la initramfs acorde al nuevo hardware

Dado que ya tenemos instalada linux-image, habra que reconfigurar ejecutando:

# dpkg-reconfigure linux-image-(especificar el kernel version que anotamos al inicio (1))

Salimos de chroot

#exit

Desmontamos proc,sys,dev

 
umount  /media/rootcopia/sys
umount  /media/rootcopia/proc
umount  /media/rootcopia/dev

Finalmente salimos del linux live,reiniciando desde el disco duro con el sistema recien instalado.
Si todo a funcionado bien grub mostrara en las opciones el nuevo sistema

Ultimas consideraciones


Estos procedimientos no incluyen algunos detalles para adecuar los sistemas luego de instalados,como configurar interfaces de red, wifi ,el hostname, si hicieran falta, por mencionar los habituales.

Los dos ejemplos no agotan las posibilidades,adaptando cada procedimiento se puede llegar a otras opciones de copia

En el segundo caso la copia podria realizarse remotamente hacia otra pc con un sistema linux ya instalado,siendo innecesario el uso de un live cd

Tambien existe la posibilidad de hacer una copia de sistema a un soporte removible, para luego trasladarlo y copiarlo en otra pc

Si el objetivo de la copia es mantener un backup permanente, se puede configurar un sencillo script con los comandos rsync necesarios y automatizarlo con crontab
Hay que tener en cuenta que rsync permite copias diferenciales o incrementales, de tal modo que aunque la primer copia puede tardar bastante
pues debe tranferir todo,las siguientes solo copiaran el incremento o la diferencia,acortandose notoriamente los tiempos de copiado.

Nota final

Si va a ejecutar estos procedimiento por primera vez y sobre todo si carece de experiencia con los comandos y acciones indicadas tomese el tiempo de leer antes de ejecutar
Las guias de referencia estan para ampliar con detalles las ordenes que se ejecutan y sus alternativas,trate de entender que va a hacer y por qué
Es buena idea anotar los pasos que se van ejecutando,puede ser una referencia invaluable a la hora de corregir un error o saber cuando algo fallo y su posible causa
o consultar en un foro