web-dev-qa-db-fra.com

Comment réduire la taille du volume racine AWS EBS?

L'agrandissement d'une instance EC2 est facile comme un souffle (par exemple, créer une AMI, lancer une instance à partir de celle-ci, puis modifier la taille de stockage).

Mais la réduire devient plus difficile. Je souhaite réduire la taille du volume racine d'une instance Amazon Web Services (AWS) EC2 Elastic Block Store (EBS). Il y a un couple d'anciennes procédures de haut niveau sur le net. La version plus détaillée que j'ai trouvée est une réponse vieille d'un an à une question StackOverflow: comment puis-je réduire ma capacité de volume ebs , les étapes ont un niveau assez élevé:

Créez un nouveau volume EBS de la taille souhaitée (par exemple/dev/xvdg)

Lancer une instance et y attacher les deux volumes EBS

Vérifiez le système de fichiers (du volume racine d'origine): (par exemple) e2fsck -f/dev/xvda1

Réduire au maximum le volume racine d'origine: (par exemple ext2/3/4) resize2fs -M -p/dev/xvda1

Copiez les données avec dd:

  • Choisissez une taille de morceau (j'aime 16 Mo)

  • Calculez le nombre de morceaux (en utilisant le nombre de blocs de la sortie resize2fs): blocs * 4/(chunk_size_in_mb * 1024) - arrondissez un peu pour la sécurité

  • Copiez les données: (par exemple) dd if =/dev/xvda1 ibs = 16M of =/dev/xvdg obs = 16M count = 80

Redimensionnez le système de fichiers sur le nouveau volume EBS (plus petit): (par exemple) resize2fs -p/dev/xvdg

Vérifiez le système de fichiers (du volume racine d'origine): (par exemple) e2fsck -f/dev/xvdg

Détachez votre nouveau volume racine EBS et attachez-le à votre instance d'origine

Je ne parviens pas à trouver une solution détaillée "comment faire" étape par étape.

Mon volume racine EBS est attaché à une instance HVM Ubuntu.

Toute aide sera grandement appréciée.

17
herve

Dans la console AWS:

  1. Arrêtez l'instance que vous souhaitez redimensionner

  2. Créez un instantané du volume actif, puis créez un volume "SSD à usage général" à partir de cet instantané.

  3. Créez un autre volume "SSD à usage général" à la taille souhaitée.

  4. Attachez ces 3 volumes à l'instance en tant que:

    • / dev/sda1 pour le volume actif.
    • / dev/xvdf pour le volume qui est la taille cible.
    • / dev/xvdg pour le volume créé à partir de l'instantané du volume actif.
  5. Démarrez l'instance.

  6. Connectez-vous à la nouvelle instance via SSH.

  7. créez ces nouveaux répertoires:

mkdir /source /target

  1. créer un système de fichiers ext4 sur un nouveau volume:

mkfs.ext4 /dev/xvdf

  1. montez-le dans ce répertoire:

mount -t ext4 /dev/xvdf /target

  1. Ceci est très important, le système de fichiers a besoin d'un e2label pour que linux le reconnaisse et le démarre, utilisez "e2label/dev/xvda1" sur une instance active pour voir ce que cela devrait être, dans ce cas, le libellé est: "/"

e2label /dev/xvdf /

  1. monter le volume créé à partir de l'instantané:

mount -t ext4 /dev/xvdg /source

  1. Copiez le contenu:

rsync -ax /source/ /target

Remarque: il n'y a pas de "/" suivant "/ cible". En outre, il peut y avoir quelques erreurs sur les liens symboliques et les attr, mais le redimensionnement a toujours réussi

  1. Démontez les systèmes de fichiers:

umount /target
umount /source

  1. De retour dans AWS Console: arrêtez l'instance et détachez tous les volumes.

  2. Attachez le nouveau volume dimensionné à l'instance comme: "/ dev/sda1"

  3. Démarrez l'instance et elle devrait démarrer.

ÉTAPE 10 IS IMPORTANT: étiquetez le nouveau volume avec "e2label" comme mentionné ci-dessus, ou l'instance semblera démarrer dans aws mais ne passera pas la vérification de connexion.

6
bill

Aucune des autres solutions ne fonctionnera si le volume est utilisé comme périphérique racine (amorçable).

Le disque nouvellement créé ne contient pas la partition de démarrage, il devrait donc avoir GRUB installé et certains indicateurs correctement configurés avant qu'une instance puisse l'utiliser comme volume racine.

Ma (à partir d'aujourd'hui, solution de travail ) pour réduire un volume racine est:

Contexte: Nous avons une instance A, dont nous voulons réduire le volume racine. Appelons ce volume VA. Nous voulons réduire VA de 30 Go à 10 Go

  1. Créez une nouvelle instance ec2, B, avec le même système d'exploitation que l'instance A. En tant que stockage, choisissez un volume du même type que VA, mais avec une taille de 10 Go. (ou quelle que soit votre taille cible). Nous avons donc maintenant une instance B qui utilise ce nouveau volume (appelons-le VB) comme volume racine.
  2. Une fois la nouvelle instance (B) en cours d'exécution. Arrêtez-le et détachez son volume racine (VB).

REMARQUE: Les étapes suivantes sont principalement tirées de la solution de @bill:

  1. Arrêtez l'instance que vous souhaitez redimensionner (A).

  2. Créez un instantané du volume VA puis créez un volume "SSD à usage général" à partir de cet instantané. Ce volume, nous l'appellerons VASNAP.

  3. Faites tourner une nouvelle instance avec Amazon Linux, nous appellerons cette instance C. Nous allons simplement utiliser cette instance pour copier le contenu de VASNAP vers VB. Nous pourrions probablement également utiliser l'instance A pour effectuer ces étapes, mais je préfère le faire sur une machine indépendante.

  4. Attachez les volumes suivants à l'instance C./dev/xvdf pour VB./dev/xvdg pour VASNAP.

  5. Redémarrez l'instance C.

  6. Connectez-vous à l'instance C via SSH.

  7. Créez ces nouveaux répertoires:

mkdir /source /target

  1. Formatez la partition principale de VB avec un système de fichiers ext4:

mkfs.ext4 /dev/xvdf1

Si vous n'obtenez aucune erreur, passez à l'étape 11. Sinon, si vous n'avez pas /dev/xvdf1, vous devez créer la partition en procédant comme suit: i-vii:

i) Si /dev/xvdf1 n'existe pas pour une raison quelconque, vous devez le créer. Entrez d'abord:

Sudo fdisk /dev/xvdf.

ii) Essuyez le disque en entrant: wipefs

iii) Créez une nouvelle partition en entrant: n

