Abbiamo già parlato in altre occasioni dell’utilità di utilizzare le istanze EBS su Amazon Web Services.
Che fare però se stiamo finendo lo spazio disco e rischiamo di bloccare il server ospitato? Se potete permettervi un piccolo tempo di down della virtual machine (pochi minuti), ecco come fare.
Prendiamo ad esempio un’istanza Ubuntu 9.10 Karmic EBS boot instance (ami-6743ae0e). Se controlliamo lo spazio disco otterremo:
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 15G 675M 14G 5% /
Eseguiremo tutti questi comandi su una seconda macchina, uguale a quella produttiva, che accenderemo appositamente. Scegliamo innanzitutto una nuova dimensione del disco:
instanceid=<YOURINSTANCEID>
size=20
Otteniamo anche informazioni circa l’id del root EBS volume e della availability zone:
oldvolumeid=$(ec2-describe-instances $instanceid |
egrep “^BLOCKDEVICE./dev/sda1” | cut -f3)
zone=$(ec2-describe-instances $instanceid | egrep ^INSTANCE | cut -f12)
echo “instance $instanceid in $zone with original volume $oldvolumeid”
Arrestate (non terminate!) l’istanza:
ec2-stop-instances $instanceid
Staccate il volume originario dall’istanza:
while ! ec2-detach-volume $oldvolumeid; do sleep 1; done
Create una snapshot del volume originario:
snapshotid=$(ec2-create-snapshot $oldvolumeid | cut -f2)
while ec2-describe-snapshots $snapshotid | grep -q pending; do sleep 1; done
echo “snapshot: $snapshotid”
Create un nuovo volume a partire dalla snapshot, specificando in questo punto la nuova dimensione, ovviamente maggiore dell’originale:
newvolumeid=$(ec2-create-volume \
–availability-zone $zone \
–size $size \
–snapshot $snapshotid |
cut -f2)
echo “new volume: $newvolumeid”
Attaccate il nuovo volume all’istanza:
ec2-attach-volume \
–instance $instanceid \
–device /dev/sda1 \
$newvolumeid
while ! ec2-describe-volumes $volumeid | grep -q attached; do sleep 1; done
Avviate l’istanza e scoprite qual’è il suo nuovo IP pubblico o l’hostname. Se state utilizzando elastic IP, assegnatelo a questa nuova istanza:
ec2-start-instances $instanceid
while ! ec2-describe-instances $instanceid | grep -q running; do sleep 1; done
ec2-describe-instances $instanceid
Collegatevi all’istanza via ssh e ridimensionate il file system di root per utilizzare il nuovo spazio messo a disposizione:
# ext3 root file system (è il più comune che troverete nelle varie immagini disponibili)
sudo resize2fs /dev/sda1
# XFS root file system:
sudo apt-get update && sudo apt-get install -y xfsprogs
sudo xfs_growfs /
Verificate che dopo tutto questo lavoraccio la partizione sia veramente diventata da 20 GB:
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 20G 679M 19G 4% /
Cancellate a questo punto il vecchio volume EBS e la snapshot se non vi servono più. Magari tenetevi per qualche tempo almeno la snapshot, non si sa mai:
ec2-delete-volume $oldvolumeid
ec2-delete-snapshot $snapshotid
Dal momento che avete connesso a mano questo volume all’istanza, non verrà cancellato automaticamente in fase di cancellazione dell’istanza stessa, a meno che non modifichiate questo comportamento.