Memperbesar instance EC2 mudah seperti nafas (misalnya, membuat AMI, meluncurkan instance darinya dan kemudian mengubah ukuran penyimpanan).
Tetapi menguranginya menjadi lebih sulit. Saya ingin mengurangi ukuran volume root, Elastic Block Store (EBS), contohnya Amazon Web Services (AWS) EC2. Ada beberapa prosedur lama tingkat tinggi di internet. Versi yang lebih terperinci yang saya temukan adalah jawaban satu tahun pada pertanyaan StackOverflow: bagaimana cara saya mengurangi kapasitas volume ebs saya , langkah-langkahnya memiliki tingkat yang cukup tinggi:
Buat volume EBS baru dengan ukuran yang diinginkan (mis. / Dev / xvdg)
Luncurkan sebuah instance, dan lampirkan kedua volume EBS untuk itu
Periksa sistem file (dari volume root asli): (misalnya) e2fsck -f / dev / xvda1
Maksimalkan volume root asli: (mis. Ext2 / 3/4) resize2fs -M -p / dev / xvda1
Salin data dengan dd:
Pilih ukuran chunk (Saya suka 16MB)
Hitung jumlah potongan (menggunakan jumlah blok dari output resize2fs): blok * 4 / (chunk_size_in_mb * 1024) - kumpulkan sedikit untuk keselamatan
Salin data: (mis. Dd jika = / dev / xvda1 ibs = 16M dari = / dev / xvdg obs = 16M hitung = 80
Ubah ukuran sistem file pada volume EBS baru (lebih kecil): (mis.) Resize2fs -p / dev / xvdg
Periksa sistem file (dari volume root asli): (misalnya) e2fsck -f / dev / xvdg
Lepaskan volume root EBS baru Anda, dan lampirkan ke instance asli Anda
Saya tidak dapat menemukan solusi "bagaimana caranya" langkah demi langkah yang terperinci.
Volume root EBS saya dilampirkan ke instance Ubuntu HVM.
Bantuan apa pun akan sangat dihargai.
Jawaban:
Di AWS Console:
Hentikan instance yang ingin Anda ubah ukurannya
Buat snapshot volume aktif dan kemudian buat volume "General Purpose SSD" dari snapshot itu.
Buat volume "General Purpose SSD" lainnya dengan ukuran yang Anda inginkan.
Lampirkan 3 volume ini ke instance sebagai:
Mulai contoh.
Masuk ke instance baru melalui SSH.
buat direktori baru ini:
mkdir /source /target
mkfs.ext4 /dev/xvdf
mount -t ext4 /dev/xvdf /target
e2label /dev/xvdf /
mount -t ext4 /dev/xvdg /source
rsync -ax /source/ /target
Catatan: tidak ada "/" mengikuti "/ target". Juga, mungkin ada beberapa kesalahan tentang symlinks dan attrs, tetapi ukurannya masih berhasil
umount /target
umount /source
Kembali di Konsol AWS: Hentikan instance, dan lepaskan semua volume.
Lampirkan volume berukuran baru ke instance sebagai: "/ dev / sda1"
Mulai instance, dan itu harus boot.
LANGKAH 10 PENTING : Beri label pada volume baru dengan "e2label" seperti yang disebutkan di atas, atau instance akan terlihat mem-boot di aws tetapi tidak lulus pemeriksaan koneksi.
sumber
Tidak ada solusi lain yang akan berfungsi jika volume digunakan sebagai perangkat root (dapat di-boot).
Disk yang baru dibuat tidak memiliki partisi boot, sehingga GRUB harus diinstal dan beberapa flag diatur dengan benar sebelum instance dapat menggunakannya sebagai volume root.
Solusi saya (mulai hari ini, bekerja ) untuk menyusutkan volume root adalah:
Latar Belakang: Kami memiliki instance A, yang volume akarnya ingin kami susutkan. Sebutlah volume ini VA. Kami ingin mengecilkan VA dari 30GB menjadi katakanlah 10GB
CATATAN: Langkah-langkah berikut sebagian besar diambil dari solusi @bill:
Hentikan instance yang ingin Anda ubah ukurannya (A).
Buat snapshot volume VA dan kemudian buat volume "General Purpose SSD" dari snapshot itu. Volume ini kita akan menyebutnya VASNAP.
Putar instance baru dengan amazon Linux, kami akan memanggil instance ini C. Kami hanya akan menggunakan instance ini untuk menyalin konten VASNAP ke VB. Kita mungkin juga bisa menggunakan instance A untuk melakukan langkah-langkah ini, tetapi saya lebih suka melakukannya di mesin independen.
Lampirkan volume berikut ke instance C. / dev / xvdf untuk VB. / dev / xvdg untuk VASNAP.
Mulai ulang instance C.
Masuk ke instance C melalui SSH.
Buat direktori baru ini:
mkdir /source /target
mkfs.ext4 /dev/xvdf1
Jika Anda tidak mendapatkan kesalahan, lanjutkan ke Langkah 11. Jika tidak, jika Anda tidak punya
/dev/xvdf1
, Anda perlu membuat partisi dengan melakukan i-vii berikut:i) Jika
/dev/xvdf1
tidak ada karena alasan apa pun, Anda harus membuatnya. Masukkan pertama:sudo fdisk /dev/xvdf
.ii) Hapus disk dengan memasukkan:
wipefs
iii) Buat partisi baru dengan memasukkan:
n
iv) Masuk
p
untuk membuat partisi primerv) Terus tekan enter untuk melanjutkan dengan pengaturan default.
vi) Ketika meminta perintah lagi, masukkan
w
untuk menulis perubahan dan berhenti.vii) Pastikan Anda memiliki
/dev/xvdf1
partisi dengan melakukan:lsblk
Anda harus melihat sesuatu seperti:
Sekarang lanjutkan ke Langkah 11.
mount -t ext4 /dev/xvdf1 /target
e2label /dev/xvdf1 /
mount -t ext4 /dev/xvdg1 /source
rsync -vaxSHAX /source/ /target
Catatan: tidak ada "/" mengikuti "/ target". Juga, mungkin ada beberapa kesalahan tentang symlinks dan attrs, tetapi ukurannya masih berhasil
umount /target
Kembali di AWS Console: Dettach VB dari instance C, dan juga dettach VA dari A.
Lampirkan volume ukuran baru (VB) ke instance sebagai: "/ dev / xvda"
Contoh boot A, perangkat rootnya sekarang 10GB :)
Hapus kedua instance B dan C, dan juga semua volume selain VB, yang sekarang menjadi volume root instance A.
sumber
/dev/sda1
intstead dari/dev/xvda
@RubenSerrate?Langkah-langkah berikut ini berhasil untuk saya
Langkah 1. Buat snapshot volume ebs root dan buat volume baru dari snapshot (sebut saja salinan-volume ini)
Langkah 2. Buat instance baru dengan volume root ebs dengan ukuran yang diinginkan. (sebut saja volume ini diubah ukurannya) Volume ebs ini akan memiliki partisi yang tepat untuk booting. (Membuat volume ebs baru dari awal tidak berhasil untuk saya)
Langkah 3. Pasang volume-ubah dan volume-salin ke instance.
Langkah 4. Format ukuran volume.
Catatan: pastikan volume partisi
/dev/xvdf1
tidak dimasukkan/dev/xvdf
Langkah 5. Pasang volume-ubah ukuran dan salin volume mkdir / mnt / salin mkdir / mnt / ubah ukuran
Langkah 6. Salin file
Langkah 7. Pastikan e2label sama dengan volume root
Langkah 8. Perbarui grub.conf pada volume-copy untuk mencocokkan udid volume baru
Cari dan ganti uudid di /boot/grub/grub.cfg
Langkah 9. Lepas volume
Langkah 10. Pasang volume ebs baru yang telah diubah ukurannya ke instance / dev / sda1
sumber
blkid
tanpasudo
mengembalikan hasil yang di-cache tanpa memvalidasinya. Jadi sepertinya UUID tidak berubah.Inilah pendekatan alternatif;
Pasang dan pasang volume EBS lama pada instance EC2 yang berjalan. Jika Anda ingin menyalin volume boot, lebih baik melakukannya pada instance yang berbeda, dengan volume lama dipasang sebagai data, bukan dengan volume yang digunakan sebagai sistem live.
Buat volume EBS baru dengan ukuran yang diinginkan.
Lampirkan volume baru ke instance dan (hati-hati) memformat sistem file baru di atasnya (misalnya, menggunakan mkfs). Pasang itu.
Salin konten sistem file lama dari volume lama ke volume baru:
Lepaskan volume baru dan lepaskan dari instance.
Jika Anda menyalin sistem file root, maka:
Buat cuplikan EBS volume baru.
Daftarkan foto itu sebagai AMI baru.
sumber
Artikel di bawah ini adalah tutorial yang bagus dan langsung tentang cara mengurangi ukuran volume EBS. Ini memiliki panduan dan tangkapan layar langkah-demi-langkah yang mudah diikuti.
Kurangi ukuran volume EBS dalam instance EC2 Anda
sumber