1. Anasayfa
  2. Linux

Ubuntu LVM Root Disk Genişletmek : Online ve Güvenli Yöntem


Sanallaştırma platformlarında veya fiziksel sunucularda zamanla disk alanının yetersiz kalması sistem yöneticilerinin sıkça karşılaştığı durumlardan biridir.

Log dosyalarının birikmesi, veritabanlarının büyümesi, container imajlarının yer kaplaması ya da uygulama verilerinin artması gibi nedenlerle root partition kısa sürede dolabilir.

Bu noktada ilk akla gelen çözüm hipervizör üzerinden sanal diskin boyutunu artırmaktır. Ancak bu işlem tek başına yeterli değildir çünkü işletim sistemi, alttaki diskte meydana gelen değişikliği kendiliğinden algılayıp kullanılabilir alana dönüştürmez.

Modern Ubuntu kurulumlarının büyük çoğunluğu varsayılan olarak LVM (Logical Volume Manager) yapısı üzerine inşa edilir.

LVM fiziksel diskler ile dosya sistemi arasında esnek bir soyutlama katmanı sağlar ve bu sayede disk alanının çalışan sistem üzerinde yeniden başlatma gerektirmeden büyütülmesine olanak tanır.

Ancak bu esneklik beraberinde birden fazla katmanın doğru sırayla genişletilmesi zorunluluğunu getirir: disk → partition → physical volume → logical volume → filesystem.

Bu makalemde çalışan bir Ubuntu sunucusunda LVM root diski tamamen online yani hizmet kesintisi olmaksızın ve veri kaybı riski taşımadan nasıl genişleteceğinizi ayrıntılı şekilde ele alacağız.

Her adımın neden gerekli olduğunu arka planda ne olduğunu ve hangi noktalarda dikkatli olunması gerektiğini de açıklayacağız.

Senaryo ve Ortam Bilgileri

Bu makalemdeki örnek VMware vSphere ortamında çalışan bir Ubuntu Server üzerinde gerçekleştirilmiştir. Aynı yöntem Hyper-V, Proxmox, KVM, Nutanix gibi diğer sanallaştırma platformlarında ve fiziksel sunucularda da aynı mantıkla uygulanabilir.

Yalnızca diskin fiziksel veya sanal katmanda nasıl büyütüldüğü adımı platforma göre değişir işletim sistemi tarafındaki adımlar tüm ortamlarda birebir aynıdır.

Kullanılan ortamın teknik detayları şu şekildedir: VMware tarafında sanal diskin boyutu 50 GB’tan 150 GB’a yükseltilmiştir.

İşletim sistemi tarafında genişletilecek disk /dev/sda, root dosya sisteminin oturduğu logical volume /dev/mapper/ubuntu--vg-ubuntu--lv ve dosya sistemi türü ext4’tür.

Hedefimiz root dosya sistemini herhangi bir kesinti yaşatmadan yeni alanı kapsayacak şekilde büyütmektir.

İşleme başlamadan önce hipervizör tarafında disk büyütme işleminin tamamlanmış olması gerekir. VMware’de bu işlem, sanal makinenin “Edit Settings” menüsünden Hard Disk alanının kapasitesinin değiştirilmesiyle yapılır.

Bu işlemin sanal makine açıkken yapılabilmesi için diskin VMFS üzerinde “thick eager zeroed” veya “thin provisioned” modunda olması ve snapshot bulunmaması gerekir aksi halde hipervizör disk büyütme seçeneğini gri (pasif) gösterecektir.

1. Kernel’e Yeni Disk Boyutunu Tanıtma

Hipervizör tarafında disk büyütüldükten sonra Ubuntu’ya bağlanıp lsblk komutunu çalıştırdığınızda büyük ihtimalle eski disk boyutunu görmeye devam edersiniz. Bu durum bir hata değildir Linux kernel’i, çalışan bir sistem üzerinde SCSI cihazlarının özelliklerini sürekli yeniden taramaz.

Yeni boyutun fark edilmesi için kernel’e açık bir rescan komutu göndermek gerekir.

Bu işlem /sys sanal dosya sistemi üzerinden yapılır.

echo 1 > /sys/class/block/sda/device/rescan

Bu komut kernel’e ilgili SCSI cihazını yeniden taraması ve donanım üzerindeki güncel boyut bilgisini okuması talimatını verir.

Komut sessizce tamamlanır ekrana herhangi bir çıktı vermez. Doğrulama için lsblk komutunu tekrar çalıştırınız.

lsblk

Bu noktada /dev/sda artık 150G olarak listelenmelidir.

Ancak sda3 partition’ı hâlâ eski boyutunda (örneğimizde 46.9G) görünmeye devam edecektir.

Bunun nedeni partition tablosunun henüz güncellenmemiş olmasıdır.

Yani disk büyüdü ama disk üzerindeki partition’ın “sınırı” hâlâ eski yerinde duruyor.

Dikkat edilmesi gereken nokta cihaz adı her zaman sda olmayabilir. Sistemde birden fazla disk varsa veya VirtIO/NVMe sürücüleri kullanılıyorsa cihaz vda, nvme0n1 gibi farklı isimlerle görünebilir.

Komutu çalıştırmadan önce lsblk çıktısından doğru cihaz adını teyit etmek kritik öneme sahiptir yanlış cihaza müdahale başka diskleri etkileyebilir.


2. Partition’ı Diskin Sonuna Kadar Genişletme

Disk büyüdü ve kernel bunu gördü sıra LVM’in oturduğu partition’ı (örneğimizde sda3) yeni alana yayacak şekilde büyütmeye geldi.

Bu adım için Ubuntu ile birlikte gelen growpart aracını kullanıyoruz. growpart, cloud-guest-utils paketinin bir parçasıdır ve modern Ubuntu kurulumlarında çoğunlukla yüklü olarak gelir.

Eğer sisteminizde bulunmuyorsa apt install cloud-guest-utils komutuyla kurabilirsiniz.

growpart, geleneksel fdisk veya parted araçlarına göre çok daha güvenli bir çözümdür çünkü partition’ı silip yeniden oluşturmak yerine mevcut partition’ın sınırlarını canlı sistem üzerinde yumuşak şekilde günceller. Bu mount edilmiş ve aktif kullanılan partition’lar üzerinde dahi sorunsuz çalışmasını sağlar.

growpart /dev/sda 3

Komutun iki argümanına dikkat edin ilki disk cihazı (/dev/sda), ikincisi ise partition numarasıdır (3). Aralarında boşluk olduğu için bu iki değer ayrı parametreler olarak verilir /dev/sda3 şeklinde birleşik yazılmaz. Bu, growpart‘a özgü bir sözdizimi tercihidir.

Başarılı bir çalıştırmanın ardından şuna benzer bir çıktı görürsünüz.

CHANGED: partition=3 start=6397952 old: size=98457600 end=104855551 new: size=308174815 end=314572766

Bu çıktı, partition’ın başlangıç sektörünün değişmediğini, yalnızca bitiş sektörünün ileriye taşındığını gösterir. lsblk ile doğrulama yaptığınızda sda3 artık yaklaşık 147 GB olarak görünmelidir.

Dikkat edilmesi gereken nokta: Genişletilmek istenen partition, diskteki son partition olmalıdır. Eğer sda3‘ten sonra başka bir partition (örneğin swap partition’ı) varsa, growpart hata verir veya yalnızca bir sonraki partition’ın başlangıcına kadar olan alanı kullanabilir. Bu tür durumlarda partition düzeninin yeniden gözden geçirilmesi gerekir.

3. Physical Volume’ü LVM Tarafında Büyütme

Partition genişledi ancak LVM bu büyümeden henüz haberdar değil.

LVM mimarisinde her partition, üzerinde “physical volume” (PV) olarak tanımlanmıştır ve bu PV’nin de yeni partition boyutunu fark etmesi gerekir. Bu işlem için pvresize komutu kullanılır.

pvresize /dev/sda3

Komut ile PV’nin metadata’sını günceller ve altta yatan blok cihazın yeni boyutunu LVM’in kullanabileceği şekilde kayıt altına alır. Başarılı bir çıktı şöyledir;

Physical volume "/dev/sda3" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized

Doğrulama için;

pvs

Bu komutun çıktısında PSize (toplam fiziksel boyut) ve özellikle PFree (kullanılabilir boş alan) sütunları kritik öneme sahiptir. PFree değerinin yaklaşık 100 GB olarak görünmesi eklenen yeni alanın volume group’a başarıyla katıldığını ve logical volume’lara dağıtılmaya hazır olduğunu gösterir.

Eğer PFree hâlâ 0 görünüyorsa bir önceki adımda bir sorun yaşanmış demektir geri dönüp lsblk çıktısını kontrol etmek gerekir.

4. Logical Volume’ü Boş Alanın Tamamına Genişletme

LVM mimarisinin esnekliği bu adımda kendini iyice gösterir.

Volume group’ta artık 100 GB’lık boş alan var ve bu alanı tamamen veya kısmen istediğimiz logical volume’a tahsis edebiliriz.

Genelde tek bir LV (root LV) bulunan sistemlerde tüm boş alanı root’a vermek mantıklı olduğundan +100%FREE parametresi tercih edilir.

lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv

Buradaki sözdizimine dikkat edilmelidir

-l (küçük L) extent sayısı veya yüzde tabanlı tahsis için kullanılırken,

-L (büyük L) doğrudan boyut belirtmek için (örneğin -L +50G) kullanılır.

+100%FREE ifadesi “volume group’taki tüm boş extent’leri bu LV’ye ekle” anlamına gelir.

Komut çıktısı eski ve yeni boyutu birlikte gösterir;

Size of logical volume ubuntu-vg/ubuntu-lv changed from <46.95 GiB (12018 extents) to <146.95 GiB (37618 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.

lvs komutu ile yeni LSize değerini doğrulayabilirsiniz. Bu noktada blok cihaz seviyesinde her şey hazırdır; ancak üzerinde duran dosya sistemi hâlâ eski boyutuyla çalışmaya devam etmektedir.

Dikkat edilmesi gereken nokta: Eğer ileride başka bir LV oluşturma veya başka bir LV’yi büyütme ihtiyacı doğabileceğini düşünüyorsanız, tüm boş alanı root’a vermek yerine bir kısmını volume group’ta yedek olarak bırakabilirsiniz. Örneğin -L +80G diyerek yalnızca 80 GB ekleyip kalan 20 GB’ı VG’de boş bırakabilirsiniz. LVM’in en büyük avantajlarından biri olan bu esneklik, daha sonra alan büyütmeyi son derece kolaylaştırır.

5. Dosya Sistemini Yeni Alana Yayma

LVM katmanı büyüdü, ancak ext4 dosya sistemi hâlâ eski boyutunu kullanıyor. Son adım olarak dosya sistemini logical volume’un yeni boyutuna kadar genişletiyoruz:

resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

resize2fs, ext2/ext3/ext4 dosya sistemleri için online resizing’i destekler. Yani komut, dosya sistemi mount edilmiş ve aktif kullanımdayken çalışır; bu sırada üzerinde işlem gören dosyalar, açık bağlantılar veya çalışan servisler etkilenmez. Komut çalışırken kısa bir süre disk I/O artışı yaşanabilir, ancak bu, hizmet kesintisine yol açacak düzeyde değildir.

Çıktı şu şekilde olacaktır:

Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 6, new_desc_blocks = 19
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 38520832 (4k) blocks long.

“on-line resizing required” mesajı bir uyarı değil, yapılan işlemin türünü belirten bilgi mesajıdır. old_desc_blocks ve new_desc_blocks değerlerinin değişmesi, dosya sistemi metadata’sının yeni boyuta uygun şekilde güncellendiğini gösterir.

6. Sonucu Doğrulama

Tüm adımlar tamamlandıktan sonra df -h komutu ile root dosya sisteminin son durumunu kontrol etmek hem işlemin başarısını teyit eder hem de kullanılabilir alanı net olarak gösterir:

df -h /

Beklenen çıktı:

Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv  145G  8.9G  130G   7% /

Görüldüğü üzere root dosya sistemi artık 145 GB’lık alan sunmakta ve büyük bölümü kullanılabilir durumda bulunmaktadır. Sistem boyunca herhangi bir reboot yapılmadı, hiçbir servis durdurulmadı ve hiçbir veri kaybı yaşanmadı.

Dikkat Edilmesi Gereken Önemli Hususlar

Genişletme işlemi her ne kadar güvenli ve olgun bir prosedür olsa da, production ortamlarında uygulanırken bazı noktalara özellikle dikkat etmek gerekir.

Yedekleme ve snapshot: İşlem öncesinde sanal makinenin snapshot’ını almak, herhangi bir aksilik durumunda hızlı geri dönüş imkânı sağlar. Ancak unutulmamalıdır ki snapshot uzun süre tutulduğunda performans sorunlarına yol açabilir; işlem başarılı tamamlandıktan ve sistem birkaç saat sorunsuz çalıştıktan sonra snapshot’ın silinmesi önerilir. Kritik veriler içeren sistemlerde snapshot’a ek olarak uygulama düzeyinde yedeğin de güncel olduğundan emin olunmalıdır.

Doğru cihaz teyidi: Her komut çalıştırılmadan önce hedef cihazın doğruluğu mutlaka teyit edilmelidir. lsblk, pvs, lvs ve vgs komutları bu kontrolün yapılabileceği temel araçlardır. Özellikle birden fazla diski ve LVM yapısı olan sistemlerde yanlış cihaza müdahale etmek ciddi sorunlara yol açabilir. Kopyala-yapıştır yaparken cihaz isimlerinin sisteminizdeki gerçek isimlerle eşleştiğinden emin olun.

Partition sırası ve diğer partition’lar: growpart ile genişletilecek partition, diskteki son partition olmalıdır. Eğer büyütülmek istenen partition’dan sonra başka partition’lar (örneğin swap veya başka bir veri partition’ı) varsa, bunların önce taşınması veya silinmesi gerekir; bu da çok daha karmaşık ve riskli bir işlemdir. Bu nedenle yeni sistemler kurulurken LVM partition’ının diskin sonunda konumlandırılması ileride yapılacak genişletmeleri kolaylaştırır.

Dosya sistemi türü farkı: Bu yazıdaki örnek ext4 üzerinedir. Sisteminizde XFS kullanılıyorsa son adımda farklı bir komut çalıştırmanız gerekir. XFS için online büyütme komutu şudur: xfs_growfs / (mount point ile çağrılır, cihaz adıyla değil). Önemli bir fark olarak, XFS dosya sistemleri yalnızca büyütülebilir, küçültülemez; ext4 ise her iki yönde de yeniden boyutlandırılabilir (ancak küçültme işlemi offline yapılmalıdır). Hangi dosya sistemini kullandığınızı df -Th veya mount | grep ' / ' komutlarıyla görebilirsiniz.

Boot ve EFI partition’larına dokunmamak: /boot ve /boot/efi gibi partition’lar bu işlemden etkilenmemelidir. Bu partition’lar sabit ve küçük tutulur; içerikleri kernel ve bootloader dosyalarından oluştuğu için büyütülmelerine genelde gerek yoktur. Genişletme işlemleri yalnızca LVM’in oturduğu partition üzerinde yapılmalıdır.

Disk şifreleme (LUKS) durumu: Eğer sisteminizde LVM’in altında veya üstünde LUKS şifreleme katmanı varsa, ek bir adım daha gerekir: cryptsetup resize komutuyla şifreleme katmanının da büyütülmesi şarttır. LUKS kullanılan sistemlerde adım sırası şöyle olur: disk → partition → LUKS container → PV → LV → filesystem. Bu yazıdaki örnek şifrelenmemiş bir kurulumu kapsamaktadır.

Volume group ve isimlendirme farklılıkları: Ubuntu kurulumlarında varsayılan VG adı ubuntu-vg ve LV adı ubuntu-lv‘dir; ancak özel kurulumlarda veya farklı dağıtımlarda bu isimler değişebilir. Komutlarda kullanılacak yolun (/dev/mapper/...) sisteminizdeki gerçek isimlerle eşleştiğini lvs ve vgs çıktılarından doğrulayın. Tire (-) karakterinin device mapper yollarında çift tire (--) olarak göründüğünü unutmayın; bu, isim içerisindeki tek tireden ayırt edilmesi içindir.

Fiziksel sistemler ve cloud ortamları: Aynı yöntem fiziksel sunucularda yeni eklenen disk veya RAID kontrolcüsü üzerinden büyütülen volume’lar için de geçerlidir. AWS EBS, Azure Managed Disk, Google Persistent Disk gibi cloud disk hizmetlerinde de süreç birebir aynı şekilde işler; tek fark, hipervizör adımı yerine ilgili bulut sağlayıcısının konsolundan veya CLI’sından disk büyütme işleminin yapılmasıdır.

İşlem sıralamasının önemi: Adımların belirtilen sırayla yapılması zorunludur. Örneğin partition’ı büyütmeden PV’yi büyütmeye çalışmak veya LV’yi büyütmeden filesystem’i resize etmeye çalışmak hata verir. Bu hatalar yıkıcı olmasa da kafa karışıklığına ve gereksiz zaman kaybına yol açar. Süreci zihinsel olarak “aşağıdan yukarıya katman büyütme” olarak modellemek (donanımdan dosya sistemine doğru) sıralamayı hatırlamayı kolaylaştırır.

İlginizi Çekebilir