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 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
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))
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