Ubuntu’da Disk Bölümlendirme ve LVM Yönetimi

Sunucu kurulumu sırasında disk bölümlendirme kararları, sonradan pişman olacağınız türden hatalar yapabileceğiniz en kritik adımlardan biridir. “Yeter bu kadar alan” diyerek küçük bıraktığınız /var bölümü, birkaç ay sonra dolup sistemi felç edebilir. İşte tam bu noktada LVM devreye giriyor ve hayatınızı kurtarıyor. Bu yazıda Ubuntu sunucularda disk bölümlendirmeyi ve LVM yönetimini baştan sona ele alacağız.

Temel Kavramlar: Neden LVM?

Geleneksel disk bölümlendirmede bir bölüm oluşturduktan sonra boyutunu değiştirmek ciddi bir iştir. Sistemi kapatmanız, live medyadan boot etmeniz, partition’ı yeniden boyutlandırmanız ve belki de veri kaybı riskiyle uğraşmanız gerekir. LVM (Logical Volume Manager) bu sorunu ortadan kaldırır.

LVM’nin katmanlı yapısı şu şekilde çalışır:

  • Physical Volume (PV): Gerçek disk veya bölüm. LVM’nin üzerine inşa edildiği fiziksel katman
  • Volume Group (VG): Bir veya birden fazla PV’yi bir araya getiren havuz. Tüm depolama alanınız burada toplanır
  • Logical Volume (LV): VG içinden ihtiyacınıza göre ayırdığınız mantıksal disk bölümleri. Üzerine dosya sistemi kurarsınız

Bu yapı sayesinde diskler arasında alanı esnek biçimde yönetebilir, anlık snapshot alabilir, hatta RAID benzeri özellikler uygulayabilirsiniz.

Mevcut Disk Durumunu Görmek

Herhangi bir işlem yapmadan önce sisteminizin mevcut durumunu iyice anlamak gerekiyor. Aşağıdaki komutlarla başlayalım:

# Tüm blok cihazlarını listele
lsblk -f

# Disk ve bölüm bilgilerini göster
fdisk -l

# Bağlı dosya sistemlerini ve kullanım oranlarını göster
df -hT

# Mevcut LVM yapısını göster
pvs && vgs && lvs

lsblk -f komutu size disk yapısını ağaç formatında gösterir ve hangi bölümlerin hangi dosya sistemiyle formatlandığını, UUID bilgilerini ve nereye mount edildiğini bir arada sunar. Yeni bir sunucuya bağlandığınızda ilk çalıştırmanız gereken komutlardan biridir.

Yeni Disk Ekleme ve Bölümlendirme

Diyelim ki sunucunuza yeni bir disk eklediniz veya bulut ortamında yeni bir volume attach ettiniz. Sistemi yeniden başlatmadan diski tanıtmak için:

# SCSI bus'ı yeniden tara (fiziksel sunucular için)
echo "- - -" > /sys/class/scsi_host/host0/scan

# Yeni diski kontrol et
lsblk

# Genellikle /dev/sdb veya /dev/nvme0n1 gibi görünür
fdisk /dev/sdb

fdisk ile interaktif bölüm oluşturma süreci şu adımları izler: n ile yeni bölüm, p ile primary, bölüm numarası ve boyut girişi. LVM kullanacaksanız bölüm tipini 8e (Linux LVM) olarak ayarlamak iyi bir pratiktir, ancak zorunlu değildir. w ile değişiklikleri yazıp çıkın.

Modern sistemlerde parted veya gdisk kullanmak daha mantıklıdır çünkü GPT (GUID Partition Table) desteği sunarlar ve 2TB üzeri disklerle çalışabilirsiniz:

# GPT ile yeni bölüm oluşturma
parted /dev/sdb --script 
    mklabel gpt 
    mkpart primary 0% 100% 
    set 1 lvm on

# Değişikliği kernel'a bildir
partprobe /dev/sdb

# Yeni bölümü kontrol et
lsblk /dev/sdb

LVM Yapısını Oluşturma

Disk bölümünüzü hazırladıktan sonra LVM katmanlarını oluşturma zamanı geldi. Bir production senaryosu düşünelim: Yeni bir web sunucusu kuruyorsunuz ve /var/www için ayrı, büyütülebilir bir alan istiyorsunuz.

