Ho avuto la tua stessa domanda, quindi ho capito come farlo.
Innanzitutto, l'ho fatto dall'ami Ubuntu a 32 bit supportato da EBS della regione degli Stati Uniti orientali, altri sistemi operativi o immagini potrebbero funzionare in modo diverso. Tuttavia, sospetto che dovresti essere a posto, purché utilizzi un filesystem ext *. Potrebbe funzionare su altri filesystem, ma dovrai capire come ridimensionarli da soli.
I passaggi sono sostanzialmente:
Collega due volumi a un'istanza in esecuzione, il primo basato sull'istantanea che desideri ridurre e il secondo un volume vuoto con le nuove dimensioni che desideri ridurre.
Controllare il file system del primo volume e riparare eventuali errori.
Riduci il file system sul primo volume in modo che sia grande solo quanto deve essere per contenere i dati.
Copia il file system dal primo volume al secondo.
Espandere il file system sul secondo volume alla dimensione massima.
Assicurati che tutto appaia bene controllando il secondo volume per errori.
Scatta un'istantanea del secondo volume.
Crea un'immagine macchina in base all'istantanea del secondo volume appena acquisito.
Devi prima ottenere alcune informazioni dall'ami che vuoi ridurre. In particolare, sono necessari l'ID kernel e l'ID ramdisk, se presenti (l'immagine che ho ridotto non aveva un ramdisk). Tutte queste informazioni dovrebbero essere disponibili dalla console di gestione di aws, nella finestra AMI.
L'ID del kernel assomiglia a kia-xxxxxxxx e l'ID istantanea assomiglia a snap-xxxxxxxx e gli ID ramdisk assomigliano a RIA-xxxxxxxx.
Quindi, avvia un'istanza di Linux. Ho lanciato un'istanza di Ubuntu. Se lo desideri, puoi utilizzare un'istanza t1.micro. Non ci vuole molto potere per fare questi prossimi passi.
Dopo che la macchina è in esecuzione, allegare l'istantanea annotata dal primo passaggio. Nel mio caso, l'ho allegato a / dev / sdf
Quindi, crea un nuovo volume, con le dimensioni che desideri. Nel mio caso, ho creato un volume da 5 GB, in quanto è la dimensione che volevo ridurre. Non creare questo nuovo volume da un'istantanea. Abbiamo bisogno di un nuovo volume vuoto. Quindi, collegalo all'istanza corrente, nel mio caso l'ho collegato come / dev / sdg
Quindi, ssh nella macchina ma non montare i volumi collegati.
A questo punto, ho commesso un errore sul lato della paranoia e ho scelto di controllare il file system sul volume di grandi dimensioni, solo per assicurarmi che non ci fossero errori. Se sei sicuro che non ce ne siano, puoi saltare questo passaggio:
$ sudo e2fsck -f /dev/sdf
Successivamente, ho ridimensionato il file system sul volume di grandi dimensioni in modo che fosse grande solo quanto i dati sul disco:
$ sudo resize2fs -M -p /dev/sdf
-M lo riduce e -p stampa l'avanzamento.
Resize2fs dovrebbe dirti quanto è grande il filesystem shrunkin. Nel mio caso, mi ha dato la dimensione in blocchi 4K.
Copiamo ora il file system shrunkin sul nuovo disco. Coperemo i dati in blocchi da 16 MB, quindi dobbiamo capire quanti blocchi da 16 MB dobbiamo copiare. È qui che la dimensione del file system ridotta si rivela utile.
Nel mio caso, il file system ridotto era poco più di 1 GB, perché avevo installato molti altri programmi sul sistema Ubuntu di base prima di scattare un'istantanea. Probabilmente avrei potuto andarmene semplicemente copiando la dimensione del file system arrotondata ai 16 MB più vicini, ma volevo giocarci sul sicuro.
Quindi, 128 volte blocchi da 16 MB = 2 GB:
$ sudo dd if=/dev/sdf ibs=16M of=/dev/sdg obs=16M count=128
Ho copiato in blocchi di 16 MB perché con EBS paghi per ogni lettura e scrittura, quindi volevo minimizzare il numero di essi il più possibile. Non so se farlo in questo modo lo abbia fatto, ma probabilmente non ha fatto male.
Dobbiamo quindi ridimensionare il file system che abbiamo appena copiato nel nuovo volume in modo che utilizzi tutto lo spazio disponibile sul volume.
$ sudo resize2fs -p /dev/sdg
Infine, controlla, per assicurarti che tutto vada bene:
$ sudo e2fsck -f /dev/sdg
Questo è tutto ciò che dobbiamo fare in questa macchina, anche se non poteva far male montare il nuovo volume, proprio come un test. Tuttavia, questo passaggio è quasi certamente facoltativo, poiché e2fsck avrebbe dovuto rilevare eventuali problemi.
Ora dobbiamo creare un'istantanea del nuovo volume e creare un AMI basato su di esso. Abbiamo finito con la macchina, quindi puoi terminarla se vuoi.
Assicurati che il piccolo volume sia smontato se lo hai montato, quindi fai un'istantanea. Ancora una volta, puoi farlo nella console di gestione.
Il passaggio finale richiede gli strumenti ec2 della riga di comando.
MODIFICARE:
Poiché questa risposta è stata pubblicata, la console AWS ti consente semplicemente di fare clic con il pulsante destro del mouse su un'istantanea e selezionare Crea immagine da istantanea. Sarà comunque necessario selezionare l'ID kernel appropriato. Se non appare nell'elenco, assicurarsi di aver selezionato l'architettura appropriata.
Usiamo l'applicazione ec2-register per registrare un AMI basato sull'istantanea appena scattata, quindi annota il valore snap-xxxxxxxx dall'istantanea appena scattata.
Dovresti quindi usare un comando come:
ec2-register -C cert.pem -K sk.pem -n The_Name_of_Your_New_Image
-d Your_Description_of_This_New_AMI --kernel aki-xxxxxxxx
-b "/dev/sda1=snap-xxxxxxxx" --root-device-name /dev/sda1
Ovviamente è necessario sostituire l'ID del kernel con quello annotato all'inizio e l'ID dell'istantanea con quello creato nel passaggio precedente. Devi anche puntarlo alla tua chiave segreta (chiamata sk.pem) sopra e al tuo certificato x509 (chiamato cert.pem). Puoi ovviamente scegliere quello che vuoi per il nome e la descrizione.
Spero che sia di aiuto.