Migrando un disco duro en GNU/Linux

Maikel Llamaret Heredia Leído 129 veces Tutoriales GNU Linux Disco duro

Saludos a todos los lectores de nuestro Blog SWL-X. Hoy en la sección de tutoriales quiero compartir este artículo que publiqué hace 6 años cuando este Blog estaba en otra plataforma. El contenido en su momento fue muy útil, y como nunca llegué a publicarlo en el actual Blog, creo justo retomarlo en este momento. Hoy estaremos viendo como migrar todos los datos desde un disco duro hacia otro, trabajo que podría resultar útil si por algún motivo necesitamos reemplazar el actual disco duro de nuestro ordenador por otro (de igual o diferente capacidad).

Hace unos días, en una visita casual a casa de un amigo (que coincidentemente migró a Linux hace algunos meses luego de mi persistencia), este me mostró muy alegre un nuevo Disco Duro que le habían regalado (un HDD de 500 Gb que aunque a muchos pueda parecerle un dispositivo de poca capacidad, acá en la Cuba Jurásica sigue siendo un gran paso hacia el gran almacenamiento de datos) y que necesitaba reemplazar el ya obsoleto y medio fallido disco de 160 GB.

Su propuesta en si era quitar el viejo disco y en su lugar colocar el de 500 GB, luego instalar Debian, que era la distro que yo le había instalado en el disco viejo, y emplear un rato en restablecer toda su configuración. Mientras esto ocurría, un primo de mi amigo aguardaba la culminación de esta labor para llevarse el disco de 80 GB que a su vez reemplazaría uno de 40 GB en un ordenador mucho más vetusto.

El detalle de todo esto es que yo ni siquiera andaba con un disco de instalación de Debian, y menos con los repositorios a mano. Así que la idea de instalar sistema y aplicaciones no estaba a nuestro alcance, a menos que yo fuera a mi casa a buscar lo necesario, pero trasladarme de una punta a otra de la ciudad de Santiago de Cuba no iba a ser una alternativa para mi, en una ciudad donde el transporte oficial (motocicletas particulares) ha duplicado su tarifa en este nuevo año (la gracia me iba a salir en no menos de 40 pesos). Ahí se me encendió la chispa: a clonar el disco. Se que esto de clonar el disco hubiera sido lo primero que se le hubiera ocurrido a muchos de ustedes, pero a mi, cuasianalfabeto en estos quehaceres, me pareció toda una repentina alternativa enviada directamente por los Dioses del Open Olimpus.

Luego de contada la necesaria introducción, vamos a los aspectos técnicos del caso en cuestión. Inicialmente tenemos un Disco Duro de 80 GB con el siguiente sistema de particionado:

/dev/sda1       /
/dev/sda5       swap
/dev/sda6       /home

Y el nuevo Disco Duro de 500 GB que particionaremos de la siguiente manera:

/dev/sdb1       /
/dev/sdb2      swap
/dev/sdb3      /home

Muchos de seguro han notado que en el caso del primer Disco Duro hay un salto de sda1 a sda5, esto se debe a que a la hora de definir las particiones, hay una partición primaria booteable que es sda1, y luego una partición extendida que se divide en dos: sda5 y sda6. Además, en algún momento creo haber tenido que eliminar una partición donde antes mi amigo albergaba al desterrado Windows 7.

El disco duro de 500 Gb lo particionamos de manera que los números de las particiones se encuentren en forma consecutiva. Este Disco se nombra /dev/sdb porque al instalarlo en el puerto SATA, está compartiendo simultáneamente el sistema con el disco preexistente, /dev/sda.
Formateando las particiones

Para crear las particiones podemos usar alguna herramienta visual como gparted, o alguna aplicación desde consola como cfdisk. Recuerden que en este paso, estamos desde el sistema operativo en el primer DiscoDuro, el de 80 GB. Es decir, desde este, creamos las tres particiones del nuevo Disco Duro. Una vez creadas las particiones, hay que formatearlas:

mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb3
mkswap /dev/sdb2

Lo que acabamos de hacer es formatear /dev/sdb1 y /dev/sdb2 en formato ext4 y /dev/sdb2 como SWAP.

La orden mkfs.ext4 es similar a mkfs -t ext4. Debemos tomar en cuenta que a la hora de reiniciar en el nuevo disco duro, hay que indicarle al sistema que tiene una nueva partición swap (partición de intercambio):

swapon /dev/sda2

Usamos sda2 y no sdb2, porque al terminar, quitaremos el disco viejo.
Clonando particiones

Ya vamos cayendo en el pollo del arroz con pollo. No hay una receta definitiva para clonar una partición. En nuestro caso, tenemos que hacer una copia exacta del contenido de /home, para esto haremos lo siguiente (como root):

cd /media
mkdir sdb3
mmount -t ext4/dev/sdb3 /media/sdb3
rsync -a /home/miamigo media/sdb3

Tranquilos, les explico:

Dentro de /media hemos creado un directorio con nombre sdb3 (que deberá coincidir con el nombre
de la partición del nuevo disco), para que al montarla no cree confusiones. Luego vamos a emplear el comando rsync para sincronizar los archivos y carpetas de /home dentro de /media/sdb3, ya que la partición sdb3 va a ser /home. El flag -a nos va a servir para mantener los permisos, el propietario, la fecha y los directorios.
Inteligentemente hemos utilizado /home/miamigo y no /home/miamigo/, porque si hubiera puesto la barra al final de miamigo, me copiaría exclusivamente los archivos y carpetas dentro de /home/miamigo. Lo que hicimos es equivalente a poner:

rsync -a /home/ /media/sdb3

Como en el caso de mi amigo, solo tiene un usuario en home, da lo mismo poner una u otra línea de comandos.

Llegó el momento de clonar la partición raíz /, que, como es obvio. es un momento crítico y delicado, ya que algún fallo puede dejarnos la partición sin booteo, y por tanto un disco duro sin sistema.

Un consejo antes de el siguiente paso, es hacer algo de limpieza en nuestra partición raiz con tal de ahorrar espacio y disminuir el tránsito de datos innecesarios de un disco duro a otro. Es bueno vaciar previamente la papelera de reciclaje (incluso antes de clonar home), eliminar los paquetes que no están siendo utilizados y paquetes específicos que no necesitemos:

dpkg -l | grep ^rc
dpkg --purge paquete

También podemos asegurarnos de eliminar los paquetes del repositorio local: los que nos hemos bajado en cada actualización o instalación desde los repositorios, y se han almacenado en cache:

apt-get clean

Al hacer los pasos anteriores de seguro se darán cuenta que pueden liberar algunos GB de espacio. Bueno, vamos a clonar de una buena vez nuestra raiz /.

En el caso de la partición raíz lo recomendable es copiar bit a bit los datos. Tardará menos que home porque evidentemente es menor cúmulo de información y haciéndolo bit a bit la tendencia a fallos es casi nula y no existerán errores con permisos especiales.
La línea de comandos en este caso es:

dd if =/dev/sda1 of =/dev/sdb1

En este caso no hemos tenido que montar nada. El tiempo para completar la operación será un poco mayor, pero valdrá la pena.
Preparando el reinicio

Al llegar a este punto, ya la partición /dev/sdb1 es un clon de la raiz del sistema instalado en nuestro viejo disco. Llegó el punto de asegurarnos que al retirar el disco de 80 GB, nuestro ordenador reconozco y bootee desde el disco de 500 GB. Es hora de tocar el conocido archivo fstab (el del disco de 500 que se encuentra en /media/sdb1/etc/fstab.

nano /media/sdb1/etc/fstab

Y nos saldrá algo similar a esto:

# /etc/fstab: static file system information.
#
# 

proc    /proc   proc    nodev,noexec,nosuid     0       0
#Entry for /dev/sda1 :
UUID=6b192eef-e188-4e07-94de-14c95e02de78       /       ext4    errors=remount-ro       0      $
#Entry for /dev/sda2 :
UUID=3bd60ec0-92f3-4ea6-a4d3-aaaf27dd8b8e       none    swap    sw      0       0
#Entry for /dev/sda3 :
UUID=3828f973-3b20-4019-9fe2-8296c755be31       /home   ext4    defaults        0       2

Ahora necesitamos cambiar las UUID antiguas (las que están en ese archivo fstab son pertenecientes al disco de 80 GB) por las UUID nuevas (pertenecientes al disco nuevo de 500 GB). Para ello, lo que hay que hacer es encontrar los dispositivos por su UUID, y eso se hace de varias maneras:

Una opción puede ser con el comando:

ls -l /dev/disk/by-uuid

Y también usando como root:

blkid

Ahora solo nos resta reemplazar los UUID del fstab por los correctos.
Garantizando el arranque. Instalando Grub2

El Debian Wheezy instalado en el viejo Disco Duro de mi amigo usa Grub2 como arranque de sistema, por lo que en el MBR (Master Boot Record ) del Disco Duro nuevo (el de 500 GB) tendremos que instalar un nuevo GRUB. Es cierto que los archivos de configuración ya están escritos en el directorio /boot, pero el MBR (el primer sector (“sector cero”) del disco duro.) está en blanco, por lo que tal como están las cosas, no sería booteable.

La configuración se guarda dentro de /boot/grub/grub.cfg, pero este archivo se crea por grub-mkconfig, por lo que no sería recomendable editarlo a mano. Lo mejor es, una vez montada la partición nueva (recuerden que la partición raiz recién clonada no está montada, dd clona sin montar la partición):

mount -t ext4 /dev/sdb1 /media/sdb1

Ahora nos toca cargar el GRUB2 en el MBR haciendo lo siguiente:

grub-install /dev/sdb

Y listo, así de sencillo, ya tenemos GRUB configurado en el MBR del Disco Duro de 500 GB.
Pasos finales

Ahora apagamos el ordenador, retiramos el Disco Duro de 80 Gb de mi amigo, se lo entregamos al primo (ver historia inicial), volvemos a encender el ordenador, cruzamos los dedos y…

¿Te atreves a probar?





Acerca del Autor
Maikel Llamaret HerediaMaikel Llamaret Heredia: Creador y actual Mantenedor del Proyecto SWL-X. Desarrollador y diseñador Web. Cofundador de Web & Media Integrated Solutions. Con más de 10 años de experiencia en la administración de sistemas GNU/Linux. Actualmente uno de los administradores de la Web del Grupo de Usuarios de Tecnologías Libres en Cuba.

Blog Comments powered by Disqus.

Entrada Anterior Siguiente Entrada