# Physical Volume oluştur
pvcreate /dev/sdb1

# Volume Group oluştur (birden fazla PV ekleyebilirsiniz)
vgcreate vg_data /dev/sdb1

# Eğer ikinci bir disk de varsa aynı VG'ye ekleyin
# vgextend vg_data /dev/sdc1

# Volume Group detaylarını kontrol et
vgdisplay vg_data

# Logical Volume oluştur (10GB)
lvcreate -L 10G -n lv_www vg_data

# Ya da VG'nin tamamını kullan
lvcreate -l 100%FREE -n lv_www vg_data

# Dosya sistemi oluştur
mkfs.ext4 /dev/vg_data/lv_www

# Mount noktası oluştur ve bağla
mkdir -p /var/www
mount /dev/vg_data/lv_www /var/www

lvcreate komutundaki -L parametresi kesin boyut belirtmek için kullanılır (10G, 500M gibi). -l parametresi ise PE (Physical Extent) sayısı veya yüzde cinsinden belirtmek için kullanılır. İkisi farklı şeyler, karıştırmamak lazım.

Kalıcı Mount Ayarları

Mount ettiğiniz volume’u her yeniden başlatmada otomatik bağlanacak şekilde ayarlamak için /etc/fstab dosyasını düzenlemeniz gerekiyor:

# UUID'yi öğren
blkid /dev/vg_data/lv_www

# fstab'a ekle (UUID kullanmak daha güvenli)
echo "UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /var/www ext4 defaults 0 2" >> /etc/fstab

# Ya da device path ile (LVM için bu da güvenilirdir)
echo "/dev/vg_data/lv_www /var/www ext4 defaults 0 2" >> /etc/fstab

# fstab'ı test et (sistemi yeniden başlatmadan)
mount -a

# Hata yoksa devam et
df -h /var/www

fstab’daki son iki sayının ne anlama geldiğini bilmek önemli: beşinci alan dump için (çoğunlukla 0), altıncı alan fsck sırası için. Root bölümü için 1, diğerleri için 2, swap ve tmpfs için 0 kullanın.

Logical Volume Boyutunu Artırma

İşte LVM’nin en sevdiğim özelliği: çalışan sistemi durdurmadan disk alanı ekleyebilirsiniz. /var/www dolmaya başladı diyelim:

# Mevcut durumu kontrol et
df -h /var/www
lvdisplay /dev/vg_data/lv_www

# VG'de boş alan var mı kontrol et
vgdisplay vg_data | grep "Free PE"

# 5GB daha ekle
lvextend -L +5G /dev/vg_data/lv_www

# Ya da toplam boyutu belirt
lvextend -L 15G /dev/vg_data/lv_www

# Dosya sistemini de genişlet (ext4 için, mount'luyken bile çalışır)
resize2fs /dev/vg_data/lv_www

# XFS kullanıyorsanız
# xfs_growfs /var/www

# Sonucu kontrol et
df -h /var/www

lvextend -r parametresini kullanırsanız dosya sistemini de otomatik olarak genişletir, ayrıca resize2fs çalıştırmanıza gerek kalmaz. Ama ben adımları ayrı atmayı tercih ederim, neyin ne yaptığını görmek için.

Volume Group’a Yeni Disk Ekleme

VG’nizde boş alan kalmadı ve yeni disk eklediniz. Bu senaryo production ortamlarında çok sık karşılaşılan bir durum:

# Yeni diski hazırla
pvcreate /dev/sdc1

# Mevcut VG'ye ekle
vgextend vg_data /dev/sdc1

# VG'nin yeni kapasitesini kontrol et
vgs vg_data

# Artık LV'yi genişletebilirsiniz
lvextend -L +20G -r /dev/vg_data/lv_www

Bu işlemin güzelliği, dosya sisteminin bu geçişten tamamen habersiz olması. Sizin için tamamen şeffaf bir katman oluşturuyor.

LVM Snapshot ile Güvenli Yedekleme

