Ja, das geht mit dem /sys
Dateisystem.
/sys
ist ein gefälschtes Dateisystem, das vom Kernel und den Kernel-Treibern dynamisch generiert wird.
In diesem speziellen Fall können Sie zu /sys/block/sda
gehen und Sie sehen ein Verzeichnis für jede Partition auf dem Laufwerk. Es gibt 2 spezifische Dateien in diesen Ordnern, die Sie benötigen, start
und size
. start
enthält den Offset vom Anfang des Laufwerks und size
ist die Größe der Partition. Löschen Sie einfach die Partitionen und erstellen Sie sie mit genau den gleichen Starts und Größen wie in /sys
.
Zum Beispiel sieht mein Laufwerk so aus:
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
Und das habe ich in /sys/block/sda
:
sda1/
start: 2048
size: 131072
sda2/
start: 133120
size: 134207488
sda3/
start: 134340608
size: 840335360
sda4/
start: 974675968
size: 2097200
Ich habe dies getestet, um zu überprüfen, ob die Informationen korrekt sind, nachdem die Partitionstabelle auf einem laufenden System geändert wurde
Ich habe ein Skript erstellt, um dieses Problem zu lösen, ohne KEINE GEWÄHRLEISTUNG .(aber ich habe es auf meiner virtuellen Maschine getestet)
Ausführen des folgenden Skripts mit beschädigtem HD am ersten Parameter, wie in:
[email protected]:~$ ./repart.sh sda
Inhalt von 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
Die Ausgabe ist ein sfdisk-Format. Aber Vorsicht , muss diese Datei modifiziert werden, um verwendet zu werden. Erhöhen Sie die Größe beim erweiterten Partitionstyp =5, indem Sie den gesamten logischen Speicherplatz plus den Speicherplatz zwischen dem Beginn der erweiterten und dem Beginn der ersten logischen Partition verwenden.
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
Sie müssen den Typ ändern , von XX bis Nummer des Partitionstyps. Legen Sie die bootfähige Partition in der ersten Zeile.
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
Übernehmen Sie diese Änderungen
cat repart.sfdisk | sfdisk -f /dev/sda
Partitionstabellen erneut lesen
partprobe
/sbin/blockdev --rereadpt
Grub neu installieren
grub-install /dev/sda
Testdisk schon probiert? Es kann die Festplatte scannen und verlorene Partitionstabellen wiederherstellen, selbst nachdem Sie neu gestartet haben.
Es ist vorkonfiguriert für Debian und vermutlich auch für Ubuntu erhältlich. Wahrscheinlich andere Distributionen.
Wenn Sie eine gparted-CD booten, lohnt es sich wahrscheinlich zu prüfen, ob sie darauf vorinstalliert ist.