15 julio 2007

Cómo mover el sistema operativo de un disco a otro

(Actualizado 01/02/2008) Como artículo número 100 vamos a hacer uno útil. Puesto que últimamente he cambiado un par de discos duros, vamos a ver cómo cambiar el disco duro principal del ordenador y que quede todo como estaba, normalmente buscando tener más espacio con un disco nuevo. Será una aplicación y recopilación de algunas cosas ya comentadas, como aquel artículo de mover /home a una partición nueva y otros.

Primero que nada, ya enchufado y demás, tenemos que hacerle las particiones. Para ello usaremos el editor de particiones de Gnome lanzándolo desde la consola si la tenemos a mano (gparted) o desde "Sistema>Administración>Editor de particiones de Gnome" después de arrancar el sistema como siempre. Si no lo tenemos instalado (por defecto no lo está en Debian ni Ubuntu) lo instalamos desde el gestor de paquetes synaptic o en consola:

sudo apt-get install gparted
Claro, que si quieres usar el fdisk, nada lo impide.

Una vez iniciado, vemos las particiones que tenemos creadas en el disco en uso. Estarán con un candado por estar montadas. Seleccionamos el otro disco (el nuevo) en el desplegable de la derecha y hacemos las mismas particiones con el tamaño que queramos y con el mismo tipo que tenían aquellas. Si no lo recordamos, nos apuntamos los nombres de las particiones que hemos creado y a qué se destinan. Si no recordamos a qué se destinaban originalmente, lo miramos en /etc/fstab

Ahora, para evitar cualquier tipo de problema, cerramos sesión, salimos a una consola (control+alt+F1 mismo) y pasamos a la raiz y al modo monousuario escribiendo:
init 1
cd /
Podríamos hacer esto también usando un CD en vivo de ubuntu y puede incluso resultar más cómodo por no tener que pasar a monousuario, pero más lento por tener que arrancarlo.
Ahora tenemos que montar la primera partición que queramos copiar. Si sólo tenemos una, acabamos rápido.
mount /dev/sdb1 /mnt

Ahora copiamos desde la partición donde tenemos datos a la nueva partición que acabamos de montar.
cp -ax . /mnt

Con esto se copiarán todos los datos de la partición en la que estamos (en este caso, la de sistema porque estamos en /) y no de otras que tengamos montadas. Desmontamos con umount /mnt. Ahora deberemos repetir el proceso con cada una de las particiones que tengamos poniéndonos en su directorio raiz correspondiente (por ejemplo, /home, en su caso).
Puede ser algo engorroso, y además no hay ningún indicador de lo que le queda en las copias, pero funciona perfectamente.

Una vez copiados los datos, ya podemos volver al modo multiusuario con X.
init 5

El paso siguiente es hacer que el nuevo disco sea capaz de arrancar el sistema. Para ello el /etc/fstab debe incluir los identificadores correctos de las particiones, que no serán los mismos por ser un disco distinto y particiones nuevas, y deberemos instalar el cargador grub. También debemos indicarle el identificador correcto del disco a éste último. Todo ello es más fácil de lo que parece.

Primero cambiamos el /etc/fstab. Volvemos a montar la partición raiz en el mismo sitio que cuando hemos hecho la copia para tener acceso a este archivo, al que lógicamente accederemos como /mnt/etc/fstab. Cuidado con esto, no vayamos a omitir /mnt y tocar el del sistema que estamos usando. Editamos el archivo:
sudo gedit /mnt/etc/fstab

En otra consola sacaremos los identificadores de nuestras particiones. Escribimos la siguiente orden:
sudo vol_id /dev/sdb1

Donde /dev/sda1 es la partición sobre la que queremos conocer el identificador.
Lo haremos para cada una de las particiones que hemos creado antes de copiar. La linea de interés de todo lo que nos muestra es la que dice ID_FS_UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Los x son números hexadecimales (tienen números y algunas letras).
En lugar de usar la orden anterior con cada partición podemos ver todas a la vez con:
blkid

En el fstab que tenemos abierto cambiaremos los UUID por los que hemos sacado. Es recomendable añadir una linea que empiece por # (comentario) para cada partición donde indiquemos, como recordatorio, qué partición corresponde a ese identificador. Por ejemplo, #/dev/sda1. Hecho esto, guardamos. Ahora falta el grub.

Si tenemos el directorio /boot en la misma partición (si no, desmontamos y montamos la que corresponda) editamos el archivo /boot/grub/menu.lst.
sudo gedit /mnt/boot/grub/menu.lst

Nos vamos hacia el final y en los núcleos que usamos normalmente (serán los dos últimos bloques donde pone, como mínimo, las filas title, root, kernel, initrd) tendremos que sustituir el UUID por el identificador que corresponda a la partición raiz /. Volver a ver el /etc/fstab en caso de dudas. Ahora instalamos el cargador en el disco nuevo.Aquí lo describí.
sudo grub-install --root-directory=/mnt /dev/sdb

Con esto, ya podemos quitar el disco viejo y reiniciar el sistema con el nuevo.

Ahora que parece que todo está bien todavía hay un pequeño problema: Cuando actualicemos el núcleo, volverá a ponernos el UUID del disco anterior. Fácil de solucionar. Renombramos el archivo de configuración de grub para luego generar uno nuevo:
sudo mv /boot/grub/menu.lst /boot/grub/menu.lst.anterior
sudo update-grub

Con el update-grub se generará un nuevo archivo menu.lst que ya tendrá los UUID nuevos, y ya será así siempre.

Ahora es necesario hacer lo que indiqué al final de este artículo, que comento a continuación:
Hay que modificar:
sudo gedit /etc/initramfs-tools/conf.d/resume
y ponemos
RESUME=UUID=chorrodeletras

donde "chorrodeletras" es el identificador de la partición de intercambio.
Guardamos, y escribimos por último:
sudo update-initramfs -u

Ya está todo solucionado.

No hay comentarios: