Comment convertir le schéma de partitionnement MBR par défaut de mon instance CentOS EC2 en GPT afin de contourner la limite de 2 Tio pour les partitions MBR sur mon volume EBS ?

Dernière mise à jour : 02/09/2020

Mon instance Amazon Elastic Compute Cloud (Amazon EC2) exécute CentOS 7 à partir d'AWS Marketplace par centos.org. Comment convertir le schéma de partitionnement MBR par défaut sur mon volume Amazon Elastic Block Store (Amazon EBS) en schéma de partitionnement GPT pour contourner la limite de 2 Tio pour les partitions MBR ?

Résolution

Avertissement : avant d'arrêter et de démarrer votre instance, assurez-vous de bien comprendre les informations suivantes :

  • Les données de stockage d'instance sont perdues lorsque vous arrêtez et démarrez une instance. Les données sont perdues lorsque vous arrêtez l'instance si votre instance est basée sur le stockage d'instance ou dispose de volumes de stockage d'instance contenant des données. Pour plus d'informations, consultez la sectionIdentification du type de dispositif racine de votre instance.
  • L'arrêt de l'instance peut mettre fin à l'instance si votre instance fait partie d'un groupe Auto Scaling d'Amazon EC2. Votre instance peut faire partie d'un groupe Auto Scaling d'AWS si vous l'avez lancée avec Amazon EMR, AWS CloudFormation ou AWS Elastic Beanstalk. Dans ce cas, la mise hors service dépend des paramètres de protection des instances définis pour votre groupe Auto Scaling. Si votre instance fait partie d'un groupe Auto Scaling, supprimez-la temporairement du groupe avant d'exécuter les étapes de résolution.
  • L'arrêt et le redémarrage de l'instance entraînent la modification de son adresse IP publique. Il est recommandé d'utiliser une adresse IP Elastic, et non publique pour l'acheminement du trafic externe vers votre instance. Si vous utilisez Route 53, il peut être nécessaire de mettre à jour les enregistrements DNS Route 53 lorsque l'adresse IP publique change.

Remarque : il est recommandé de créer une sauvegarde de votre volume EBS avant de commencer à suivre les étapes de résolution.

1.    Ouvrez la console Amazon EC2.

2.    Lancez une instance à partir d'une Amazon Machine Image (AMI) AWS Marketplace exécutant CentOS 7.

3.    Lancez une deuxième instance dans la même zone de disponibilité que la première instance et à partir de la même AMI CentOS avec un volume racine de 3 Tio.

Remarque : si vous disposez déjà d'une instance CentOS 7, vous n'avez pas besoin de lancer une nouvelle instance CentOS 7. Pour CentOS 7, modifiez le volume racine afin d'étendre sa taille à plus de 2 Tio.

4.    Arrêtez l'instance avec le volume racine de 3 Tio et arrêtez l'instance que vous avez créée à l'étape 2.

Remarque : CentOS 7 provient d'une AMI AWS Marketplace. Vous devez donc arrêter votre instance avant de joindre un volume avec des codes AWS Marketplace. Si vous n'arrêtez pas l'instance, l'erreur suivante se produit :

« Error attaching volume: Cannot attach volume 'vol-xxxxxxxxxxxxxxxxx' with Marketplace codes as the instance 'i-xxxxxxxxxxxxxxxx' is not in the 'stopped' state. »

5.    Détachez le volume racine (/dev/xvda ou /dev/sda1) de l'instance arrêtée, puis attachez-le à l'instance que vous avez créée à l'étape 2 en tant que /dev/sdf.

Remarque : utilisez le type d'instance de plateforme Xen, par exemple t2. Si vous utilisez la plateforme Nitro, par exemple t3, le nom du périphérique devient nvmeXn1.

6.    Démarrez l'instance que vous avez lancée à l'étape 2 et connectez-vous à l'aide de SSH.

7.    Utilisez la commande lsblk pour afficher la partition racine de /dev/sdf. La partition racine de /dev/sdf ne fait que 2 Tio, comme illustré dans l'exemple suivant :

# lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
(snip)
xvdf    202:80    0   3T  0 disk 
└─xvdf1 202:81    0   2T  0 part 
(snip)

Remarque : /dev/xvdf1 peut être monté en tant que système de fichiers racine « / ». Si cela se produit, arrêtez et démarrez l'instance plusieurs fois jusqu'à ce que /dev/xvda1 soit monté en tant que système de fichiers racine.

# lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk 
└─xvda1 202:1    0   8G  0 part /
xvdf    202:80   0   3T  0 disk 
└─xvdf1 202:81   0   2T  0 part 

8.    Utilisez l'outil gdisk pour convertir la table de partition de MBR en GPT.

Remarque : si l'outil gdisk n'est pas déjà installé, vous pouvez l'installer à l'aide de la commande sudo yum install gdisk -y.

# sudo gdisk /dev/xvdf
GPT fdisk (gdisk) version 1.0.1
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
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!

9.    Saisissez les commandes suivantes dans les invites pour créer une partition GPT. Saisissez enter dans l'invite Dernier secteur pour utiliser le numéro de secteur par défaut 2047.

Command (? for help): n                                                                                                        
Partition number (2-128, default 2): 128                                                                               
First sector (34-6291455966, default = 4294967296) or {+-}size{KMGTP}: 34                     
Last sector (34-2047, default = 2047) or {+-}size{KMGTP}:                                                  
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): ef02                                                     
Changed type of partition to 'BIOS boot partition'

