Stworzyłem skrypt, który pomoże rozwiązać ten problem, BEZ GWARANCJI . (ale testowałem na mojej maszynie wirtualnej)
Uruchamianie następującego skryptu z uszkodzonym HD przy pierwszym parametrze, jak w:
user@host:~$ ./repart.sh sda
Treść 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
Dane wyjściowe mają format sfdisk. Ale uwaga , ten plik musi zostać zmodyfikowany, aby go użyć. Przy typie partycji rozszerzonej = 5, zwiększ rozmiar, używając całej przestrzeni logicznej plus spacji między początkiem partycji rozszerzonej a początkiem pierwszej partycji logicznej.
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
Musisz zmienić typ , z XX na liczbę typów partycji. Umieść partycję startową w pierwszej linii.
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
Zastosuj te zmiany
cat repart.sfdisk | sfdisk -f /dev/sda
Odczytaj tabele partycji
partprobe
/sbin/blockdev --rereadpt
Zainstaluj ponownie grub
grub-install /dev/sda