Ano, můžete to udělat pomocí /sys
souborový systém.
/sys
je falešný souborový systém dynamicky generovaný jádrem a ovladači jádra.
V tomto konkrétním případě můžete přejít na /sys/block/sda
a uvidíte adresář pro každý oddíl na jednotce. V těchto složkách jsou 2 konkrétní soubory, které potřebujete, start
a size
. start
obsahuje posun od začátku jednotky a size
je velikost oddílu. Stačí odstranit oddíly a znovu je vytvořit s přesně stejnými počátky a velikostmi, jaké najdete v /sys
.
Například takto vypadá můj disk:
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
A to je to, co mám v /sys/block/sda
:
sda1/
start: 2048
size: 131072
sda2/
start: 133120
size: 134207488
sda3/
start: 134340608
size: 840335360
sda4/
start: 974675968
size: 2097200
Testoval jsem to, abych ověřil správnost informací po úpravě tabulky oddílů na běžícím systému
Vytvořil jsem skript, který pomůže vyřešit tento problém, bez BEZ ZÁRUKY .(ale testoval jsem na svém virtuálním počítači)
Spuštění následujícího skriptu s poškozeným HD na prvním parametru, jako v:
[email protected]:~$ ./repart.sh sda
Obsah 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
Výstupem je formát sfdisk. Ale pozor , musí být tento soubor upraven, aby mohl být použit. U rozšířeného oddílu typu=5 zvětšete velikost s využitím veškerého logického prostoru plus mezery mezi začátkem rozšířeného a začátkem prvního logického oddílu.
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
Musíte změnit typ , od XX do čísla typu oddílu. Vložte zaváděcí oddíl na prvním řádku.
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
Použít tyto změny
cat repart.sfdisk | sfdisk -f /dev/sda
Znovu si přečtěte tabulky oddílů
partprobe
/sbin/blockdev --rereadpt
Znovu nainstalujte grub
grub-install /dev/sda
Zkoušel jsi testdisk? Dokáže prohledat disk a obnovit ztracené tabulky oddílů i po restartu.
Je k dispozici předem zabalený pro Debian a pravděpodobně také pro Ubuntu. Pravděpodobně další distribuce.
Pokud spouštíte gparted CD, pravděpodobně stojí za to zkontrolovat, zda na něm není předinstalované.