2010-01-17 15 views

risposta

78

È possibile eseguire la migrazione dell'istanza in esecuzione su un AMI supportato da EBS. Ecco come ho fatto:

  • avvio di una regolare S3 AMI esempio sostenuto (o dalla hai già un caso si è soddisfatti, uso questo)
  • Fai un volume EBS delle stesse dimensioni come partizione root sda1 (attualmente il valore predefinito è 10G per un m1.small e probabilmente altri)
  • Collegare quel volume EBS a un dispositivo a blocco libero sull'istanza utilizzando la console Web o gli strumenti da riga di comando (ad esempio/dev/sdd)
  • Arresta i servizi sull'istanza (ad esempio /etc/init.d/mysql stop ecc.)
  • Copiare il volume di root effimera al volume EBS:

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

  • Controllare il volume EBS per consistenza:

fsck/dev/sdd

  • montare un volume EBS sul esempio:

montaggio/dev/sdd/root/EBS-vol

  • Rimuovere la voce/mnt dal fstab il tuo EBS vol:

vim/root/EBS-vol/etc/fstab

  • Smonta il volume EBS:

umount/dev/sdd

  • creare uno snapshot di il volume EBS utilizzando la console di gestione AWS (o gli strumenti API della riga di comando)
  • Prendere nota di t egli snapshot id
  • registrare l'immagine istantanea con AWS e prendere nota della id AMI prodotto, al momento della registrazione ricordatevi di specificare l'immagine del kernel e il ramdisk (questi dovrebbero essere gli stessi di quelli utilizzati nella vostra istanza corrente):

EC2-registrarsi -s snap-12345 -a i386 -d "Descrizione di AMI" -n "nome-di-immagine" k aki-12345 -r ari-12345

  • Per crea un'istanza con più di 10G di archiviazione persistente devi utilizzare gli strumenti cli. per esempio. per 20G

EC2-run-instances ami-54321 -t m1.piccolo -n 1 -g di default --availability-zone = eu-ovest-1a -k EC2-key1 -b/dev/sda1 = snap-12345: 20: false

  • Se si avvia un esempio basa su una di queste AMI con> dimensioni del volume di default, una volta che è avviato si può fare un ridimensionamento in linea del filesystem:

resize2fs/dev/sda1

+2

+1 belle istruzioni, anche se non credo che sia quello che il PO vuole. – kdgregory

+1

Grazie mille per la risposta completa. È fantastico – Sug

+3

Fondamentalmente abbiamo fatto lo stesso, ma usato rsync con escludi invece di dd, ha funzionato anche come un fascino. Un'altra cosa di cui occuparsi (so che è ovvio, ma succede più e più volte): quando si crea il volume EBS, assicurarsi di controllare che si trovi nella stessa regione dell'istanza a cui si desidera collegarlo; -) –

0

Al posto dell'altro commento lungo qui, ho usato il seguente comando per fare questo:

EC2-registrarsi --snapshot snap-9eb4ecf6 --architecture i386 - nome "Zenoss Enterprise 3.0 beta 2 on centOS" - descrizione "Si tratta di un'installazione di zenoss core beta 1 e zenoss enterprise beta 2, entrambe della versione 3.0 (o internamente 2.5.70 217). Un dispositivo a blocchi EBS è stato attaccato, e il file system rsynced sopra, quindi EBS è stato snapshotted e questo è basedd fuori questo ". --root-device-name/dev/sda1 --kernel aki-9b00e5f2

13

questo può essere fatto senza creare un nuovo AMI e senza lanciare un nuova istanza. Al termine, il volume di root originale rimane collegato su/dev/sda1 (o ovunque sia stato originariamente montato./Dev/sda1 è l'impostazione predefinita per molte AMI). Il volume di root originale non verrà montato sul filesystem: dovrai farlo tu stesso tramite il comando "mount".

La tecnica richiede i recenti kernel di Ubuntu, quelli che funzionano nelle loro versioni 10.04 e 10.10. Controlla alestic.com per i più recenti ID AMI per queste versioni di Ubuntu. Questi kernel recenti sono configurati per l'avvio da qualsiasi dispositivo collegato la cui etichetta di volume è "uec-rootfs". Se si sta utilizzando uno di questi kernel, è sufficiente modificare l'etichetta del volume del volume di root corrente (istanza-archivio) con un'altra, modificare l'etichetta del volume della nuova radice su uec-rootfs e quindi riavviare. Se non stai eseguendo uno di questi kernel, non puoi usare questa tecnica.

Ecco il codice. Mettere questo in un file (reroot.sh) nell'istanza:

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

In primo luogo si dovrebbe collegare il volume EBS che si desidera agire come la nuova radice di uno dei dispositivi disponibili /dev/sdf../dev/SDP. Questo può essere fatto con chiamate API EC2 dirette, con lo EC2 Command Line API tools (ec2-attach-volume), o con una libreria come boto o tramite l'interfaccia utente della Console di gestione AWS.

Poi, eseguire lo script reroot.sh come root, e di fornire il dispositivo è stato collegato il nuovo volume di root su, come segue:

sudo reroot.sh /dev/sdp 

questo farà il lavoro sporco.Quindi riavviare semplicemente:

sudo shutdown -r now 

Viola.

Per verificare ciò, è necessario creare un volume EBS che sapete si avvierà correttamente. Mi piace farlo facendo un'istantanea del volume di root delle AMI supportate da EBS da quelle AMI di Ubuntu sopra menzionate. Da tale istantanea è possibile creare un nuovo volume EBS avviabile in qualsiasi zona di disponibilità. Assicurarsi che si può dire la differenza tra volume di root originale del istanza in esecuzione e il nuovo volume di root EBS - prima di eseguire la procedura reroot sopra si può mettere in un file di "marker" sul vecchio volume di root:

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

Quindi, quando si riavvia e si riavvia, se quel file esiste nella propria directory home, si sta ancora utilizzando il volume di root originale. Se non c'è, allora il reroot-and-reboot ha funzionato.

Qui ci sono due casi esempio di utilizzo di questa tecnica, con spiegazioni approfondite:

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

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

+1

+1, e grazie per aver fatto la nota sulla mia risposta ... ora è cancellato. – kdgregory