LVM snapshot özelliği, özellikle veritabanı yedeklemelerinde çok değerli. Consistent bir yedek almak için normalde servisi durdurmanız gerekirdi. Snapshot ile bu süreyi minimuma indirebilirsiniz:

# Snapshot oluştur (2GB snapshot alanı ayır)
lvcreate -L 2G -s -n lv_www_snap /dev/vg_data/lv_www

# Snapshot'ı geçici bir noktaya mount et
mkdir -p /mnt/snap_backup
mount -o ro /dev/vg_data/lv_www_snap /mnt/snap_backup

# Yedek al
rsync -av /mnt/snap_backup/ /backup/www_$(date +%Y%m%d)/

# İşiniz bitince unmount et ve snapshot'ı sil
umount /mnt/snap_backup
lvremove /dev/vg_data/lv_www_snap

Snapshot çalışma prensibi “copy-on-write” yöntemiyle işler. Snapshot oluşturulduğu anda ek alan kullanmaz. Orijinal volume’da bir blok değiştirildiğinde, o bloğun eski hali snapshot alanına kopyalanır. Bu yüzden snapshot için ayırdığınız alan, yedekleme süresince yapılacak değişiklikleri karşılayacak kadar büyük olmalı.

Thin Provisioning ile Akıllı Alan Yönetimi

Birden fazla müşteriye hizmet veren bir hosting ortamınız varsa thin provisioning çok işinize yarar. Her müşteriye 50GB alan tanımlarsınız ama aslında o alanı gerçekte kullanana kadar fiziksel disk tahsis etmezsiniz:

# Thin pool oluştur
lvcreate -L 100G --thinpool tp_pool vg_data

# Thin volume oluştur (100GB olarak görünür ama gerçek alan yok)
lvcreate -V 50G --thin -n lv_musteri1 vg_data/tp_pool
lvcreate -V 50G --thin -n lv_musteri2 vg_data/tp_pool

# Thin pool kullanımını izle
lvs -a vg_data

Tabii bu yaklaşımda dikkatli olmak gerekiyor: Gerçek kullanım toplam fiziksel alanı aşarsa sorun yaşarsınız. Monitoring kurmanız şart.

Gerçek Dünya Senaryosu: Root Bölümü Dolduğunda

En stresli sysadmin anlarından biri budur: Gece 2’de alarm geliyor, root bölümü %100 dolu, servisler düşmeye başlıyor. Sistemi LVM ile kurduysanız kurtarma planınız var:

# Acil durum: Hangi bölüm doldu?
df -h

# Root bölümü doluysa önce geçici alan aç
# Log dosyalarını temizle
journalctl --vacuum-time=3d

# Büyük dosyaları bul
find / -xdev -size +100M -ls 2>/dev/null | sort -k7 -rn | head -20

# VG'de boş alan varsa hemen genişlet
vgs
lvextend -L +5G -r /dev/ubuntu-vg/ubuntu-lv

# VG'de boş alan yoksa başka LV'den küçült (dikkatli ol!)
# Önce ilgili LV'yi unmount et
umount /var/www
e2fsck -f /dev/vg_data/lv_www
resize2fs /dev/vg_data/lv_www 8G
lvreduce -L 8G /dev/vg_data/lv_www
# Küçülttüğün alanı root'a ekle
lvextend -L +2G -r /dev/ubuntu-vg/ubuntu-lv

Uyarı: LV küçültmek, büyütmekten çok daha risklidir. XFS dosya sistemi online küçültmeyi desteklemez. Ext4’te bile sıra önemlidir: önce dosya sistemini küçültün, sonra LV’yi küçültün. Tersi veri kaybına yol açar.

LVM Yapısını İzleme ve Raporlama

Düzenli izleme yapmak, sorunları önceden görmenizi sağlar. Basit bir izleme scripti:

#!/bin/bash
# /usr/local/bin/lvm-monitor.sh

THRESHOLD=80
ALERT_EMAIL="[email protected]"

# Her LV'nin kullanım oranını kontrol et
df -h | grep -v tmpfs | while read filesystem size used avail use mountpoint; do
    use_percent=$(echo $use | tr -d '%')
    if [ "$use_percent" -gt "$THRESHOLD" ] 2>/dev/null; then
        echo "UYARI: $mountpoint bölümü %$use_percent dolu!" | 
        mail -s "Disk Uyarisi: $HOSTNAME" $ALERT_EMAIL
    fi
