Migración cutre de una instalación a un disco duro nuevo

Buenas, hace poco (hoy) recibí mi flamante nuevo disco duro para el portátil, como paso de reinstalarme todo y me encuentro muy agusto con su actual funcionamiento me decidí a realizar una "migración cutre" de todo el disco al nuevo... puede parecer una tontería (y lo es) pero hay un par de cosas a tener en cuenta...

Preparamos el invento
Para realizar la migración sin tener que parar mi sistema pensé lo siguiente: conecto el disco nuevo a una caja externa para discos de 2.5, y copio de mi disco viejo al nuevo. Enchufamos el disco mediante una de estas cajas y lo tenemos en /dev/sda a nuestra disposición, así que... empezamos

Origen y destino
El particionado del sistema origen es el siguiente:

  • Partición primaria 1: hda1 montado como /
  • Partición extendida:
    • Partición lógica 1: hda5 montado como /home
    • Partición lógica 2: hda6 usado como swap

El nuevo disco necesitaba un particionado distinto porque los tamaños de las particiones eran otros, lo dejé así:

  • Partición primaria 1: hda1 montado como /
  • Partición primaria 2: hda2 para experimentar con otros S.O. Eye-wink
  • Partición extendida:
    • Partición lógica 1: hda5 montado como /home
    • Partición lógica 2: hda6 usado como swap

Como véis este particionado no es casual, lo hice para que las nuevas particiones y puntos de montaje fuesen iguales que en antiguo HDD, con esto nos ahorramos modificar el archivo /etc/fstab con las nuevas rutas. Es más cómodo.

Poco a poco
Una vez particionado podremos pensar en copiar todo a cholón pero esto nos plantea los sisguiente problemas:

  1. Como la caja esta montada en nuestro sistema (para copiar los ficheros) hay que dejar fuera del proceso de copia el punto de montaje de la caja.
  2. Hay que respetar los otros sistemas de ficheros montados. En mi caso, /home está en otro sistema de ficheros, si lo copio tal cual no será correcto pues tengo que copiarlo en sda5 y no en sda1.
  3. Existen directorios que no se deben copiar: /proc y /sys con ejemplos de ello

Como los directorios en la raíz son pocos decidí finalmente copiarlos uno a uno. Primero creamos los directorios que no vamos a copiar pero que son puntos de montaje:
:new_hdd# mkdir proc
:new_hdd# mkdir sys
:new_hdd# mkdir home
:new_hdd# mkdir mnt

El /mnt lo creamos porque supongo que el disco nuevo lo tendremos montado ahí así que no podemos copiarlo recursivamente...

Y ahora copiamos uno a uno los directorios de toda la vida, emplearemos rsync para que respete enlaces, fechas, etc.:
:new_hdd# rsync -a /bin ./
:new_hdd# rsync -a /boot ./
:new_hdd# rsync -a /etc ./
:new_hdd# rsync -a /media ./
:new_hdd# rsync -a /root ./
:new_hdd# rsync -a /tmp ./
:new_hdd# rsync -a /lib ./
:new_hdd# rsync -a /sbin ./
:new_hdd# rsync -a /usr ./
:new_hdd# rsync -a /initrd ./
:new_hdd# rsync -a /opt ./
:new_hdd# rsync -a /var ./

En fin... todos los que tengáis en la raíz que no sean puntos de montaje (estos tendréis que haberlos creado en el paso anterior... o cuando sea, pero los creáis).
Ahora viene un paso bastante criticable, pero que a mi me ha funcionado a las mil maravillas: resulta que /dev también se puebla al inicio, pero hay nodos que tuve que crear yo a mano para ciertas cosas... ni corto ni perezoso he hecho:
:new_hdd# rsync -a /dev ./

No he tenido ningún mensaje de error y los nodos se me han creado muy bien y en el sistema migrado no he tenido errores y todo me va muy bien Smiling

Pues bien, una vez migrado la raíz, desmontamos sda1 y montamos sda5, ahora le toca el turno a los homes:
:new_hdd# rsync -a /home/* ./

Y una vez terminado esto desmontamos sda5 y volvemos a montar sda1, sólo nos queda instalar el grub:
:new_hdd# grub-install --recheck --no-floppy --root-direcotory=/mnt/new_hdd /dev/sda

Ahora apagamos el sistema, sacamos el disco viejuno y metemos el nuevo. Reiniciamos y ¡tachán!... no arranca... Sad
Ehhh!! no pasa nada! esta receta tiene un final feliz: arrancamos con una liveCD como por ejemplo el CD de Ubuntu Dapper y en un terminal volvemos a montar hda1 (ahora es hda1 que ya está dentro del portátil!) y volvemos a ejecutar grub-install indicándole el nuevo dispositivo (ya sabéis, /dev/hda), de la misma forma que antes...

Si ahora reiniciáis... debería arrancar... y así lo espero porque esta receta termina aquí.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Ricki

cp -ax

Añadiendo la opción x a cp saltas los directorios que no formen parte del sistema de ficheros origen.

A tu pregunta de si hay diferencia entre rsync -a y cp -a, he estado mirando sus manuales y la única diferencia que he encontrado es la opción -D que incluye rsync -a, y que copia los ficheros de dispositivos y especiales como tales.

Imagen de fsancho

Mas sencillo

Yo lo hago mas directo con un live-CD

Quito el viejo y pongo el nuevo.

Engancho el viejo mediante una caja externa USB

Arranco con una distro-live

Monto ambos discos y procedo a copiar todo de uno a otro con "cp -a" luego, chroot mediante, instalo grub y marchando.

Imagen de int-0

Atención, pregunta:

cp -a copia igual y de la misma manera que rsync -a?

De todas formas, al arrancar el live tienes que parar el sistema del disco viejo, yo sólo lo paro cuando cambio los discos... está menos tiempo off-line Sticking out tongue
------------------------------------
init=/bin/bash to conquer the world!

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

Imagen de fsancho

No debe haber mucha

No debe haber mucha diferencia puesto que en mi portátil hice la migración de esta manera y todo me ha funcionado a las mil maravillas.