AWS EBS kök birim boyutu nasıl azaltılır?


16

Bir EC2 örneğini genişletmek bir nefes gibi kolaydır (örneğin, bir AMI oluşturun, bir örneği başlatın ve ardından depolama boyutunu değiştirin).

Ancak bunu azaltmak daha zor hale gelir. Amazon Web Services (AWS) EC2 örneği Elastik Blok Deposu (EBS) kök birim boyutunu azaltmak istiyorum. İnternette eski üst düzey prosedürlerin bir çifti var. Bulduğum daha ayrıntılı sürüm, StackOverflow sorusuna bir yaşında bir cevap: ebs hacim kapasitemi nasıl azaltabilirim , adımlar oldukça yüksek bir seviyeye sahip:

İstenen boyutta yeni bir EBS birimi oluşturun (örn. / Dev / xvdg)

Bir örnek başlatın ve her iki EBS birimini ona ekleyin

Dosya sistemini kontrol edin (orijinal kök biriminin): (örn.) E2fsck -f / dev / xvda1

Orijinal kök hacmini maksimuma küçültün: (örneğin ext2 / 3/4) resize2fs -M -p / dev / xvda1

Verileri dd ile kopyalayın:

  • Bir yığın boyutu seçin (16 MB'ı seviyorum)

  • Parça sayısını hesaplayın (resize2fs çıkışındaki blok sayısını kullanarak): bloklar * 4 / (chunk_size_in_mb * 1024) - güvenlik için biraz toplayın

  • Verileri kopyalayın: (örneğin) dd = / dev / xvda1 ibs = 16M / = / dev / xvdg obs = 16M sayısı = 80

Dosya sistemini yeni (daha küçük) EBS biriminde yeniden boyutlandırın: (örneğin) resize2fs -p / dev / xvdg

Dosya sistemini kontrol edin (orijinal kök biriminin): (örn.) E2fsck -f / dev / xvdg

Yeni EBS kök biriminizi ayırın ve orijinal örneğinize ekleyin

Adım adım "nasıl yapılır" çözümünü ayrıntılı olarak bulamıyorum.

EBS kök birimim bir HVM Ubuntu örneğine eklenmiş.

Herhangi bir yardım gerçekten takdir edilecektir.


Bu oldukça iyi bir adım adım "nasıl yapılır" çözümü gibi görünüyor.
ceejayoz

dd - = / dev / xvdh = = dev / xvdh bs = 4k sayısı = 227613 e2fsck -f / dev / xvdh1 resize2fs -p / dev / xvdh1
sirkubax

Yanıtlar:


6

AWS Konsolunda:

  1. Yeniden boyutlandırmak istediğiniz örneği durdurun

  2. Etkin birimin anlık görüntüsünü oluşturun ve ardından bu anlık görüntüden bir "Genel Amaçlı SSD" birimi oluşturun.

  3. İstediğiniz boyuta başka bir "Genel Amaçlı SSD" birimi oluşturun.

  4. Bu 3 birimi örneğe şu şekilde ekleyin:

    • aktif birim için / dev / sda1.
    • Hedef boyut olan birim için / dev / xvdf.
    • / aktif / xvdg, etkin birimin anlık görüntüsünden yapılan birim için.
  5. Örneği başlatın.

  6. SSH üzerinden yeni örneğe giriş yapın.

  7. şu yeni dizinleri oluşturun:

mkdir /source /target

  1. yeni birimde ext4 dosya sistemi oluşturun:

mkfs.ext4 /dev/xvdf

  1. bu dizine bağla:

mount -t ext4 /dev/xvdf /target

  1. Bu çok önemlidir, dosya sistemi linux'un tanıması ve önyüklemesi için bir e2label'e ihtiyaç duyar, ne olması gerektiğini görmek için aktif bir örnekte "e2label / dev / xvda1" kullanın, bu durumda etiket: "/"

e2label /dev/xvdf /

  1. anlık görüntüden oluşturulan birimi bağlayın:

mount -t ext4 /dev/xvdg /source

  1. İçeriği kopyalayın:

rsync -ax /source/ /target

Not: "/" ardından "/ hedef" yoktur. Ayrıca, sembolik bağlantılar ve zorlamalar hakkında birkaç hata olabilir, ancak yeniden boyutlandırma hala başarılı oldu

  1. Dosya sistemlerini kaldırın:

umount /target
umount /source

  1. AWS Konsolu'na geri dön: Örneği durdurun ve tüm birimleri ayırın.

  2. Yeni boyutlu birimi örneğe şu şekilde ekleyin: "/ dev / sda1"

  3. Örneği başlatın, önyükleme yapmalıdır.

ADIM 10 ÖNEMLİDİR : Yeni birimi yukarıda belirtildiği gibi "e2label" ile etiketleyin, aksi takdirde örnek aws olarak önyükleme yapar ancak bağlantı kontrolünü geçmez.


9
Bu adımları birkaç kez geçirdim (Ubuntu 14.04) ve her yeni birimi eklediğimde örnek durur. Bu sorunu yaşayan başka biri var mı? Bu beynimi rafa atıyor!
thiesdiggity

2
Sen tek değilsin. Bunu ve diğer çözümleri denedim ve iyi benliğiniz gibi, örneğim de kapanıyor.
blairmeister

1
@blairmeister Ben de aynı sorunu vardı, ama işe almak başardı! Hala sıkışıp kalırsanız aşağıdaki cevabımıza bir göz atın :)
Ruben Serrate

