Sí, puedes hacer esto con el /sys
sistema de archivos.
/sys
es un sistema de archivos falso generado dinámicamente por el kernel y los controladores del kernel.
En este caso específico puedes ir a /sys/block/sda
y verá un directorio para cada partición en el disco. Hay 2 archivos específicos en esas carpetas que necesita, start
y size
. start
contiene el desplazamiento desde el comienzo de la unidad, y size
es el tamaño de la partición. Simplemente elimine las particiones y vuelva a crearlas exactamente con los mismos inicios y tamaños que se encuentran en /sys
.
Por ejemplo, así es como se ve mi disco:
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 133119 65536 83 Linux
/dev/sda2 * 133120 134340607 67103744 7 HPFS/NTFS/exFAT
/dev/sda3 134340608 974675967 420167680 8e Linux LVM
/dev/sda4 974675968 976773167 1048600 82 Linux swap / Solaris
Y esto es lo que tengo en /sys/block/sda
:
sda1/
start: 2048
size: 131072
sda2/
start: 133120
size: 134207488
sda3/
start: 134340608
size: 840335360
sda4/
start: 974675968
size: 2097200
He probado esto para verificar que la información sea precisa después de modificar la tabla de particiones en un sistema en ejecución
Hice un script para ayudar a resolver este problema, sin NINGUNA GARANTÍA .(pero probé en mi máquina virtual)
Ejecutando el siguiente script, con HD dañado en el primer parámetro, como en:
[email protected]:~$ ./repart.sh sda
Contenido de repart.sh
:
#!/bin/bash
echo "unit: sectors"
for i in /sys/block/$1/$1?/; do
printf '/dev/%s : start=%d, size=%d, type=XX\n' "$(basename $i)" "$(<$i/start)" "$(<$i/size)"
done
La salida es un formato sfdisk. Pero precaución , este archivo tiene que ser modificado para ser utilizado. En el tipo de partición extendida =5, aumente el tamaño, utilizando todo el espacio lógico más el espacio entre el inicio de la partición extendida y el inicio de la primera partición lógica.
unit: sectors
/dev/sda1 : start=63, size=2040192, type=XX
/dev/sda2 : start=2040255, size=20482875, type=XX
/dev/sda3 : start=22523130, size=19197675, type=XX
/dev/sda4 : start=41720805, size=2, type=XX
/dev/sda5 : start=41720868, size=208782, type=XX
Tienes que cambiar el tipo , de XX al número de tipo de partición. Poner el arrancable partición en la primera línea.
unit: sectors
/dev/sda1 : start=63, size=2040192, type=83, bootable
/dev/sda2 : start=2040255, size=20482875, type=83
/dev/sda3 : start=22523130, size=19197675, type=fd
/dev/sda4 : start=41720805, size=208845, type=5
/dev/sda5 : start=41720868, size=208782, type=82
Aplicar estos cambios
cat repart.sfdisk | sfdisk -f /dev/sda
Vuelva a leer las tablas de particiones
partprobe
/sbin/blockdev --rereadpt
Reinstalar grub
grub-install /dev/sda
¿Has probado testdisk? Puede escanear el disco y recuperar tablas de particiones perdidas, incluso después de reiniciar.
Está disponible preempaquetado para Debian y presumiblemente también para Ubuntu. Probablemente otras distribuciones.
Si está iniciando un CD con gpart, probablemente valga la pena verificar si está preinstalado en eso.