Saya memiliki pertanyaan yang sama dengan Anda, jadi saya mencari cara untuk melakukannya.
Pertama, saya melakukan ini dari Ubuntu 32-bit EBS yang didukung EBS dari wilayah AS-Timur, OS atau gambar lain dapat bekerja secara berbeda. Namun, saya menduga Anda harus baik-baik saja, selama Anda menggunakan sistem file * ext. Ini mungkin bekerja pada sistem file lain, tetapi Anda harus mencari cara untuk mengubah ukurannya sendiri.
Langkah-langkahnya pada dasarnya:
Lampirkan dua volume ke instance yang berjalan, yang pertama berdasarkan snapshot yang ingin Anda susutkan, dan yang kedua volume kosong yang memiliki ukuran baru yang ingin Anda susutkan.
Periksa sistem file volume pertama dan perbaiki kesalahan.
Kecilkan sistem file pada volume pertama sehingga hanya sebesar yang dibutuhkan untuk menyimpan data.
Salin sistem file dari volume pertama ke volume kedua.
Perluas sistem file pada volume kedua ke ukuran maksimumnya.
Pastikan semuanya terlihat bagus dengan memeriksa volume kedua untuk kesalahan.
Ambil snapshot dari volume kedua.
Buat gambar mesin berdasarkan snapshot dari volume kedua yang baru saja Anda ambil.
Pertama-tama Anda perlu mendapatkan beberapa informasi dari ami yang ingin menyusut. Khususnya, Anda memerlukan ID kernel dan ID ramdisk, jika ada (gambar yang saya susut tidak memiliki ramdisk). Semua informasi ini harus tersedia dari konsol manajemen aws, di jendela AMI.
ID kernel terlihat seperti kia-xxxxxxxx, dan ID snapshot tampak seperti snap-xxxxxxxx, dan ID ramdisk terlihat seperti RIA-xxxxxxxx.
Selanjutnya, luncurkan instance linux. Saya meluncurkan instance Ubuntu. Anda dapat menggunakan turunan t1.micro jika suka. Tidak perlu banyak tenaga untuk melakukan langkah selanjutnya.
Setelah mesin berjalan, pasang snapshot yang Anda catat dari langkah pertama. Dalam kasus saya, saya lampirkan di / dev / sdf
Kemudian, buat volume baru, dengan ukuran yang Anda inginkan. Dalam kasus saya, saya membuat volume 5GB, karena itulah ukuran yang saya inginkan. Jangan buat volume baru ini dari snapshot. Kami membutuhkan volume kosong baru. Selanjutnya, lampirkan ke instance yang berjalan, dalam kasus saya, saya melampirkannya sebagai / dev / sdg
Selanjutnya, ssh ke dalam mesin tetapi jangan memasang volume yang terpasang.
Pada titik ini, saya melakukan kesalahan pada sisi paranoia, dan saya memilih untuk memeriksa sistem file pada volume yang besar, hanya untuk memastikan tidak ada kesalahan. Jika Anda yakin tidak ada, Anda dapat melewati langkah ini:
$ sudo e2fsck -f /dev/sdf
Selanjutnya, saya mengubah ukuran sistem file pada volume besar sehingga hanya sebesar data pada disk:
$ sudo resize2fs -M -p /dev/sdf
-M menyusut, dan -p mencetak progres.
Resize2fs akan memberi tahu Anda seberapa besar sistem file shrunkin. Dalam kasus saya, itu memberi saya ukuran dalam blok 4K.
Kami sekarang menyalin sistem file shrunkin ke disk baru. Kita akan menyalin data dalam potongan 16MB, jadi kita perlu mencari tahu berapa banyak potongan 16MB yang perlu kita salin. Di sinilah ukuran sistem file menyusut datang di handey.
Dalam kasus saya, sistem file menyusut hanya lebih dari 1 GB, karena saya telah menginstal banyak program lain pada sistem dasar Ubuntu sebelum mengambil snapshot. Saya mungkin bisa pergi hanya dengan menyalin ukuran sistem file dibulatkan ke 16MB terdekat, tetapi saya ingin bermain aman.
Jadi, 128 kali potongan 16MB = 2GB:
$ sudo dd if=/dev/sdf ibs=16M of=/dev/sdg obs=16M count=128
Saya menyalin dalam blok 16MB karena dengan EBS, Anda membayar untuk setiap membaca dan menulis, jadi saya ingin meminimalkan jumlahnya sebanyak mungkin. Saya tidak tahu apakah melakukannya dengan cara ini, tetapi mungkin tidak sakit.
Kita kemudian perlu mengubah ukuran sistem file yang baru saja kita salin ke volume baru sehingga menggunakan semua ruang yang tersedia pada volume.
$ sudo resize2fs -p /dev/sdg
Akhirnya, periksa, untuk memastikan semuanya baik-baik:
$ sudo e2fsck -f /dev/sdg
Hanya itu yang perlu kita lakukan di mesin ini, meskipun tidak ada salahnya untuk memasang volume baru, seperti tes. Namun, langkah ini hampir pasti opsional, karena e2fsck seharusnya menangkap masalah.
Kita sekarang perlu memotret volume baru, dan membuat AMI berdasarkan itu. Kami sudah selesai dengan mesin, sehingga Anda dapat menghentikannya jika mau.
Pastikan volume kecil dilepas jika Anda memasangnya, lalu ambil potretnya. Sekali lagi, Anda dapat melakukan ini di konsol manajemen.
Langkah terakhir membutuhkan alat commandline ec2.
EDIT:
Karena jawaban ini diposting, konsol AWS memungkinkan Anda untuk mengklik kanan sebuah snapshot dan memilih Create Image from Snapshot. Anda masih harus memilih ID Kernel yang sesuai. Jika tidak muncul dalam daftar pastikan Anda memilih arsitektur yang sesuai.
Kami menggunakan aplikasi ec2-register untuk mendaftarkan AMI berdasarkan snapshot yang baru saja Anda ambil, jadi tuliskan nilai snap-xxxxxxxx dari snapshot yang baru saja Anda ambil.
Anda kemudian harus menggunakan perintah seperti:
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
Anda tentu saja perlu mengganti ID kernel dengan yang Anda tulis di awal dan ID snapshot dengan yang Anda buat pada langkah sebelumnya. Anda juga perlu mengarahkannya ke kunci rahasia Anda (disebut sk.pem) di atas, dan sertifikat x509 Anda (disebut cert.pem). Anda tentu saja dapat memilih apa pun yang Anda inginkan untuk nama dan deskripsi.
Semoga ini membantu.