Por seguridad, deberíamos hacer una copia del GRUB para poder restaurarlo en caso de que se produzca un fallo y en consecuencia, no se pueda cargar el sistema operativo.
La copia de seguridad la vamos a hacer de un GRUB que se encuentra en un sistema BIOS/MBR. Para ello usaremos el comando dd con el que copiaremos los primeros 2048 sectores del disco (0-2047) de 512 bytes por sector, en definitiva, el primer megabyte del disco.
Vamos a suponer que el disco que posee el GRUB a copiar es el /dev/sda, y la copia la vamos a hacer en el directorio de trabajo sobre el fichero grub.backup. Evidentemente, la copia la deberíamos tener en un dispositivo externo.
# dd if=/dev/sda of=grub.backup bs=512 count=2048
2048+0 records in
2048+0 records out
1048576 bytes (1,0 MB, 1,0 MiB) copied, 0,0740407 s, 14,2 MB/s
En caso de que tuviéramos que restaurar la copia anterior sobre el mismo disco, el comando dd sería así:
# dd if=grub.backup of=/dev/sda bs=512 count=2048
2048+0 records in
2048+0 records out
1048576 bytes (1,0 MB, 1,0 MiB) copied, 0,287755 s, 3,6 MB/s
Estamos suponiendo también que la copia del grub se encuentra en el directorio de trabajo, si no fuese así, habría que indicar junto con el fichero la ruta donde se encuentre.
En el caso de que estemos usando una memoria USB para realizar el arranque del disco del ordenador, y esta se estropeara; es bastante probable que usemos otra memoria USB de un tamaño distinto a la primera, y entonces al restaurar la copia del GRUB, los datos de la tabla de particiones no serán los correctos. Para arreglar esto usaremos el comando cfdisk, que solo modificará la tabla de particiones y no tocará el gestor de arranque dentro del MBR.
Vamos a verlo con un ejemplo. Partimos con el GRUB en una memoria USB de 4GB, y que tras estropearse, restauramos la copia del GRUB en una memoria USB de 64GB. Ambas memorias tienen una sola partición de tipo FAT32 y formateada con vfat.
La memoria USB de 4GB vista desde el comando cfdisk:
En el equipo de pruebas, la memoria USB era el tercer disco y de ahí que en las imágenes se vea el dispositivo /dev/sdc.
La memoria USB de 64GB vista desde el comando cfdisk:
Como estamos suponiendo, la memoria USB de 4GB se ha estropeado, y nos disponemos a reemplazarla por la memoria USB de 64 GB. Tras restaurar la copia del GRUB en el nuevo dispositivo, el resultado será una tabla de particiones incorrecta, concretamente tendrá los datos de la tabla de particiones de la memoria USB de 4GB. Lo podemos ver con el comando cfdisk:
El espacio libre que nos aparece se debe a que el sector final de la partición es más pequeño, pues este valor viene de la memoria USB de 4GB. Para restablecerlo a su valor correcto, elegimos la opción "Cambiar tamaño", se nos mostrará el tamaño máximo del dispositivo (57,8G), y lo aceptamos.
Ya solo nos queda, guardar los cambios en el MBR y salir.
Para hacer estos cambios con cfdisk, es necesario que usemos el comando umount para demontar la partición, en este caso, /dev/sdc1.
Si la situación fuera la contraria, es decir, partimos de la memoria USB de 64GB que se nos estropea, y restauramos la copia de su GRUB en la una memoria USB de 4GB. Ahora, el problema será el contrario, el valor del sector final de la partición será más grande que el que debe ser. Veamos la información de cfdisk:
Vemos que el valor del sector final de la partición es el valor que había en la tabla de particiones de la memoria USB de 64GB. La forma de recomponer esto es muy parecida a lo que hicimos anteriormente. Hacemos uso, como antes, de la opción "Cambiar tamaño", pero esta vez daremos el nuevo tamaño en sectores, que será más exacto que usando los GB, y para ello nos fijamos en la parte superior de la imagen anterior, donde se nos indica la cantidad de sectores que tiene el dispositivo, en este caso 7831552 sectores, y a esta cantidad le restamos los 2048 sectores iniciales que no forman parte de la partición, con lo que nos quedan 7829504 sectores, valor que introducimos con la S de sectores al final:
Por último, aceptamos, guardamos los cambios y salimos.