Saturday, December 10, 2016

AWS EC2 root diski data kaybı olmadan büyütmek

EC2 instance oluştururken EBS volume size olarak 8 GB dan büyük bir size seçtiğiniz halde instance içinde partition'ı gene de 8 GB olarak görüyorsanız data kaybı olmadan diski büyütebilirsiniz.

AWS dökümantasyonu maalesef bu konuda yetersiz bilgi sunuyor : Expanding the Storage Space of an EBS Volume on Linux - Extending a Linux File System

Çünkü dökümantasyonu takip ettiğinizde 3. adımdaki

sudo resize2fs /dev/xvda1

komutundan sonra

The filesystem is already ... blocks long.  Nothing to do!

şeklinde bir uyarı almanız mümkün.

Eğer lsblk ve df -h komutlarının root partition için gösterdiği disk büyüklükleri farklı olmasına rağmen yukarıdaki mesajı alıyorsanız diski genişletmek için aşağıdakileri yapabilirsiniz.

Uyarı : Aşağıdaki komutlar Debian Jessie ile test edilmiştir. Örneklerde root disk partition /dev/xvda1 dir. Ve aşağıdaki işlemlerden önce mutlaka instance'ı durdurup bir snapshot almanız, olası data kayıpları ve boot problemlerinde tekrar bir önceki duruma sistemi getirebilmeniz için gereklidir. Eğer birşey ters giderse elinizde bir snapshot yoksa, instance'ı verileri ile birlikte çöpe atmış olacaksınız.

1. sudo fdisk /dev/xvda1 komutu ile fdisk konsolunu açın
2. p komutu ile mevcut partitionları listeleyin. Default ayarlar ile instance'ı oluşturmuş iseniz sadece 1 partition görünüyor olmalı. (Birden fazla partition görürseniz, sonraki aşamalara devam etmeyin). Bu aşamada "start" yazan sütundaki rakamı mutlaka not etmeniz lazım. Bu örnek için 4096 olsun bu rakam.
3. d komutu ile mevcut partition'ı silin. (fdisk bu işlem sonrasında değişiklikleri kaydetmediğiniz sürece gerçekten partition ı silmeyecek.)
4. n komutu ile yeni bir partition oluşturun. Partition oluştururken primary seçeneğini seçmeyi; first sector/cylinder için 2. aşamada not ettiğiniz değeri (bu örnekte 4096) girmeyi unutmayın. Son sector/cylinder için de bir sayı soracaktır. Eğer diskin tamamına kullanmayı düşünüyorsanız boş bırakarak enter ile geçebilirsiniz. Tamamını kullanmayacaksanız, bir hesap yaparak ona göre bir rakam girmeniz gerekir.
5. a komutu ile partition ı bootable hale getirin.
6. p komutu ile son durumu kontrol edin. Partition önünde * işareti ile bootable olduğu gösterilmeli. Ve start değeri 2. aşamada not ettiğiniz değer ile aynı olmalıdır.
7. Herşey tamamsa, değişiklikleri diske yansıtmak için w komutunu girin.
8. Instance'ı reboot edin.
9 .Bu aşamadan sonra bazen biraz zaman alsa da instance yeniden açılacaktır. AWS console'da EC2 instances sayfasında status checks yeşil görünüyorsa SSH ile instance'a bağlanın.
10. df -h ile mevcut disk durumunu kontrol edin. Eğer disk genişlemiş olarak görünüyorsa, işlem tamam demektir. Eğer halen eski disk boyutu görünüyorsa, sudo resize2fs /dev/xvda1 i tekrar çalıştırın, disk olması gereken büyüklüğe genişlemiş olacaktır.

Eğer instance 8. adımdan sonra bir türlü açılmıyor ve status checks sarı durumda kalıyorsa, öncelikle AWS console'dan instance screenshot talep edip, o anda ekranda ne olduğuna bakabilirsiniz. Eğer grub console'unu görüyorsanız, geçmiş olsun maalesef işlemde bir sorun olmuş demektir.

Eğer instance'ı eski haline geri getirmeniz gerekiyorsa :

1. snapshots kısmından bu işlemden önce aldığınız snapshot a tıklayın ve Actions menüsünden "Create Volume" opsiyonunu seçin. Ve bir volume oluşturun.
2. Sonra instance'ı durdurun (stop).
3. Sol menüden Volumes sayfasını açarak, instance a bağlı volume'e tıklayıp "Detach volume" seçeneği ile (Actions menüsünde) mevcut instance'dan ayırın.
4. Yeni oluşturduğunuz volume'e tıklayıp "attach volume" seçeneğini tıklayın. Disk olarak /dev/sdf gibi birşey yazıyorsa onu /dev/sda olarak değiştirip onaylayın.
5. Instance'ı başlatın (start).

Bu sayede instance eski haline gelmiş olacaktır.

Eğer en baştaki uyarıya rağmen snapshot almamışsanız ve instance başlayamıyorsa, yapabileceğiniz pek fazla birşey kalmamış oluyor, geçmiş olsun. Başta snapshot almanız konusunda uyarmıştım :)

CentOS, Amazon Linux ya da başka bir işletim sistemi (veya versiyonu) ile bu işlemi yaparken fdisk te DOS compatible mode u kapatmanız ve gene fdisk'te display units i sector e çevirmeniz gerekebilir. Normalde benim test ettiğim Debian Jessie instance'da bu opsiyonlar default olarak olması gerektiği gibi idi.