Remarque : dans l'exemple précédent, ef02 est le numéro de partition de démarrage BIOS.

10.    Saisissez les commandes suivantes dans les invites pour supprimer la partition racine :

Command (? for help): d                                                                                                         
Partition number (1-128): 1

11.    Saisissez les commandes suivantes dans les invites pour recréer la partition racine à 3 To. Dans les invites Premier secteur, Dernier secteur et Code Hex ou GUID, saisissez enter pour utiliser les paramètres par défaut.

Command (? for help): n                                                                                                         
Partition number (1-128, default 1): 1                                                                                     
First sector (2048-6291455966, default = 2048) or {+-}size{KMGTP}:                                  
Last sector (2048-6291455966, default = 6291455966) or {+-}size{KMGTP}:                       
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):                                                             
Changed type of partition to 'Linux filesystem'

12.    Saisissez les commandes suivantes dans les invites pour enregistrer la table de partition GPT :

Command (? for help): w                                                                                                        
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y                                                                                          
OK; writing new GUID partition table (GPT) to /dev/xvdf.
The operation has completed successfully.

Exécutez la commande gdisk pour afficher les informations de la nouvelle partition :

$ sudo gdisk -l /dev/xvdf
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/xvda: 6291456000 sectors, 2.9 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 35D6B819-1C79-4EC0-920F-4D1191609505
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 6291455966
Partitions will be aligned on 8-sector boundaries
Total free space is 0 sectors (0 bytes)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048      6291455966   2.9 TiB     8300  Linux filesystem
 128              34            2047   1007.0 KiB  EF02  BIOS boot partition

13.    Utilisez l'outil de vérification et de correction du système de fichiers pour vérifier que le système de fichiers du périphérique /dev/xvdf1 est correct.

CentOS 7 :

# sudo xfs_repair /dev/xvdf1
Phase 1 - find and verify superblock...
        - reporting progress in intervals of 15 minutes
Phase 2 - using internal log
        - zero log...
        - scan filesystem freespace and inode maps...
        - 05:27:07: scanning filesystem freespace - 1025 of 1025 allocation groups done
        - found root inode chunk
Phase 3 - for each AG...
        - scan and clear agi unlinked lists...
        - 05:27:07: scanning agi unlinked lists - 1025 of 1025 allocation groups done
        - process known inodes and perform inode discovery...
        - agno = 960
        - agno = 0
        - agno = 240
        - agno = 480

(snip)
        - agno = 238
        - agno = 239
        - 05:27:08: process known inodes and inode discovery - 25856 of 25856 inodes done
        - process newly discovered inodes...
        - 05:27:08: process newly discovered inodes - 1025 of 1025 allocation groups done
Phase 4 - check for duplicate blocks...
        - setting up duplicate extent list...
        - 05:27:08: setting up duplicate extent list - 1025 of 1025 allocation groups done
        - check for inodes claiming duplicate blocks...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - agno = 4

(snip)
        - agno = 1021
        - agno = 1022
        - agno = 1023
        - agno = 1024
        - 05:27:08: check for inodes claiming duplicate blocks - 25856 of 25856 inodes done
Phase 5 - rebuild AG headers and trees...
        - 05:27:08: rebuild AG headers and trees - 1025 of 1025 allocation groups done
        - reset superblock...
Phase 6 - check inode connectivity...
        - resetting contents of realtime bitmap and summary inodes
        - traversing filesystem ...
        - traversal finished ...
        - moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
        - 05:27:08: verify and correct link counts - 1025 of 1025 allocation groups done
done

CentOS 6 :

# sudo e2fsck -f /dev/xvdf1
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/xvdf1: 18734/524288 files (0.2% non-contiguous), 284948/2096896 blocks

14.    Exécutez la commande xfs_growfs ou resize2fs pour redimensionner le système de fichiers afin de l'étendre à 3 To.

Remarque : le redimensionnement du système de fichiers peut prendre quelques minutes.

CentOS 7 :

# sudo mount -o nouuid /dev/xvdf1 /mnt

# sudo xfs_growfs /dev/xvdf1
meta-data=/dev/xvdf1             isize=512    agcount=1025, agsize=524224 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=536870656, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 536870656 to 786431739

CentOS 6 :

# sudo resize2fs /dev/xvdf1
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/xvdf1 to 786431739 (4k) blocks.

The filesystem on /dev/xvdf1 is now 786431739 blocks long.

15.    Installez Grub sur le périphérique /dev/xvdf1 et configurez-le à l'aide des commandes suivantes.

Remarque : l'installation de Grub n'est pas nécessaire pour S 6. Si vous utilisez CentOS 6, passez à l'étape 16.

CentOS 7 :

sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /dev /mnt/dev
sudo chroot /mnt /bin/bash
grub2-install /dev/xvdf
exit
sudo umount -l /mnt/dev
sudo umount -l /mnt/sys
sudo umount -l /mnt/proc
sudo umount -l /mnt

16.    Arrêtez l'instance.

17.    Détachez le volume /dev/xvdf de l'instance arrêtée.

18.    Attachez le volume /dev/xvdf à son instance d'origine en tant que /dev/sda1.

19.    Démarrez l'instance d'origine et connectez-vous à l'aide de SSH.

20.    Exécutez la commande lsblk pour vérifier que le volume racine de votre instance d'origine dispose désormais de 3 Tio d'espace.

$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   3T  0 disk 
└─xvda1 202:1    0   3T  0 part /