Sì, puoi farlo con il /sys
filesystem.
/sys
è un falso filesystem generato dinamicamente dal kernel e dai driver del kernel.
In questo caso specifico puoi andare a /sys/block/sda
e vedrai una directory per ogni partizione sull'unità. Ci sono 2 file specifici in quelle cartelle di cui hai bisogno, start
e size
. start
contiene l'offset dall'inizio del drive e size
è la dimensione della partizione. Basta eliminare le partizioni e ricrearle con gli stessi identici inizi e le stesse dimensioni che si trovano in /sys
.
Ad esempio, questo è l'aspetto del mio 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
E questo è quello che ho in /sys/block/sda
:
sda1/
start: 2048
size: 131072
sda2/
start: 133120
size: 134207488
sda3/
start: 134340608
size: 840335360
sda4/
start: 974675968
size: 2097200
Ho provato questo per verificare che le informazioni siano accurate dopo aver modificato la tabella delle partizioni su un sistema in esecuzione
Ho creato uno script per aiutare a risolvere questo problema, senza NESSUNA GARANZIA .(ma ho provato sulla mia macchina virtuale)
Eseguendo il seguente script, con HD danneggiato al primo parametro, come in:
[email protected]:~$ ./repart.sh sda
Contenuto di 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
L'output è un formato sfdisk. Ma attenzione , questo file deve essere modificato per essere utilizzato. Al tipo di partizione estesa=5, aumenta la dimensione, utilizzando tutto lo spazio logico più lo spazio tra l'inizio dell'estensione e l'inizio della prima partizione logica.
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
Devi cambiare il tipo , da XX al numero del tipo di partizione. Metti il file avviabile partizione alla prima riga.
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
Applica queste modifiche
cat repart.sfdisk | sfdisk -f /dev/sda
Rileggere le tabelle delle partizioni
partprobe
/sbin/blockdev --rereadpt
Reinstalla grub
grub-install /dev/sda
Hai provato il disco di prova? Può eseguire la scansione del disco e recuperare le tabelle delle partizioni perse, anche dopo il riavvio.
È disponibile preconfezionato per Debian e presumibilmente anche per Ubuntu. Probabilmente altre distribuzioni.
Se stai avviando un CD gparted, probabilmente vale la pena controllare se è preinstallato su di esso.