Saltar al contenido

¿Cómo leer la tabla de particiones en memoria (kernel) de/dev/sda?

Esta es la contestación más acertada que encomtrarás brindar, pero estúdiala pausadamente y valora si es compatible a tu proyecto.

Solución:

Sí, puedes hacerlo 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 con exactamente 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, con SIN 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=XXn' "$(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 escribe, de XX al número de tipo de partición. Pon el de arranque 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

Releer 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 haber reiniciado.

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.

Si sostienes algún dilema o disposición de renovar nuestro noticia eres capaz de realizar una explicación y con gusto lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *