Mengecilkan ukuran volume Amazon EBS

25

Saya telah melihat jawaban ini untuk meningkatkan volume EBS , tetapi saya ingin mengecilkannya.

Gambar-gambar default Ubuntu Server adalah 15 GB sementara saya benar-benar hanya membutuhkan 2 GB maks (saya menggunakan volume yang berbeda untuk data). Apakah ada cara untuk mengecilkan ukuran volume?

Peter Smit
sumber

Jawaban:

27

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:

  1. 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.

  2. Periksa sistem file volume pertama dan perbaiki kesalahan.

  3. Kecilkan sistem file pada volume pertama sehingga hanya sebesar yang dibutuhkan untuk menyimpan data.

  4. Salin sistem file dari volume pertama ke volume kedua.

  5. Perluas sistem file pada volume kedua ke ukuran maksimumnya.

  6. Pastikan semuanya terlihat bagus dengan memeriksa volume kedua untuk kesalahan.

  7. Ambil snapshot dari volume kedua.

  8. 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.

Harun
sumber
Terima kasih, itu membantu! Untuk volume besar (seperti 1TB) prosedur ini membutuhkan waktu yang lama pada contoh mikro. Saya telah melihat penyalinan volume berbasis rsync tanpa-fsck (mis. Di sini ubuntuforums.org/showpost.php?p=9866025&postcount=27 ), tetapi pendekatan berbasis dd terasa jauh lebih dapat diandalkan, bahkan untuk volume non-root.
chronos
Perintah pertama sudo e2fsck -f /dev/sdfmungkin merupakan langkah yang diperlukan sebelum melakukan pengubahan ukuran (ada pada contoh khusus saya, Amazon Linux AMI).
notacouch
1
Harus jelas tetapi jangan lupa untuk membuat sistem file pada volume (/ facepalm) sesuai AWS docs sudo mkfs -t ext4 /dev/sdg,.
notacouch
1

Ya, saya juga bertanya-tanya. Tutorial berikut ini berlebihan, tetapi saya pikir ini berisi alat yang diperlukan: http://www.linuxconfig.org/Howto_CREATE_BUNDLE_UPLOAD_and_ACCESS_custom_Debian_AMI_using_ubuntu

Alih-alih menginstal ke disk image baru seperti di atas, seharusnya dimungkinkan untuk mengaktifkan AMI besar, membuat EBS baru, melampirkan EBS ke instance yang sedang berjalan, dan menyalin AMI yang sedang berjalan ke EBS baru. Akhirnya, daftarkan EBS baru sebagai AMI.

Lihatlah postingan blog ini untuk latar belakang lebih lanjut, terutama komentar oleh freremark: http://alestic.com/2010/01/public-ebs-boot-amis-for-ubuntu-on-amazon-ec2

Pada catatan terakhir, euca2ools sepertinya merupakan pengganti yang bagus untuk ec2-ami-tools - euca2ools termasuk halaman manual yang sebenarnya! Mereka memiliki semua nama yang sama dengan perintah ec2- *, hanya dengan awalan euca-. http://open.eucalyptus.com/wiki/Euca2oolsUsing


sumber
0

Saya ingin mengurangi ukuran volume yang digunakan oleh contoh EC2 umum. Saya mengikuti langkah-langkah serupa dengan jawaban lain di sini tetapi mengalami masalah. Jadi, inilah yang harus saya lakukan untuk mengecilkan volume root saya ...

Di AWS Console

 1. Stop the source EC2 instance
 2. Create a snapshot of the volume you want to shrink
 3. Use the snapshot to create a new 'source' volume
 4. Created a new volume with smaller size (made sure it was big enough for the data on source)
 5. Attached both volumes to any EC2 instance (mine were /dev/sdf = source & /dev/sdg = target)
 6. Start the EC2 instance

Pada contoh EC2

 7. sudo su -   (everything from here is run as root)
 8. mkdir /source /target
 9. mount -t ext4 /dev/sdf /source
 10. mkfs.ext4 /dev/sdg
 11. mount -t ext4 /dev/sdg /target
 12. rsync -aHAXxSP /source/ /target 
     ** notice that there is no trailing '/' after target if 
       you put one there your data will be copied to 
       /target/source and you will have to move it up a directory
 13. cat /boot/grub/grub.conf  (indicated that grub is using root=LABEL=/)
 14. cat /source/etc/fstab (indicated that fstab was also using LABEL=/)
 15. e2label /dev/sdg /
 16. umount /source
 17. umount /target

Kembali di Konsol AWS

 18. Stop the instance
 19. Detach ALL volumes from the instance
 20. Attach the 'target' volume to the instance using /dev/sda1 as the device
 21. Start the instance

Di sinilah kami mengalami masalah yang belum saya sebutkan sejauh yang saya bisa temukan. Contoh dimulai dengan baik, bagus! Tetapi ketika saya mencoba ssh ke instance, saya tidak bisa terhubung. Setelah banyak variasi dari langkah-langkah di atas, saya akhirnya memutuskan untuk mencoba menggunakan volume root dari instance EC2 yang baru saja diputarkan.

Di AWS Console

 1. Create a new EC2 instance with the right sized root volume
 2. Stop the new instance
 3. Detach the /dev/sda1 volume from the new instance
    ** used the 'source' volume from before & the new volume we just detached
 4. Attached both volumes to the original EC2 instance (/dev/sdf & /dev/sdg)
 5. Start the instance with the attached volumes

Pada contoh EC2

 1. sudo su - 
 2. mkdir /source /target (only need to do this if you don't already have these directories)
 3. mount -t ext4 /dev/sdf /source
 4. mount -t ext4 /dev/sdg /target (no need to create a file system because it is already there)
 5. rsync -aHAXxSP /source/ /target 
 6. umount /source
 7. umount /target

Kembali di Konsol AWS

 1. Stop the instance
 2. Detach the 'source' and 'target' volumes from instance
 3. Attach the 'target' volume to the instance from step 1 using /dev/sda1 as the device
 4. Start the instance
 5. ** we use an elastic IP so we just reassigned the IP to the new instance

Semoga ini bisa membantu seseorang

kasdega
sumber
Ukuran volume hanya dapat ditingkatkan, tidak dikurangi. dari snapshot.
Ankit Kumar Rajpoot