done

# VG'lerde boş alan kontrolü
vgs --noheadings -o vg_name,vg_free | while read vg_name vg_free; do
    echo "VG: $vg_name - Boş Alan: $vg_free"
done

Bu scripti crontab’a ekleyin:

# Her saat başı çalıştır
echo "0 * * * * root /usr/local/bin/lvm-monitor.sh" > /etc/cron.d/lvm-monitor

Ubuntu 22.04 LVM Kurulum Sonrası Yapılandırma

Ubuntu Server kurulumu sırasında “LVM ile birlikte” seçeneğini seçtiyseniz, sistem genellikle diskin yarısını VG’ye ayırır. Geri kalanı kullanmak için:

# Mevcut yapıyı gör
vgdisplay ubuntu-vg
lvdisplay /dev/ubuntu-vg/ubuntu-lv

# Tüm boş alanı root'a ver
lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

# Dosya sistemini genişlet
resize2fs /dev/ubuntu-vg/ubuntu-lv

# Kontrol et
df -h /

Ubuntu 22.04 kurulumu sonrası sıklıkla yapılan ama unutulan adım budur. Diskinizin yarısını boşta bırakıyorsunuz farkında olmadan.

Bozuk Physical Volume Kurtarma

Disklerden biri bozulmaya başladığında LVM bazı durumlarda yardımcı olabilir. RAID yapısı kurduysanız bu daha kolaydır. Ama en azından verileri kurtarmayı deneyebilirsiniz:

# Bozuk PV'yi tespit et
pvdisplay
dmesg | grep -i "I/O error"

# VG'yi yeni bir diske taşı
# Önce yeni diski VG'ye ekle
pvcreate /dev/sdd1
vgextend vg_data /dev/sdd1

# Verileri bozuk diskten yeni diske taşı
pvmove /dev/sdb1 /dev/sdd1

# pvmove tamamlandıktan sonra bozuk diski çıkar
vgreduce vg_data /dev/sdb1
pvremove /dev/sdb1

pvmove komutu çalışırken sistemi kapatmayın. Uzun sürebilir ama işlem yarıda kalırsa devam ettirebilirsiniz.

LVM Metadata Yedekleme

LVM konfigürasyonunuz /etc/lvm/backup/ ve /etc/lvm/archive/ dizinlerinde otomatik olarak yedeklenir. Ama elle de yedek alabilirsiniz:

# Tüm VG'lerin metadata yedeklerini al
vgcfgbackup

# Belirli bir VG için
vgcfgbackup vg_data

# Yedek nerede?
ls -la /etc/lvm/backup/

# Gerektiğinde geri yükle
vgcfgrestore vg_data

Bu yedekler disk arızasından sonra LVM yapısını yeniden oluşturmak için kritik önem taşır. Bunları da düzenli olarak off-site yedek sisteminize kopyalayın.

Sonuç

LVM, Ubuntu sunucu yönetiminde vazgeçilmez bir araç haline gelmiştir. İlk başta “neden bu kadar katman?” diye sorabilirsiniz, ama ilk kez çalışan bir sistemi durdurmadan disk genişlettiğinizde ya da anlık snapshot alıp gönül rahatlığıyla güncelleme yaptığınızda değerini anlıyorsunuz.

Pratik önerilerimi şöyle özetleyebilirim:

  • Yeni sunucu kurulumlarında her zaman LVM kullanın, sonradan pişman olmazsınız
  • /boot bölümünü LVM dışında tutun, sorun yaşarsınız
  • VG’nizde her zaman biraz boş alan bırakın, snapshot için lazım olur
  • Küçültme işlemlerinden önce mutlaka yedek alın
  • pvmove, lvextend, vgextend komutlarını test ortamında defalarca pratik yapın
  • LVM metadata yedeklerini sisteminizin dışına kopyalayın

Disk yönetimi reactive değil, proactive yapılmalıdır. Dolmadan önce genişletin, arızalanmadan önce yedekleyin. LVM size bu esnekliği sunuyor, kullanmak size kalmış.

Yorum yapın