Oui, vous pouvez le faire avec le /sys
système de fichiers.
/sys
est un faux système de fichiers généré dynamiquement par le noyau et les pilotes du noyau.
Dans ce cas précis vous pouvez aller à /sys/block/sda
et vous verrez un répertoire pour chaque partition sur le lecteur. Il y a 2 fichiers spécifiques dans ces dossiers dont vous avez besoin, start
et size
. start
contient le décalage depuis le début du lecteur, et size
est la taille de la partition. Supprimez simplement les partitions et recréez-les avec exactement les mêmes débuts et tailles que ceux trouvés dans /sys
.
Par exemple, voici à quoi ressemble mon lecteur :
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
Et c'est ce que j'ai en /sys/block/sda
:
sda1/
start: 2048
size: 131072
sda2/
start: 133120
size: 134207488
sda3/
start: 134340608
size: 840335360
sda4/
start: 974675968
size: 2097200
J'ai testé cela pour vérifier que les informations sont exactes après avoir modifié la table de partition sur un système en cours d'exécution
J'ai fait un script pour aider à résoudre ce problème, avec AUCUNE GARANTIE .(mais j'ai testé sur ma machine virtuelle)
Exécution du script suivant, avec HD endommagé au premier paramètre, comme dans :
[email protected]:~$ ./repart.sh sda
Contenu de 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
La sortie est au format sfdisk. Mais attention , ce fichier doit être modifié pour être utilisé. À la partition étendue type=5, augmentez la taille, en utilisant tout l'espace logique plus l'espace entre le début de la partition étendue et le début de la première partition logique.
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
Vous devez changer le type , de XX au nombre de type de partition. Mettez le amorçable partitionner en première ligne.
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
Appliquer ces modifications
cat repart.sfdisk | sfdisk -f /dev/sda
Relire les tables de partition
partprobe
/sbin/blockdev --rereadpt
Réinstaller grub
grub-install /dev/sda
As-tu essayé testdisk ? Il peut analyser le disque et récupérer les tables de partition perdues, même après le redémarrage.
Il est disponible pré-emballé pour Debian et probablement aussi pour Ubuntu. Probablement d'autres distributions.
Si vous démarrez un CD gparted, il vaut probablement la peine de vérifier s'il est pré-installé dessus.