Particiones: Copiando una instalación GNU/Linux a otro disco
Hoy trabajaremos con particiones, aprenderemos a copiar una instalación de una distribución GNU/Linux de un disco o partición a otro, manteniendo las aplicaciones y el arranque con grub.
Motivaciones: copiando entre particiones o discos
Esta mini guía surgió como necesidad hace dos días, ya que agregué un disco nuevo a mi computadora, para reemplazar uno anterior… justo el disco en el que tenía instalado mi distro de GNU/Linux.
Particularmente esta guía me ha servido para ArchLinux, pero con pocos o ningún cambio debe ser útil también para otras distribuciones.
La idea fue mover el directorio de instalación, a otra partición Linux en otro disco, y reescribir el GRUB para que el sistema pueda seguir iniciando sin inconvenientes.
La tarea funcionó a la perfección, de hecho, esto lo estoy escribiendo desde mi nuevo/viejo sistema operativo 😀
Moviendo los datos entre particiones
Manos a la obra. Lo primero que tenemos que hacer, es identificar las particiones Linux de origen (la actual, donde tenemos instalado el sistema) y destino (donde vamos a mover la instalación).
Para ello podemos utilizar comandos como:
parted -l
Que nos mostrará los discos y particiones disponibles, y por el nombre/número o tamaño podemos saber cuál será la de origen, y la de destino.
Para el caso, supongamos que mi partición actual de sistema es /dev/sdXY, y la partición donde vamos a mover el sistema es /dev/sdWZ.
Lo primero que tenemos que hacer, es bootear el equipo con un live-cd/dvd/usb para poder copiar la información sin tener en uso las particiones ni el sistema.
Una vez que estamos en la distro live (en mi caso utilicé un Linux Mint LMDE, pero va cualquier distro live), vamos a montar las dos particiones, tanto la de origen como la de destino.
Supongamos que creamos los puntos de montaje para no confundirnos:
mkdir /mnt/origen mkdir /mnt/destino parted -l # para ver y confirmar las particiones, CUIDADO en este paso. mount -t ext4 /dev/sdXY /mnt/origen mount -t ext4 /dev/sdWZ /mnt/destino
Copiamos el contenido de todo el directorio raiz de origen a destino, la nueva ubicación:
sudo cp -afv /mnt/origen/* /mnt/destino
No olvidar el «*» en la ruta de origen para copiar todo su interior.
Aquí las opciones de «cp» tienen el siguiente significado (man cp
):
- -a: idem a
-dR --preserve=all
, es decir, no desreferencia los enlaces simbólicos (-d
), realiza una copia recursiva (-R
), y preserva todos los atributos de los objetos originales, a saber, permisos/modo, dueño, estampas de tiempo, enlaces, y atributos xattr. - -f: fuerza la escritura en caso de que ocurra algún error.
- -v: modo explicativo, da más información sobre la copia.
Este comando copia todo el contenido, incluido aquel que es virtual… por lo que quizás, una buena opción es utilizar algo similar a esto:
rsync -aAXv /mnt/origen/* /mnt/destino –exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/var/tmp/*,/run/*,/mnt/*,/media/*,/lost+found}
Otra opción usando la genial herramienta de rsync es:
rsync -avxHAX --progress /mnt/origen /mnt/destino
Aquí las opciones significan (man rsync
):
- -a: todos los archivos con sus atributos.
- -v: modo explicativo, da más información.
- -x: no copia contenido de origen en el caso de que esté almacenado en otro sistema de archivos (por ejemplo, un directorio que es punto de montaje de otro disco).
- -H: Mantiene los enlaces duros (hard links)
- -A: mantiene las ACL’s y permisos.
- -X: mantiene los atributos extendidos que no están incluidos en «-a»
- –progress: muestra el progreso de la copia.
A este punto, ya tenemos toda la información de la instalación del sistema en nuestra nueva partición, por lo que podemos desmontar el disco o partición vieja:
umount /mnt/origen
Actualizando el /etc/fstab en Linux
Lo primero que tenemos que hacer es verificar que en el archivo /etc/fstab tengamos configurado correctamente el UUID del nuevo disco o partición donde se montará nuestro root filesystem (o el nombre del dispositivo).
Para ello, chequeamos los UUID… si vemos, por ejemplo, en mi fstab tengo este contenido:
UUID=7e66e8ac-1f1a-4b5f-ace2-58c2b3b08bac / ext4 rw,noatime,data=ordered 0 1
Y la salida del comando blkid, que permite asociar los dispositivos con los UUID, me muestra esto (el nombre del dispositivo está modificado para ser consistente con el ejemplo):
/dev/sdWZ: UUID=»61fa8590-3acb-498b-982e-1b6a7b1ee9a7″ TYPE=»ext4″ PARTUUID=»000a5999-02″
Este es un ejemplo de la salida de mi «sudo blkid
«:
Conclusión, debemos colocar el UUID devuelto por el segundo comando en el fstab, reemplazando al anterior. Quedaría así:
UUID=61fa8590-3acb-498b-982e-1b6a7b1ee9a7 / ext4 rw,noatime,data=ordered 0 1
Otra forma de ver el UUID es utilizando el comando «ls
» dentro del directorio /dev
:
ls -l /dev/disk/by-uuid/
Instalando el GRUB en el disco nuevo
Para ello haremos uso del chroot, una herramienta que nos permite «cambiar» el root directory por uno cualquiera… en nuestro caso, el punto de montaje de nuestra «nueva» instalación: /mnt/destino.
Primero, montamos en nuestro «directorio raíz» /mnt/destino, los directorios virtuales necesarios… en la jerga, «bindeamos» los directorios virtuales del sistema live, a nuestro «root directory» montado:
sudo su cd /mnt/destino
Ahora vamos a montar los directorios virtuales /proc, /sys y /dev del sistema en ejecución, para poder utilizar nuestro sistema nuevo:
mount -t proc proc proc/ mount --rbind /sys sys/ mount --rbind /dev dev/
Y por último, realizamos el chroot para acceder a la instalación duplicada:
chroot /mnt/destino /bin/bash
Una vez adentro, vamos a proceder a instalar el grub en el MBR del disco, para poder utilizar nuestro sistema:
grub-install --target=i386-pc --recheck --debug --boot-directory=/boot /dev/sdW grub-mkconfig -o /boot/grub/grub.cfg
Nótese que he utilizado el dispositivo /dev/sdW en la primera de estas dos líneas. Ese es el nombre del dispositivo, SIN el número de partición, ya que debemos instalarlo en el disco para que sea posible bootear. Si, por caso, el dispositivo hubiera sido /dev/sda2, la partición donde está la nueva instalación, en este comando del grub deberíamos haber especificado /dev/sda solamente.
Luego de realizado este paso, simplemente salimos del entorno chroot, desmontamos la partición y apagamos el equipo.
exit sudo umount /mnt/sys sudo umount /mnt/proc sudo umount /mnt/dev/pts sudo umount /mnt/dev sudo sync sudo umount /mnt
Conclusiones
Con el equipo apagado, extraemos el medio live de la distro que utilizamos, y por supuesto, desconectamos el disco «viejo». Al reiniciar el ordenador deberíamos poder arrancar el grub y sin ningún inconveniente, acceder a nuestro sistema operativo, el mismo que teníamos corriendo en el otro ordenador 🙂
En otros artículos hemos hablado ya de particiones y discos… entre los que pueden ser de ayuda:
- cfdisk: particionando el disco por línea de comandos
- Esquema de particionado de disco para GNU/Linux
- Particionado, puntos de montaje y filesystems
- Mount: montando sistemas de archivos
- Virtual Filesystem, una gran ventaja de Linux
Espero les sea útil!
Hasta la próxima!
Fuentes:
https://www.rdeeson.com/weblog/157/moving-arch-linux-to-a-new-ssd-with-rsync