Différences entre versions de « Écrasement de la table de partitions »

De Cliss XXI
Sauter à la navigation Sauter à la recherche
(sortie de fdisk)
(Précisions sur la partition étendue; nettoyage de la sortie de fdisk)
Ligne 24 : Ligne 24 :
 
Pour info mon disque-dur ressemble à ceci:
 
Pour info mon disque-dur ressemble à ceci:
 
  # fdisk /dev/hda
 
  # fdisk /dev/hda
   
+
  [...]
The number of cylinders for this disk is set to 4998.
 
There is nothing wrong with that, but this is larger than 1024,
 
and could in certain setups cause problems with:
 
1) software that runs at boot time (e.g., old versions of LILO)
 
2) booting and partitioning software from other OSs
 
    (e.g., DOS FDISK, OS/2 FDISK)
 
 
Command (m for help): p
 
 
Disk /dev/hda: 41.1 GB, 41110142976 bytes
 
255 heads, 63 sectors/track, 4998 cylinders
 
Units = cylinders of 16065 * 512 = 8225280 bytes
 
 
    Device Boot      Start        End      Blocks  Id  System
 
/dev/hda1  *          1        1275    10241406  83  Linux
 
/dev/hda2            1276        2564    10353892+  5  Extended
 
/dev/hda3            2565        2626      498015  82  Linux swap / Solaris
 
/dev/hda4            2627        4998    19053090  83  Linux
 
/dev/hda5            1276        2564    10353861  83  Linux
 
 
   
 
   
 
  Command (m for help): u
 
  Command (m for help): u
Ligne 61 : Ligne 42 :
 
  /dev/hda5        20482938    41190659    10353861  83  Linux
 
  /dev/hda5        20482938    41190659    10353861  83  Linux
  
Il s'agit du numéro de secteur de début de chaque partition ainsi que sa taille (remarquer que la taille de la partition étendue n'est pas exact). Avec cela et fdisk, vous pouvez recréer votre table de partition. Basculer les unités de ''cylinders'' vers ''sectors''. Quand vous créez une nouvelle partition (n), fdisk vous demande le secteur de début (vous l'avez) et de fin (pour la partition ''n'', start[n+1]-1, ou alors start[n]+size[n]-1). Pour la partition étendue il faudra vous débrouiller et probablement lui faire englober, sous fdisk, l'ensemble des autres partitions - personnellement je n'ai eu à restorer que mes partitions primaires.
+
Il s'agit donc du numéro de secteur de début de chaque partition ainsi que sa taille (remarquer que la taille de la partition étendue n'est pas exact). Avec cela et fdisk, vous pouvez recréer votre table de partition. Basculer les unités de ''cylinders'' vers ''sectors''. Quand vous créez une nouvelle partition (n), fdisk vous demande le secteur de début (vous l'avez) et de fin - pour la partition ''n'':
 +
start[n+1] - 1 = start[n] + size[n] - 1
 +
(on retranche 1 pour avoir le dernier secteur, le suivant est le début de la partition d'après)
 +
 
 +
Pour la partition étendue il faudra vous débrouiller et probablement lui faire englober, sous fdisk, l'ensemble des autres partitions - personnellement je n'ai eu à restorer que mes partitions primaires.
 +
 
 +
On remarque tout de même que la première partition de la partition étendue commence après 63 (encore ce chiffre) secteurs. Comme application, la fin d'une partition étendue qui serait la dernière du disque (cas malheureux, car il est impossible de s'aider de start[n+1]) serait alors
 +
start[n] + 63 + size[e1] + size[e2] + ... + size[ei] - 1
 +
''eX'' étant les partitions étendues (dans mon cas: 20482875 + 63 + 20707722 - 1 = 41190659 = start[3] - 1 - ça concorde).
 +
 
 +
Il vous manque encore quelques information: le type et le prédicat ''bootable?'' de chaque partition. Pour ceux-là, j'espère que vous pouvez vous fier à votre mémoire, ou éventuellement au type de système de fichier détecté par <code>mount</code>.
  
 
Bien entendu la solution de sauvegarder le secteur de boot avant toute intervention reste la plus efficace - mais l'autre manipulation m'a tout de même sauvé la vie une fois :)
 