e2label'im cloudimg-rootfs ... Ubuntu
14.04'te

1
Kullanıcıları yanlışlıkla zarar görmekten korumak için bir birim (önyükleme birimi gibi) için yeterli kullanım durumlarını kapsamadığından bu yanıtı aşağıya indiriyorum.
Jesse Adelman

6

Birim kök (önyüklenebilir) aygıt olarak kullanılırsa, diğer çözümlerin hiçbiri çalışmaz.

Yeni oluşturulan diskte önyükleme bölümü yok, bu nedenle GRUB'un yüklü olması ve bir örneğin kök birim olarak kullanabilmesi için bazı bayrakların doğru şekilde ayarlanması gerekir.

Benim (bugün itibariyle çalışan bir kök hacmi küçülen için) çözümdür:

Arka plan: Kök hacmini küçültmek istediğimiz bir A örneğimiz var. Bu cilde VA diyelim. Diyelim ki 10 GB'lık VA'yı 30 GB'den küçültmek istiyoruz

  1. Depolama alanı olarak, VA ile aynı türde, ancak 10 GB boyutunda bir birim seçin. (veya hedef büyüklüğünüz ne olursa olsun). Şimdi bu yeni birimi (VB olarak adlandırabiliriz) kök birim olarak kullanan bir B örneğimiz var.
  2. Yeni örnek (B) çalıştıktan sonra. Durdurun ve kök hacmini (VB) ayırın.

NOT: Aşağıdaki adımlar çoğunlukla @bill'in çözümünden alınır:

  1. Yeniden boyutlandırmak istediğiniz örneği durdurun (A).

  2. VA biriminin anlık görüntüsünü oluşturun ve ardından bu anlık görüntüden "Genel Amaçlı SSD" birimi oluşturun. Bu cilde buna VASNAP diyeceğiz.

  3. Amazon Linux ile yeni bir örneği döndürün, bu örneği C olarak adlandıracağız. Bu örneği sadece VASNAP içeriğini VB'ye kopyalamak için kullanacağız. Muhtemelen bu adımları yapmak için A örneğini de kullanabiliriz, ancak bunu bağımsız bir makinede yapmayı tercih ederim.

  4. VB için C. / dev / xvdf örneğine aşağıdaki birimleri ekleyin. VASNAP için / dev / xvdg.

  5. C örneğini yeniden başlatın.

  6. SSH üzerinden C örneğine oturum açın.

  7. Bu yeni dizinleri oluşturun:

mkdir /source /target

  1. VB'nin ana bölümünü bir ext4 dosya sistemiyle biçimlendirin:

mkfs.ext4 /dev/xvdf1

Hata almazsanız, Adım 11'e geçin. Aksi takdirde, yoksa /dev/xvdf1, aşağıdaki i-vii'yi kullanarak bölümü oluşturmanız gerekir:

i) Herhangi bir /dev/xvdf1nedenden dolayı mevcut değilse, onu oluşturmanız gerekir. İlk önce şunu girin:

sudo fdisk /dev/xvdf.

ii) Aşağıdakileri girerek diski silin: wipefs

iii) Aşağıdakileri girerek yeni bir bölüm oluşturun: n

iv) pBirincil bölüm oluşturmak için Enter

v) Varsayılan ayarlara devam etmek için enter tuşuna basmaya devam edin.

vi) Tekrar komut istediğinde, wdeğişiklikleri yazmak ve çıkmak için girin .

vii) Aşağıdakileri /dev/xvdf1yaparak bölümün bulunduğunu doğrulayın : lsblk

Şuna benzer bir şey görmelisiniz:

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  250G  0 disk
└─xvda1 202:1    0  250G  0 part
xvdf    202:80   0   80G  0 disk
└─xvdf1 202:81   0   80G  0 part 
xvdg    202:96   0  250G  0 disk
└─xvdg1 202:97   0  250G  0 part

Şimdi Adım 11'e geçin.

  1. Bu dizine ekleyin:

mount -t ext4 /dev/xvdf1 /target

  1. Bu çok önemlidir, dosya sisteminin Linux'u tanıması ve önyüklemesi için bir e2label'e ihtiyacı vardır, ne olması gerektiğini görmek için aktif bir örnekte "e2label / dev / xvda1" kullanın, bu durumda etiket: "/"

e2label /dev/xvdf1 /

  1. VASNAP dağı / kaynak:

