En ocasiones nos es necesario extraer la tabla de particiones de un disco duro, para crearla en otro de idénticas características. Supongamos que tenemos un disco duro de 320 Gb repartidos de la siguiente forma:
- Una partición con 20 Gb con windows.
- Una segunda partición de 20 Gb con la raíz de un linux.
- Una de 279 Gb con los home del linux.
- Una de 1 Gb de swaping.
Suponiendo que se trate de un disco SATA pinchado en el primer bus SATA, la tabla de particionado se vería:
- /dev/sda1 --> Windows
- /dev/sda2 --> / (Raíz de linux)
- /dev/sda3 --> /home (linux)
- /dev/sda4 --> swap (linux)
La tabla de particiones (que contiene la información expuesta) se escribe en los primeros 512 Kb del disco duro, en nuestro caso /dev/sda. Los linux tienen un programa que sirve para convertir y copiar ficheros planos (eso pone en el man) llamada dd (Data Definition). Como en linux todo es un fichero (incluido los discos) le podemos indicar que nos copie en un fichero raw (plano) los primeros 512 kB del disco al sitio que nosotros queramos, obteniendo de esta forma la tabla de particiones del disco. Para hacer esto solo tendríamos que ejecutar el siguiente comando como superusuario o root (lo pongo de forma genérica):
# dd if=fichero_origen of=fichero_destino bs=tamaño_del_bloque_a_copiar count=numero_de_veces
Donde los parámetros que le estamos pasando son:
- if: Input File o fichero del que quermos extraer la imágen.
- of: Output File o fichero donde queremos almacenar esa imagen.
- bs: Block Size o tamaño del bloque a copiar. No le ponemos unidades por que por defecto son kB, pero también admintiría por ejemplo megabytes
- count: número de veces que queremos copiar consecutivamente el tamaño de bs, es decir si le ponemos bs=512 count=2 el fichero que nos genere será de 1024 kB (512 kB x 2)o lo que es lo mismo 1 MB.
Ahora que sabemos lo que significa cada cosa, vamos a ejemplificarlo con nuestro caso concreto:
# dd if=/dev/sda of=/tmp/particiones.mbr bs=512 count=1
Este comando nos creará un fichero llamado particiones.mbr en el directorio /tmp. Puesto que lo queremos mover para usarlo en otro disco (o en el mismo) deberíamos copiarlo a un soporte extraíble lo mejor es hacerlo a un pendrive porque después lo más probable es que se tenga que usar una liveCD y no tengamos el CDROM disponible.
Para restaurar la tabla de particiones, hay que seguir el proceso contrario, pero a diferencia del primero, el disco duro NO puede estar montado, por lo que si sólo tenemos un disco duro y lo queremos hacer en él, no tendremos más remedio que arrancar una liveCD de cualquier distro que la tenga.
Vamos a dar por supuesto que lo queremos hacer sobre una máquina con dos discos y ya tenemos arrancado el sistema live. A diferencia del caso anterior, esta máquina tiene como /dev/sda un disco de datos, y como /dev/sdb el disco idéntico al nuestro donde queremos restaurar la tabla de particiones. En este caso cambiará un poco el comando, pero la la norma general será la misma, y se restaurarán las particiones de la siguiente forma:
En primer lugar montamos el pendrive donde tenemos el fichero particiones.mbr en /media/disk, suponiendo que el pendrive es el dispositivo /dev/sdc y que sólo tiene una partición hecha:
# mount /dev/sdc1 /media/diskLo más probable es que el sistema live monte automáticamente el pendrive y nos ahorremos este paso.
A continuación restauraremos la tabla de particiones en nuestro disco:
# dd if=/media/disk/particiones.mbr of=/dev/sdb
A diferencia de la vez anterior hemos omitido los parámtros bs y count puesto que el fichero pesa 512 kB y lo copiará al inicio de sdb una sóla vez por defecto, pero si se ponen no hay ningún problema.
Hay que tener en cuenta que si ahora hacemos un listado de dispositivos sata, es probable que no nos aparezcan las particiones recién creadas puesto que cuando se arrancó el sistema no existían, pero podremos comprobar si se han creado correctamente ejecutando cfdisk y vemos las particiones recien creadas:
# cfdisk /dev/sdb
Si no aparecen con este programa es que hemos tenido algún error al extraer o copiar el fichero particiones.mbr.