iv) Entrez p pour créer la partition principale

v) Continuez à appuyer sur Entrée pour continuer avec les paramètres par défaut.

vi) Lorsqu'il demande à nouveau une commande, entrez w pour écrire les modifications et quittez.

vii) Vérifiez que vous disposez du /dev/xvdf1 partitionner en faisant: lsblk

Vous devriez voir quelque chose comme:

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  250G  0 disk
└─xvda1 202:1    0  250G  0 part
xvdf    202:80   0   80G  0 disk
└─xvdf1 202:81   0   80G  0 part 
xvdg    202:96   0  250G  0 disk
└─xvdg1 202:97   0  250G  0 part

Passez maintenant à l'étape 11.

  1. Montez-le dans ce répertoire:

mount -t ext4 /dev/xvdf1 /target

  1. Ceci est très important, le système de fichiers a besoin d'un e2label pour Linux pour le reconnaître et le démarrer, utilisez "e2label/dev/xvda1" sur une instance active pour voir ce que cela devrait être, dans ce cas, le libellé est: "/"

e2label /dev/xvdf1 /

  1. Montez VASNAP sur/source:

mount -t ext4 /dev/xvdg1 /source

  1. Copiez le contenu:

rsync -vaxSHAX /source/ /target

Remarque: il n'y a pas de "/" suivant "/ cible". En outre, il peut y avoir quelques erreurs sur les liens symboliques et les attr, mais le redimensionnement a toujours réussi

  1. Umount VB:

umount /target

  1. De retour dans la console AWS: Dettach VB de l'instance C, et également dettach VA de A.

  2. Attachez le nouveau volume de taille (VB) à l'instance comme: "/ dev/xvda"

  3. L'instance de démarrage A, maintenant son périphérique racine fait 10 Go :)

  4. Supprimez les instances B et C, ainsi que tous les volumes sauf VB, qui est désormais le volume racine de l'instance A.

6
Ruben Serrate

Les étapes suivantes ont fonctionné pour moi

Étape 1. Créez un instantané du volume racine ebs et créez un nouveau volume à partir d'un instantané (appelons cette copie de volume)

Étape 2. Créez une nouvelle instance avec le volume racine ebs avec la taille souhaitée. (appelons ce volume redimensionné) Ce volume ebs aura la partition correcte pour le démarrage. (La création d'un nouveau volume ebs à partir de zéro n'a pas fonctionné pour moi)

Étape 3. Attachez volume-resize et volume-copy à une instance.

Étape 4. Formatez le redimensionnement du volume.

Sudo fdisk -l
    Sudo mkfs -t ext4 /dev/xvdf1

Remarque: assurez-vous que le volume de la partition est entré /dev/xvdf1 ne pas /dev/xvdf

Étape 5. Montez volume-resize et volume-copy mkdir/mnt/copy mkdir/mnt/resize

Sudo mount /dev/xvdh1 /mnt/copy
Sudo mount /dev/xvdf1 /mnt/resize

Étape 6. Copiez les fichiers

rsync -ax /mnt/copy/ /mnt/resize

Étape 7. Assurez-vous que e2label est identique au volume racine

Sudo E2label /dev/xvdh1 > cloudimg-rootfs
Sudo E2label /dev/xvdf1 cloudimg-rootfs

Étape 8. Mettez à jour grub.conf sur la copie de volume pour correspondre au nouveau volume udid

Recherchez et remplacez uudid dans /boot/grub/grub.cfg

ubuntu@server:~/mnt$ Sudo blkid
/dev/xvdh1: LABEL="cloudimg-rootfs" UUID="1d61c588-f8fc-47c9-bdf5-07ae1a00e9a3" TYPE="ext4"
/dev/xvdf1: LABEL="cloudimg-rootfs" UUID="78786e15-f45d-46f9-8524-ae04402d1116" TYPE="ext4"

Étape 9. Démonter les volumes

Étape 10. Attachez un nouveau volume ebs redimensionné à l'instance/dev/sda1

2
DrewJaja

L'article ci-dessous est un bon didacticiel simple sur la façon de réduire la taille du volume EBS. Il contient un guide étape par étape et des captures d'écran faciles à suivre.

Diminuez la taille du volume EBS dans votre instance EC2

0
RHPT

Voici une approche alternative;

Attachez et montez l'ancien volume EBS sur une instance EC2 en cours d'exécution. Si vous souhaitez copier un volume de démarrage, il est préférable de le faire sur une autre instance, avec l'ancien volume monté en tant que données, et non avec le volume utilisé comme système actif.

Créez un nouveau volume EBS de la taille souhaitée.

Attachez le nouveau volume à l'instance et formatez (soigneusement) un nouveau système de fichiers dessus (par exemple, en utilisant mkfs). Montez-le.

Copiez l'ancien contenu du système de fichiers de l'ancien volume vers le nouveau volume:

rsync -vaxSHAX /oldvol/ /newvol/

Démontez le nouveau volume et détachez-le de l'instance.

Si vous copiez le système de fichiers racine, alors:

Créez un instantané EBS du nouveau volume.

Enregistrez l'instantané en tant que nouvelle AMI.

0
Eric Hammond