mount -t ext4 /dev/xvdg1 /source

  1. İçeriği kopyalayın:

rsync -vaxSHAX /source/ /target

Not: "/" ardından "/ hedef" yoktur. Ayrıca, sembolik bağlantılar ve zorlamalar hakkında birkaç hata olabilir, ancak yeniden boyutlandırma hala başarılı oldu

  1. UB VB:

umount /target

  1. AWS Konsoluna geri dönün: C örneğinden VB'yi ve A'dan VA'yı da dettach edin.

  2. Yeni boyutlu birimi (VB) örneğe şu şekilde ekleyin: "/ dev / xvda"

  3. Önyükleme örneği A, şimdi kök cihazı 10GB :)

  4. Hem B hem de C örneklerini ve şimdi A örneğinin kök birimi olan VB dışındaki tüm birimleri silin.


İşletim sisteminiz nedir?
NineCattoRules

@NineCattoRules Amazon Linux
Ruben

Ubuntu
14.04

@NineCattoRules Ouch ... Amazon Linux için çalıştığını onaylayabilirim, son zamanlarda yapmak zorunda kaldı.
Ruben Serrate

1
17. adımdaki birimi /dev/sda1@ /dev/xvdaRubenSerrate'in yerine eklememiz gerekir mi?
alper

2

Aşağıdaki adımlar benim için çalıştı

Adım 1. Kök ebs biriminin anlık görüntüsünü oluşturun ve anlık görüntüden yeni birim oluşturun (bu cilt kopyasını diyelim)

2. Adım. İstenen boyutta ebs kök birimiyle yeni bir örnek oluşturun. (hadi bu birime yeniden boyutlandırılmış diyelim) Bu ebs birimi, önyükleme için doğru bölüme sahip olacaktır. (Sıfırdan yeni bir ebs hacmi oluşturmak benim için işe yaramadı)

Adım 3. Bir örneğe birim yeniden boyutlandırma ve birim kopyasını ekleyin.

Adım 4. Birim yeniden boyutlandırmasını biçimlendirin.

sudo fdisk -l
    sudo mkfs -t ext4 /dev/xvdf1

Not: bölüm hacminin girilmediğinden /dev/xvdf1emin olun/dev/xvdf

Adım 5. Birim yeniden boyutlandırma ve birim kopyalama mkdir / mnt / copy mkdir / mnt / resize

sudo mount /dev/xvdh1 /mnt/copy
sudo mount /dev/xvdf1 /mnt/resize

6. Adım. Dosyaları kopyalama

rsync -ax /mnt/copy/ /mnt/resize

7. Adım. E2label'in kök hacmi ile aynı olduğundan emin olun

sudo E2label /dev/xvdh1 > cloudimg-rootfs
sudo E2label /dev/xvdf1 cloudimg-rootfs

Adım 8. Yeni hacim udidine uyması için birim kopyasındaki grub.conf'u güncelleyin

/Boot/grub/grub.cfg dizininde uudid öğesini arayın ve değiştirin

ubuntu@server:~/mnt$ sudo blkid
/dev/xvdh1: LABEL="cloudimg-rootfs" UUID="1d61c588-f8fc-47c9-bdf5-07ae1a00e9a3" TYPE="ext4"
/dev/xvdf1: LABEL="cloudimg-rootfs" UUID="78786e15-f45d-46f9-8524-ae04402d1116" TYPE="ext4"

9. Adım. Birimlerin bağlantısını kesin

10. Adım. / Dev / sda1 örneğine yeni boyutlandırılmış ebs birimini ekleyin


1
@Ruben serrate yanıtını grub UUID güncellemesi ile birleştirmek benim için işe yaradı.
Jonathan Maim

Biraz zaman harcadığım için küçük bir not: Onları olmadan koşmak blkid, sudoonları onaylamadan önbelleğe alınmış sonuçları. Yani UUID değişmemiş gibi görünecek.
Akhil Nair

0

İşte alternatif bir yaklaşım;

Eski EBS birimini çalışan bir EC2 yönetim ortamına takın ve bağlayın. Bir önyükleme birimini kopyalamak istiyorsanız, eski birimin canlı sistem olarak kullanılmasına değil, eski birimin veri olarak monte edilmesiyle farklı bir örnekte yapılması en iyisidir.

İstenen boyutta yeni bir EBS birimi oluşturun.

Örneğe yeni birimi ekleyin ve üzerine yeni bir dosya sistemini (dikkatle) biçimlendirin (örn. Mkfs kullanarak). Takın.

Eski dosya sistemi içeriğini eski birimden yeni birime kopyalayın:

rsync -vaxSHAX /oldvol/ /newvol/

Yeni birimi çıkarın ve örnekten ayırın.

Kök dosya sistemini kopyalıyorsanız:

Yeni birimin EBS anlık görüntüsünü oluşturun.

Anlık görüntüyü yeni bir AMI olarak kaydedin.


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.