Küçülen Amazon EBS birim boyutu


25

Bu cevabı artan EBS hacimleri için görmüştüm ama bir tane küçültmek istiyorum.

Varsayılan Ubuntu Server görüntüleri 15 GB'dir, yalnızca 2 GB'a gerçekten ihtiyacım var (Veriler için farklı bir birim kullanırım). Birimin boyutunu küçültmenin bir yolu var mı?

Yanıtlar:


27

Ben de seninle aynı soruyu sordum, bu yüzden nasıl yapılacağı konusunda çalıştım.

Öncelikle, bunu ABD-Doğu bölgesinden gelen Ubuntu 32-bit EBS destekli amiden yaptım, diğer işletim sistemleri veya görüntüler farklı çalışabilir. Ancak, bir ext * dosya sistemi kullandığınız sürece tamam olmanız gerektiğinden şüpheleniyorum. Diğer dosya sistemlerinde çalışabilir, ancak bunları nasıl yeniden boyutlandıracağınızı bulmak zorundasınız.

Adımlar temelde:

  1. Çalışmakta olan bir örneğe iki cilt ekleyin, ilki küçültmek istediğiniz anlık görüntüye ve ikincisi küçültmek istediğiniz yeni boyuta sahip boş bir birim.

  2. İlk cildin dosya sistemini kontrol edin ve hataları onarın.

  3. Dosya sistemini ilk ciltte küçültün, böylece yalnızca verileri tutması gereken büyüklükte olur.

  4. Dosya sistemini ilk ciltten diğerine kopyalayın.

  5. İkinci birimdeki dosya sistemini maksimum boyutuna genişletin.

  6. Hataların ikinci sesini kontrol ederek her şeyin iyi göründüğünden emin olun.

  7. İkinci cildin anlık görüntüsünü alın.

  8. Çektiğiniz ikinci cildin anlık görüntüsünü temel alan bir makine resmi oluşturun.

Önce, küçültmek istediğiniz ami'den biraz bilgi almanız gerekir. Özellikle, eğer varsa, çekirdek kimliğine ve ramdisk kimliğine ihtiyacınız var (küçültdüğüm görüntüde ramdisk yoktu). Tüm bu bilgiler AMI penceresinde aws yönetim konsolundan edinilmelidir.

Çekirdek kimliği kia-xxxxxxxx gibi görünür ve anlık görüntü kimliği snap-xxxxxxxx gibi görünür ve ramdisk kimlikleri RIA-xxxxxxxx gibi görünür.

Sonra, bir linux örneği başlatın. Bir Ubuntu örneği başlattım. İsterseniz bir t1.micro örneği kullanabilirsiniz. Bu sonraki adımları atmak için çok güç gerektirmez.

Makine çalıştıktan sonra, ilk adımdan not aldığınız anlık görüntüyü ekleyin. Benim durumumda / dev / sdf dosyasına ekledim

Ardından, istediğiniz boyuta sahip yeni bir cilt oluşturun. Benim durumumda, 5 GB'lık bir cilt oluşturdum çünkü küçültmek istediğim boyut buydu. Anlık görüntüden bu yeni birimi oluşturmayın. Yeni bir boş birime ihtiyacımız var. Sonra, çalışan örneğe ekleyin, benim durumumda / dev / sdg olarak ekledim

Daha sonra, makineye ssh ekleyin ancak ekli birimleri monte etmeyin.

Bu noktada paranoya tarafında hata yaptım ve dosya sisteminde büyük hacme bakmayı seçtim, hata olmadığından emin olmak için. Hiç olmadığına eminseniz, bu adımı atlayabilirsiniz:

$ sudo e2fsck -f /dev/sdf

Daha sonra, büyük diskteki dosya sistemini, sadece diskteki veriler kadar büyük olacak şekilde yeniden boyutlandırdım:

$ sudo resize2fs -M -p /dev/sdf

-M onu küçültür ve -p ilerlemeyi yazdırır.

Resize2fs size shrunkin dosya sisteminin ne kadar büyük olduğunu söylemelidir. Benim durumumda bana 4K'lık bloklar halinde verdi.

Artık shrunkin dosya sistemini yeni diske kopyalıyoruz. Verileri 16 MB boyutunda kopyalayacağız, bu yüzden kaç adet 16 MB boyutunda kopyalamamız gerektiğini bulmamız gerekir. Burası küçültülmüş dosya sistemi boyutunun kullanışlı olduğu yerdir.

Benim durumumda, shrunk dosya sistemi 1 GB'ın üzerindeydi, çünkü anlık görüntü almadan önce temel Ubuntu sistemine bir sürü başka program yükledim. Muhtemelen en yakın 16 MB'a yuvarlanmış dosya sisteminin boyutunu kopyalamakla kurtulabilirdim, ancak güvenli bir şekilde oynamak istedim.

Yani, 128 kez 16 MB'lık parçalar = 2GB:

$ sudo dd if=/dev/sdf ibs=16M of=/dev/sdg obs=16M count=128

16 MB'lık bloklar halinde kopyaladım çünkü EBS ile her okuma ve yazma için para ödüyorsunuz, bu yüzden mümkün olduğunca en aza indirmek istedim. Bu şekilde yapıp yapmadığımı bilmiyorum, ama muhtemelen zarar vermedi.

