web-dev-qa-db-fra.com

Amazon EC2 - Échangez le périphérique de stockage d'instance racine avec le périphérique EBS

J'ai une instance EC2 avec un périphérique "magasin d'instances" en tant que périphérique racine. Maintenant, je voudrais attacher un volume EBS à cette même instance, seulement que je veux ça doit être le périphérique racine. Est-ce possible? Qu'advient-il du périphérique de stockage d'instance dans ce cas?

Merci d'avance

52
Sug

Vous pouvez migrer votre instance en cours d'exécution vers une AMI soutenue par EBS. Voici comment je l'ai fait:

  • Démarrez une instance régulière S3 AMI (ou comme vous en avez déjà une, utilisez-la)
  • Créez un volume EBS de la même taille que votre partition racine sda1 (actuellement la valeur par défaut est 10G pour un m1.small et éventuellement d'autres)
  • Attachez ce volume EBS à un périphérique de bloc gratuit sur l'instance à l'aide de la console Web ou des outils de ligne de commande (par exemple/dev/sdd)
  • Arrêtez les services sur l'instance (par exemple /etc/init.d/mysql stop etc.)
  • Copiez le volume racine éphémère sur le volume EBS:

dd bs = 65536 if =/dev/sda1 of =/dev/sdd

  • Vérifiez la cohérence du volume EBS:

fsck/dev/sdd

  • Montez le volume EBS sur l'instance:

mount/dev/sdd/root/ebs-vol

  • Supprimez l'entrée/mnt du fstab sur votre vol EBS:

vim/root/ebs-vol/etc/fstab

  • Démontez le volume EBS:

umount/dev/sdd

  • Créez un instantané du volume EBS à l'aide de la console de gestion AWS (ou des outils API de ligne de commande)
  • Notez l'ID de l'instantané
  • Enregistrez l'image d'instantané avec AWS et prenez note de l'ID AMI produit, lors de l'enregistrement, n'oubliez pas de spécifier l'image du noyau et du disque virtuel (celles-ci doivent être les mêmes que celles utilisées dans votre instance actuelle):

ec2-register -s snap-12345 -a i386 -d "Description de l'AMI" -n "nom-de-l'image" -k aki-12345 -r ari-12345

  • Pour créer une instance avec plus de 10 G de stockage persistant, vous devez utiliser les outils cli. par exemple. pour 20G

ec2-run-instances AMI-54321 -t m1.small -n 1 -g par défaut --available-zone = eu-west-1a -k ec2-key1 -b/dev/sda1 = snap-12345: 20: false

  • Si vous démarrez une instance basée sur l'une de ces AMI avec> la taille de volume par défaut, une fois qu'elle est démarrée, vous pouvez effectuer un redimensionnement en ligne du système de fichiers:

resize2fs/dev/sda1

79
AlexM

Cela peut être fait sans créer une nouvelle AMI et sans lancer une nouvelle instance. Une fois terminé, le volume racine d'origine reste attaché sur/dev/sda1 (ou là où il a été initialement monté./Dev/sda1 est la valeur par défaut pour de nombreuses AMI). Le volume racine d'origine ne sera pas monté sur le système de fichiers - vous devrez le faire vous-même via la commande "mount".

La technique nécessite les noyaux Ubuntu récents, ceux qui tournent dans leurs versions 10.04 et 10.10. Consultez alestic.com pour les ID AMI les plus récents pour ces versions d'Ubuntu. Ces noyaux récents sont configurés pour démarrer à partir de tout périphérique connecté dont le nom de volume est "uec-rootfs". Si vous exécutez l'un de ces noyaux, tout ce que vous devez faire est de changer le nom de volume du volume racine actuel (stockage d'instance) en autre chose, changer le nom de volume de la nouvelle racine en uec-rootfs, puis redémarrer. Si vous n'exécutez pas l'un de ces noyaux, vous ne pouvez pas utiliser cette technique.

Voici le code. Mettez ceci dans un fichier (reroot.sh) sur l'instance:

#! /bin/bash
device=$1
# change the filesystem labels
e2label /dev/sda1 old-uec-rootfs
e2label $device uec-rootfs

Vous devez d'abord attacher le volume EBS que vous souhaitez utiliser comme nouvelle racine à l'un des périphériques disponibles /dev/sdf../dev/sdp. Cela peut être fait soit avec des appels directs à l'API EC2, avec les outils de l'API de ligne de commande EC2 (ec2-attach-volume), soit avec une bibliothèque telle que boto , ou via l'interface utilisateur de la AWS Management Console.

Ensuite, exécutez le script reroot.sh en tant que root et fournissez le périphérique sur lequel vous avez attaché le nouveau volume racine, comme suit:

Sudo reroot.sh /dev/sdp

Cela fera le sale boulot. Ensuite, vous redémarrez simplement:

Sudo shutdown -r now

Alto.

Pour tester cela, vous devez créer un volume EBS dont vous savez qu'il démarrera correctement. J'aime le faire en prenant un instantané du volume racine des AMI soutenues par EBS à partir des AMI Ubuntu mentionnées ci-dessus. À partir de cet instantané, vous pouvez créer un nouveau volume EBS amorçable dans n'importe quelle zone de disponibilité. Assurez-vous que vous pouvez faire la différence entre le volume racine d'origine de l'instance en cours d'exécution et le nouveau volume racine EBS - avant d'exécuter la procédure de redémarrage ci-dessus, vous pouvez placer un fichier "marqueur" sur l'ancien volume racine:

cd
touch this-is-the-original-root-volume

Ensuite, lorsque vous redémarrez et redémarrez, si ce fichier existe dans votre répertoire personnel, vous exécutez toujours avec le volume racine d'origine. Si ce n'est pas le cas, le redémarrage et le redémarrage ont fonctionné.

Voici deux exemples d'utilisation de cette technique, avec des explications détaillées:

http://shlomoswidler.com/2011/02/play-chicken-with-spot-instances.html

http://shlomoswidler.com/2011/02/recapture-unused-ec2-minutes.html

13
Shlomo Swidler

Vous pouvez également essayer l'outil suivant pour convertir une AMI de stockage d'instance en une AMI de démarrage ebs: https://cloudyscripts.com/tool/show/2

6
elasticsecurity

AlexM a trouvé de bonnes étapes.

Vous seriez également intéressé à vérifier ce lien: http://coderslike.us/2009/12/07/Amazon-ec2-boot-from-ebs-and-AMI-conversion/

EDIT: Un autre lien: http://www.elastician.com/2009/12/creating-ebs-backed-AMI-from -s3-supported.html

1
Gnanam

Je ne sais pas à quel point il serait facile de convertir une instance existante, mais Amazon propose désormais la possibilité de démarrer directement à partir d'un volume EBS lorsque vous créez une nouvelle instance.

0
gareth_bowles

Au lieu de l'autre long commentaire ici, j'ai utilisé la commande suivante pour ce faire:

ec2-register --snapshot snap-9eb4ecf6 --architecture i386 --name "Zenoss Enterprise 3.0 beta 2 on centOS" --description "Il s'agit d'une installation de zenoss core beta 1 et zenoss enterprise beta 2, toutes deux de la version 3.0 ( ou en interne 2.5.70 217). Un périphérique de bloc ebs a été connecté, et le système de fichiers a été synchronisé, puis ebs a été instantané et cela est basé sur cela. " --root-device-name/dev/sda1 --kernel aki-9b00e5f2

0
user368678