Bien entendu la solution de sauvegarder le secteur de boot avant toute intervention reste la plus efficace - mais l'autre manipulation m'a tout de même sauvé la vie une fois :)

Version du 6 février 2006 à 00:11

La table de partition, qui indique l'organisation des partitions du disque, se trouve dans les premiers 512 octets du disque, avec le secteur de boot.

Problème: vous avez oublié ce détail et vous avez installé un nouveau secteur de boot... et par conséquent perdu l'organisation des partitions. Bien entendu vous avez oublié de:

dd if=/dev/hda of=bootsector.512 count=1 bs=512

Bref vous avez perdu toutes vos données. Sauf... si vous avez eu le sang-froid de gardé l'ordinateur allumé et n'avez encore touché à rien, car le noyau Linux a probablement toujours l'organisation des partitions en mémoire. La première chose à faire est donc de monter les partitions et de se faire une sauvegarde d'une manière ou d'une autre, avec qu'une coupure d'électricité ne vienne définitevement régler le problème.

Une fois ceci fait, allons voir dans /sys/block/hda/ (ou éventuellement sda pour du SCSI ou ces nouveaux disques SATA).

$ cat hda?/start
63
20482875
41190660
42186690
20482938
$ cat hda?/size
20482812
2
996030
38106180
20707722

Pour info mon disque-dur ressemble à ceci:

# fdisk /dev/hda
[...]

Command (m for help): u
Changing display/entry units to sectors

Command (m for help): p

Disk /dev/hda: 41.1 GB, 41110142976 bytes
255 heads, 63 sectors/track, 4998 cylinders, total 80293248 sectors
Units = sectors of 1 * 512 = 512 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *          63    20482874    10241406   83  Linux
/dev/hda2        20482875    41190659    10353892+   5  Extended
/dev/hda3        41190660    42186689      498015   82  Linux swap / Solaris
/dev/hda4        42186690    80292869    19053090   83  Linux
/dev/hda5        20482938    41190659    10353861   83  Linux

Il s'agit donc du numéro de secteur de début de chaque partition ainsi que sa taille (remarquer que la taille de la partition étendue n'est pas exact). Avec cela et fdisk, vous pouvez recréer votre table de partition. Basculer les unités de cylinders vers sectors. Quand vous créez une nouvelle partition (n), fdisk vous demande le secteur de début (vous l'avez) et de fin - pour la partition n:

start[n+1] - 1 = start[n] + size[n] - 1

(on retranche 1 pour avoir le dernier secteur, le suivant est le début de la partition d'après)

Pour la partition étendue il faudra vous débrouiller et probablement lui faire englober, sous fdisk, l'ensemble des autres partitions - personnellement je n'ai eu à restorer que mes partitions primaires.

On remarque tout de même que la première partition de la partition étendue commence après 63 (encore ce chiffre) secteurs. Comme application, la fin d'une partition étendue qui serait la dernière du disque (cas malheureux, car il est impossible de s'aider de start[n+1]) serait alors

start[n] + 63 + size[e1] + size[e2] + ... + size[ei] - 1

eX étant les partitions étendues (dans mon cas: 20482875 + 63 + 20707722 - 1 = 41190659 = start[3] - 1 - ça concorde).

Il vous manque encore quelques information: le type et le prédicat bootable? de chaque partition. Pour ceux-là, j'espère que vous pouvez vous fier à votre mémoire, ou éventuellement au type de système de fichier détecté par mount.

Bien entendu la solution de sauvegarder le secteur de boot avant toute intervention reste la plus efficace - mais l'autre manipulation m'a tout de même sauvé la vie une fois :)