Daha sonra yeni birime kopyaladığımız dosya sistemini yeniden boyutlandırmamız gerekiyor, böylece birimdeki kullanılabilir tüm alanı kullanır.

$ sudo resize2fs -p /dev/sdg

Son olarak, her şeyin yolunda olduğundan emin olmak için kontrol edin:

$ sudo e2fsck -f /dev/sdg

Bu makinede yapmamız gereken tek şey bu, ancak yeni sesi bir test olarak monte etmek zarar veremedi. Ancak, bu adım neredeyse kesinlikle isteğe bağlıdır, çünkü e2fsck herhangi bir sorunla karşı karşıya kalmalıydı.

Şimdi yeni birimi yakalamamız ve ona göre bir AMI oluşturmamız gerekiyor. Makineyle işimiz bitti, eğer istersen feshedebilirsin.

Taktıysanız küçük birimin çıkarıldığından emin olun ve ardından bir anlık görüntüsünü alın. Yine, bunu yönetim konsolunda yapabilirsiniz.

Son adım, komut satırı ec2 araçlarını gerektirir.

DÜZENLE:

Bu cevap gönderildiğinden bu yana AWS konsolu, bir anlık görüntüye sağ tıklamanızı ve Anlık Görüntüden Resim Oluştur'u seçmenizi sağlar. Uygun Çekirdek Kimliğini seçmeniz gerekir. Listede görünmüyorsa, uygun mimariyi seçtiğinizden emin olun.

Ec2-register uygulamasını kullanarak çektiğiniz anlık görüntüye dayanan bir AMI kaydedebiliriz, bu yüzden yeni çekmiş olduğunuz anlık görüntüden snap-xxxxxxxx değerini not alın.

Daha sonra şöyle bir komut kullanmalısınız:

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

Elbette, çekirdek kimliğini başlangıçta yazdığınızla ve anlık görüntü kimliğini önceki adımda oluşturduğunuzla değiştirmelisiniz. Ayrıca, yukarıdaki gizli anahtarınıza (sk.pem) ve x509 sertifikanıza (cert.pem) işaret etmeniz gerekir. Elbette isim ve açıklama için ne istersen onu seçebilirsin.

Bu yardımcı olur umarım.


Teşekkürler, bu yardımcı oldu! Büyük hacimler için (1TB gibi) bu prosedür mikro durumlarda uzun zaman alır. Hiçbir fsck, rsync tabanlı birim kopyalama işlemi gördüm (örneğin, burada ubuntuforums.org/showpost.php?p=9866025&postcount=27 ), ancak dd tabanlı yaklaşım kök olmayan birimler için bile çok daha güvenilir hissettiriyor.
Chronos

İlk komut sudo e2fsck -f /dev/sdf, yeniden boyutlandırma işleminden önce gerekli bir adım olabilir (benim özel örneğimde bir Amazon Linux AMI idi).
notacouch

1
Açık olması gerekir, ancak AWS belgelerine göre ciltte (/ facepalm) bir dosya sistemi oluşturmayı unutmayın sudo mkfs -t ext4 /dev/sdg.
notacouch

1

Evet, ben de bunu merak ettim. Aşağıdaki eğitici not overkill, ancak gerekli araçları içerdiğini düşünüyorum: http://www.linuxconfig.org/Howto_CREATE_BUNDLE_UPLOAD_and_ACCESS_custom_Debian_AMI_using_ubuntu

Yukarıdaki gibi yeni bir disk görüntüsüne kurmak yerine, büyük AMI'yi ateşlemek, yeni bir EBS oluşturmak, çalışan örneğe EBS eklemek ve çalışan AMI'yi yeni EBS'ye kopyalamak mümkün olmalıdır. Son olarak, yeni EBS'yi AMI olarak kaydedin.

Bu blog gönderisine biraz daha arka plan, özellikle de freremark'ın yorumuna bir göz atın: http://alestic.com/2010/01/public-ebs-boot-amis-for-ubuntu-on-amazon-ec2

Son bir notta, euca2ools ec2-ami-tools yerine mükemmel bir alternatif gibi görünüyor - euca2ools gerçek man sayfalarını içerir! Ec2- * komutları ile aynı adlara sahipler, sadece euca- öneki. http://open.eucalyptus.com/wiki/Euca2oolsUsing


0

Genel bir EC2 örneği tarafından kullanılan hacmin boyutunu azaltmak istedim. Buradaki diğer cevaplara benzer adımlar izledim ancak bir sorunla karşılaştım. İşte kök hacmimi küçültmek için yapmam gerekenler ...

AWS Konsolunda

 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

EC2 örneğinde

 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

AWS Konsoluna Geri Dön

 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

İşte bulabildiğim kadarıyla bahsetmediğim bir problemle karşılaştık. Örnek iyi başladı, harika! Ancak bu olayı ssh etmeye çalıştığımda, bağlanamadım. Yukarıdaki adımların birçok varyasyonundan sonra, nihayet taze bir EC2 örneğinin kök hacmini kullanmaya karar verdim.

AWS Konsolunda

 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

EC2 örneğinde

 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

AWS Konsoluna Geri Dön

 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

Umarım bu birine yardımcı olur


Birimin boyutu yalnızca azaltılabilir, arttırılamaz. Anlık görüntüden.
Ankit Kumar Rajpoot
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.