Cyrille BORNE : Conversion d'une table de partitions de type Mdos en table Gpt
jeudi 8 janvier 2015 à 08:00Cet article est lié au précédent qui montrait comment utiliser une table de partition GPT et ceci quel que soit son type de bios. Il s'agit là de convertir une table classique MsDos en table Gpt et sans perte de données ni obligation de réinstaller son système, en notant tout de même que faire des sauvegardes est vivement conseillé.
Il est avant tout informatif, pour montrer que cela est possible et comment, même si rares seront les cas on l'on devra être obligé de convertir sa table. Il peut s'adapter à toutes les distributions sauf en ce qui concerne la reconfiguration du noyau car j'ai utilisé la commande dpkg-reconfigure propre à Debian et dérivées.
Principe - Dans l'ordre on va :
- faire des sauvegardes
- vérifier le système de fichiers
- réduire la première partition en libérant 10 Mo en tout début de disque afin d'y créer une partition de type « BIOS boot partition » indispensable sur les tables Gpt avec une machine de bios non Efi.
- faire un chroot de l'ancienne partition système pour reconfigurer le noyau et réinstaller Grub dans sa nouvelle configuration
- renommer les partitions en fonction de leur emplacement et non de leur ordre de création
Procédure :
Avant tout faire des sauvegardes de ses données et de l'emplacement des tables de partitions, par exemple avec sfdisk. Voir le man à ce sujet.
Voici ce que donne la commande sfdisk -d /dev/sdb > backup_sdb.txt chez moi:# partition table of /dev/sdb
unit: sectors
/dev/sdb1 : start= 2048, size= 40960000, Id=83, bootable
/dev/sdb2 : start= 40962048, size= 8192000, Id=82
/dev/sdb3 : start= 49154048, size=107147264, Id= 5
/dev/sdb4 : start= 0, size= 0, Id= 0
/dev/sdb5 : start= 49156096, size= 61440000, Id=83
/dev/sdb6 : start=110598144, size= 45703168, Id=83
Et si nécessaire on les restaurera par la commande :
sfdisk -f /dev/sdb < backup_sdb.tx
Bien entendu ces sauvegardes ne devront pas être conservées sur le disque à modifier.
Maintenant on peut commencer la procédure proprement dite.
On vérifie qu'aucun système de fichiers de ce disque n'est monté :
:~# grep -c sdb /proc/mounts
0
Je fais une vérification et réparation si nécessaire du système de fichiers avant de le modifier ::~# e2fsck -f -y /dev/sdb1
J'aurais pu le laisser faire par le programme de partitionnement qui d'ailleurs fera une vérification avant de procéder aux modifications mais je préfère lancer d'abord la commande.
Concernant le programme de partitionnement, il doit savoir gérer sur un système ext4 les «features» has_journal, dir_index, filetype, sparse_super, large_file. Plutôt que de faire une partie avec tune2fs puis le reste avec un autre programme, puisque je dispose d'une interface graphique je vais le faire avec Gparted .
Alors situation de départ :
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 21,0GB 21,0GB primary ext4 boot
2 21,0GB 25,2GB 4194MB primary linux-swap(v1)
3 25,2GB 80,0GB 54,9GB extended
5 25,2GB 56,6GB 31,5GB logical btrfs
6 56,6GB 80,0GB 23,4GB logical ext4
Et, après passage de Gparted :Partition Table: msdos
Number Start End Size Type File system Flags
1 11,5MB 21,0GB 21,0GB primary ext4 boot
2 21,0GB 25,2GB 4194MB primary linux-swap(v1)
3 25,2GB 80,0GB 54,9GB extended
5 25,2GB 56,6GB 31,5GB logical btrfs
6 56,6GB 80,0GB 23,4GB logical ext4
On note donc que la première partition ne débute plus sur le disque à 1049KB mais à 11,5MB tout en conservant sa position de fin.
Je vais donc maintenant avec Gdisk, qui est capable de faire la conversion, créer en tout début de disque une petite partition qui sera pour le moment numérotée N° 3 car c'est le premier «descripteur» de partitions primaires libre dans l'actuelle table msdos (il n'y a plus de notions primaires, étendues et logiques dans les tables Gpt). Je marque en caractères gras les commandes passées dans Gdisk.
:~# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.5
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format.
THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by typing 'q' if
you don't want to convert your MBR partitions to GPT format!
***************************************************************
Command (? for help): p (affichage de la situation de départ)
Disk /dev/sdb: 156301488 sectors, 74.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): B538B008-8EAC-4ADA-842D-B5BCCBA14A4B
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 156301454
Partitions will be aligned on 2048-sector boundaries
Total free space is 30829 sectors (15.1 MiB)
Number Start (sector) End (sector) Size Code Name
1 22528 40962047 19.5 GiB 8300 Linux filesystem
2 40962048 49154047 3.9 GiB 8200 Linux swap
5 49156096 110596095 29.3 GiB 8300 Linux filesystem
6 110598144 156297215 21.8 GiB 8300 Linux filesystem
Command (? for help): n (création nouvelle partition)
Partition number (3-128, default 3): 3
First sector (34-156301454, default = 2048) or {+-}size{KMGTP}: 2048
Last sector (2048-22527, default = 22527) or {+-}size{KMGTP}: 22527
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): ef02
Changed type of partition to 'BIOS boot partition'
Command (? for help): p
Disk /dev/sdb: 156301488 sectors, 74.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): B538B008-8EAC-4ADA-842D-B5BCCBA14A4B
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 156301454
Partitions will be aligned on 2048-sector boundaries
Total free space is 10349 sectors (5.1 MiB)
Number Start (sector) End (sector) Size Code Name
1 22528 40962047 19.5 GiB 8300 Linux filesystem
2 40962048 49154047 3.9 GiB 8200 Linux swap
3 2048 22527 10.0 MiB EF02 BIOS boot partition
5 49156096 110596095 29.3 GiB 8300 Linux filesystem
6 110598144 156297215 21.8 GiB 8300 Linux filesystem
Command (? for help): w (pour écrire la nouvelle table en Gpt)
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y (confirmation de la commande)
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
On vérifie maintenant avec Parted le travail effectué par Gdisk ::~# parted /dev/sdb print
Partition Table: gpt
Number Start End Size File system Name Flags
3 1049kB 11,5MB 10,5MB ext4 BIOS boot partition bios_grub
1 11,5MB 21,0GB 21,0GB ext4 Linux filesystem
2 21,0GB 25,2GB 4194MB linux-swap(v1) Linux swap
5 25,2GB 56,6GB 31,5GB btrfs Linux filesystem
6 56,6GB 80,0GB 23,4GB ext4 Linux filesystem
On va créer un système de fichiers sur cette nouvelle partition. À priori cela ne devrait pas être nécessaire puisque ce fs ne sera pas utilisé mais j'ai eu des problèmes avec grub qui se mélangeait les pinceaux en l'absence d'un fs sur la partition portant le drapeau BIOS boot partition.
:~# mkfs.ext2 -v /dev/sdb3
. . .
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété
On remet la «mémoire» de blkid à zéro et on vérifie à toutes fins utiles que le système et udev voit bien cette nouvelle partition.
:/# blkid -g
:/# blkid -po udev /dev/sdb3
ID_FS_UUID=cddaedf8-e091-483d-adad-77f1f814110d
ID_FS_UUID_ENC=cddaedf8-e091-483d-adad-77f1f814110d
ID_FS_SEC_TYPE=ext2
ID_FS_VERSION=1.0
ID_FS_TYPE=ext4
ID_FS_USAGE=filesystem
ID_PART_ENTRY_SCHEME=gpt
ID_PART_ENTRY_NAME=BIOS\\x20boot\\x20partition
ID_PART_ENTRY_UUID=72bb9f7e-1836-430e-93ec-886cccc6be67
ID_PART_ENTRY_TYPE=21686148-6449-6e6f-744e-656564454649
ID_PART_ENTRY_NUMBER=3
ID_PART_ENTRY_OFFSET=2048
ID_PART_ENTRY_SIZE=20480
ID_PART_ENTRY_DISK=8:16
Comme on peut le voir sur les sorties précédentes de parted et gdisk les partitions sont numérotées dans l'ordre de création et non suivant leur emplacement sur le disque. Avec l'option -s de sgdisk (noter le s devant gdisk car il s'agit d'un autre utilitaire apporté par le paquet gdisk), on va réorganiser cela :
:~# sgdisk -s /dev/sdb
The operation has completed successfully.
Résultat :
:~# gdisk -l /dev/sdb
. . .
Number Start (sector) End (sector) Size Code Name
1 2048 22527 10.0 MiB EF02 BIOS boot partition
2 22528 40962047 19.5 GiB 8300 Linux filesystem
3 40962048 49154047 3.9 GiB 8200 Linux swap
4 49156096 110596095 29.3 GiB 8300 Linux filesystem
5 110598144 156297215 21.8 GiB 8300 Linux filesystem
Voilà, maintenant on peut faire le chroot du système de fichier qui est devenu /dev/sdb2 pour les dernières modifications :
:~# mkdir /mnt/system
:~# mount /dev/sdb2 /mnt/system/
:~# mount -o bind /dev /mnt/system/dev
:~# mount -o bind /sys /mnt/system/sys
:~# mount -o bind /proc /mnt/system/proc
:~# chroot /mnt/system
On vérifie quel est le dernier noyau installé ::/# aptitude search "linux-image ~i"
i linux-image-3.2.0-4-686-pae
On le reconfigure ::/# dpkg-reconfigure linux-image-3.2.0-4-686-pae
On réinstalle Grub ::/# grub-install --recheck --debug /dev/sdb
. . .
+ echo Installation finished. No error reported.
Installation finished. No error reported.
+ exit 0
À noter qu'il n'est pas nécessaire de reconstruire le fichier grub.cfg par la commande update-grub puisque cela a déjà été fait lors du dpkg-reconfigure du noyau.
Voilà, on peut maintenant sortir du chroot et démonter le fs, sys, proc et dev ::/# exit
:~# umount /mnt/system/proc
:~# umount /mnt/system/sys
:~# umount /mnt/system/dev/
:~# umount /mnt/system
cep
Original post of Cyrille BORNE.Votez pour ce billet sur Planet Libre.
Articles similaires
- Oncle Tom : Convertir un MP3 en WAV sous Linux (01/10/2006)