LVM Nedir: Linux’ta Mantıksal Birim Yönetimi Rehberi

Disk alanı yönetimi, bir sistem yöneticisinin en çok baş ağrısı yaşadığı konuların başında gelir. Klasik disk bölümlendirme yöntemiyle çalışırken “şu partition’ı büyütsem keşke” diye kaç kez düşündünüz? İşte tam burada LVM devreye giriyor ve disk yönetimini bambaşka bir boyuta taşıyor.

LVM Nedir?

LVM (Logical Volume Manager), Linux çekirdeğinin depolama katmanında çalışan ve fiziksel diskleri soyutlayarak esnek, dinamik birim yönetimi sağlayan bir alt sistemdir. 1998 yılında Heinz Maurer tarafından geliştirilen bu sistem, bugün hala production ortamların vazgeçilmezi olmaya devam ediyor.

Basitçe anlatmak gerekirse: Elinizde birden fazla fiziksel disk veya partition var, LVM bunları bir havuzda topluyor ve siz bu havuzdan istediğiniz boyutta mantıksal birimler yaratıyorsunuz. Bu birimleri sonradan büyütebiliyor, küçültebiliyor, snapshot alabiliyorsunuz. Tüm bunları sistem çalışırken, servisleri durdurmadan yapabilmek ise ayrı bir lezzet.

LVM’nin Temel Katmanları

LVM’yi anlamak için üç temel kavramı kavramak şart. Bu katmanları kafanızda oturtursanız geri kalanı çok daha kolay gelecek.

Fiziksel Birimler (Physical Volumes – PV)

Fiziksel birimler, LVM’nin en alt katmanını oluşturur. Bunlar gerçek fiziksel diskler (/dev/sda, /dev/sdb) veya disk bölümleri (/dev/sda1, /dev/sdb2) olabilir. Bir diski veya partition’ı PV olarak işaretlediğinizde, LVM bu alanı kendi yönetimine alır.

Birim Grupları (Volume Groups – VG)

Birim grupları, bir veya daha fazla fiziksel birimin bir araya gelerek oluşturduğu depolama havuzudur. Tüm disk alanınızı tek bir büyük havuzda toplarsınız. Daha sonra yeni disk eklediğinizde bu havuzu genişletebilirsiniz.

Mantıksal Birimler (Logical Volumes – LV)

Mantıksal birimler, birim grubundan kestiğiniz dilimlerdir. Bunlar sistem tarafından klasik bir partition gibi görünür, format atarsınız, mount edersiniz, kullanırsınız. Ama arkada LVM’nin tüm esnekliği sizi bekliyor.

Kurulum ve Gereksinimler

Çoğu modern Linux dağıtımında LVM araçları ya kurulu geliyor ya da depolarda hazır bekliyor.

# Ubuntu/Debian sistemlerde
sudo apt-get install lvm2

# RHEL/CentOS/AlmaLinux sistemlerde
sudo dnf install lvm2

# LVM servisini etkinleştir
sudo systemctl enable --now lvm2-monitor

Kurulumun ardından lvm komutuyla etkileşimli bir konsola girebilir veya doğrudan alt komutları kullanabilirsiniz.

Sıfırdan LVM Kurulumu

Adım 1: Fiziksel Birimleri Oluşturun

Elimizde /dev/sdb ve /dev/sdc adında iki yeni disk olduğunu varsayalım. Bu diskleri fiziksel birim olarak işaretleyelim:

# Önce disklerin boş olduğunu doğrulayalım
sudo lsblk
sudo fdisk -l /dev/sdb

# Fiziksel birimler oluştur
sudo pvcreate /dev/sdb /dev/sdc

# Doğrula
sudo pvdisplay
sudo pvs

pvs komutu size kısa ve öz bir tablo verirken, pvdisplay her PV hakkında detaylı bilgi sunar. Günlük operasyonlarda genellikle pvs yeterli olur.

Adım 2: Birim Grubu Oluşturun

İki diski tek bir birim grubunda toplayalım:

# vg_data adında birim grubu oluştur
sudo vgcreate vg_data /dev/sdb /dev/sdc

# Durum kontrolü
sudo vgdisplay vg_data
sudo vgs

vgcreate komutu çalıştığında, iki diskin toplam kapasitesi artık vg_data havuzunda birleşmiş olur. Diyelim ki her disk 500GB, şimdi elinizde yaklaşık 1TB’lık tek bir havuz var.

Adım 3: Mantıksal Birimler Oluşturun

Havuzdan dilimler keselim:

# 200GB'lık bir mantıksal birim oluştur
sudo lvcreate -L 200G -n lv_database vg_data

# Kalan alanın %100'ünü kullanan birim oluştur
sudo lvcreate -l 100%FREE -n lv_backup vg_data

# Mantıksal birimleri listele
sudo lvs
sudo lvdisplay

Artık /dev/vg_data/lv_database ve /dev/vg_data/lv_backup adında iki mantıksal biriminiz var. Bunları klasik disk bölümleri gibi kullanabilirsiniz:

# Format at
sudo mkfs.ext4 /dev/vg_data/lv_database
sudo mkfs.xfs /dev/vg_data/lv_backup

# Mount noktaları oluştur
sudo mkdir -p /data/database
sudo mkdir -p /data/backup

# Mount et
sudo mount /dev/vg_data/lv_database /data/database
sudo mount /dev/vg_data/lv_backup /data/backup

# fstab'a ekle (kalıcı mount için)
echo '/dev/vg_data/lv_database /data/database ext4 defaults 0 2' | sudo tee -a /etc/fstab
echo '/dev/vg_data/lv_backup /data/backup xfs defaults 0 2' | sudo tee -a /etc/fstab

Gerçek Dünya Senaryosu 1: Disk Doldu, Ne Yapacaksın?

Klasik problem: Geceleri saat 02:00’da alarm geliyor, production veritabanı sunucusunda /var/lib/mysql dizini dolu, servis çökmüş. LVM olmadan bu senaryonun çözümü saatler sürebilir, downtime kaçınılmaz olabilir.

LVM varsa adımlar şöyle:

# Mevcut durumu kontrol et
df -h
sudo lvs
sudo vgs

# Eğer VG'de boş alan varsa, LV'yi anında büyüt
sudo lvextend -L +50G /dev/vg_data/lv_database

# Dosya sistemini de büyüt (ext4 için)
sudo resize2fs /dev/vg_data/lv_database

# XFS için (XFS sadece büyütülebilir, küçültülemez)
sudo xfs_growfs /data/database

# Sonucu kontrol et
df -h /data/database

Servis downtime yok, veri kaybı yok. Toplam işlem süresi 2-3 dakika. Patronunuz sabah kalktığında hiçbir şeyden haberi olmayacak.

Peki VG’de boş alan yoksa? O zaman yeni disk ekleyip VG’yi genişletirsiniz:

# Yeni disk /dev/sdd olarak geldi
sudo pvcreate /dev/sdd

# Mevcut VG'ye ekle
sudo vgextend vg_data /dev/sdd

# Şimdi LV'yi büyüt
sudo lvextend -L +100G /dev/vg_data/lv_database
sudo resize2fs /dev/vg_data/lv_database

LVM Snapshot: Hayat Kurtaran Özellik

Snapshot, LVM’nin en etkileyici özelliklerinden biri. Mantıksal birimin o anki durumunun anlık bir kopyasını alırsınız. Disk üzerinde ayrı bir kopy oluşturmaz, sadece değişen blokları takip eder, bu yüzden hem hızlı hem de verimlidir.

# lv_database'in snapshot'ını al (10GB geçici alan ayır)
sudo lvcreate -L 10G -s -n lv_database_snap /dev/vg_data/lv_database

# Snapshot'ı görüntüle
sudo lvs -a

# Snapshot'ı bir yere mount et, içeriği kontrol et
sudo mkdir /mnt/snapshot
sudo mount -o ro /dev/vg_data/lv_database_snap /mnt/snapshot
ls /mnt/snapshot

# İşin bitince snapshot'ı sil
sudo umount /mnt/snapshot
sudo lvremove /dev/vg_data/lv_database_snap

Snapshot ile Güvenli Güncelleme Senaryosu

Uygulama güncellemesi yapacaksınız ama bir şeyler ters giderse hızlıca geri dönmek istiyorsunuz:

# Güncelleme öncesi snapshot al
sudo lvcreate -L 20G -s -n pre_update_snap /dev/vg_data/lv_database

# Güncellemeyi yap
sudo apt-get upgrade mysql-server

# Eğer sorun çıkarsa snapshot'a geri dön
sudo systemctl stop mysql
sudo lvconvert --merge /dev/vg_data/pre_update_snap
sudo systemctl start mysql

lvconvert --merge komutu snapshot’ı orijinal birimi geri yükler. Bu işlem sonrasında sistem yeniden başlatılması gerekebilir, ama verileriniz güvende.

Gerçek Dünya Senaryosu 2: Disk Değiştirme (Veri Taşıma)

Eski ve yavaş bir HDD’den yeni SSD’ye geçiş yapmak istiyorsunuz, ama sistemi durduramıyorsunuz:

# Yeni SSD'yi PV olarak ekle
sudo pvcreate /dev/nvme0n1

# VG'ye dahil et
sudo vgextend vg_data /dev/nvme0n1

# Eski diskten yeni diske verileri taşı (çalışır durumda)
sudo pvmove /dev/sdb /dev/nvme0n1

# Taşıma tamamlandı, eski diski VG'den çıkar
sudo vgreduce vg_data /dev/sdb

# PV etiketini kaldır
sudo pvremove /dev/sdb

# Artık /dev/sdb'yi güvenle çıkarabilirsiniz

pvmove komutu arka planda çalışır ve çok büyük diskler için saatler alabilir. -n parametresiyle belirli bir LV’yi taşıyabilirsiniz: sudo pvmove -n lv_database /dev/sdb /dev/nvme0n1

LVM İnce Provizyon (Thin Provisioning)

Thin provisioning, sanal makine ortamlarında ve geliştirme sunucularında çok işe yarayan bir LVM özelliği. Gerçekte kullanılandan daha fazla disk alanı tahsis edebilirsiniz.

# Thin pool oluştur (200GB fiziksel alanla)
sudo lvcreate -L 200G --thinpool tp_pool vg_data

# Thin pool'dan 500GB'lık LV oluştur (overcommit)
sudo lvcreate -V 500G --thin -n lv_thin_test vg_data/tp_pool

# Durumu kontrol et
sudo lvs -a vg_data

Dikkat: Thin provisioning kullandığınızda gerçek kullanımı yakından takip etmelisiniz. Pool dolduğunda ciddi sorunlar yaşanabilir. Production’da monitoring olmadan kullanmayın.

Faydalı LVM Komutları ve Parametreler

Günlük operasyonlarda sık kullandığım komutlar:

# Genel durum raporu
sudo vgdisplay -v

# Tüm LVM objelerini tek komutla gör
sudo lvm fullreport

# LV boyutunu hem büyüt hem dosya sistemini genişlet (tek komut)
sudo lvresize -r -L +10G /dev/vg_data/lv_database

# Yüzde olarak büyütme
sudo lvresize -r -l +20%VG /dev/vg_data/lv_database

# LV'yi yeniden adlandır
sudo lvrename vg_data lv_database lv_mysql

# VG'yi yeniden adlandır
sudo vgrename vg_data vg_production

lvresize komutunun -r parametresi özellikle kullanışlı:

  • -r: Dosya sistemini otomatik olarak yeniden boyutlandırır, ayrıca resize2fs çalıştırmanıza gerek kalmaz
  • -L: Mutlak boyut belirtir (+10G gibi)
  • -l: Extent sayısı veya yüzde olarak belirtir

LVM’yi Sisteme Entegre Etme: /etc/lvm/lvm.conf

LVM’nin davranışını /etc/lvm/lvm.conf dosyasından özelleştirebilirsiniz. Birkaç önemli ayar:

# Belirli diskleri LVM'den dışlamak için (örneğin USB diskler)
# lvm.conf içinde:
# devices {
#     filter = [ "a/sda/", "a/sdb/", "r/sdc/", "r/.*/"]
# }

# Mevcut konfigürasyonu görüntüle
sudo lvm dumpconfig

# Konfigürasyonu doğrula
sudo lvm dumpconfig --validate

Monitoring ve Sorun Giderme

Sağlıklı bir LVM ortamı için düzenli kontroller şart:

# Tüm PV, VG, LV durumunu hızlıca kontrol et
sudo pvs && sudo vgs && sudo lvs

# Hatalı PV var mı kontrol et
sudo pvscan

# VG tutarlılığını kontrol et
sudo vgck vg_data

# LVM event daemon durumu (thin lv izleme için önemli)
sudo systemctl status lvm2-lvmpolld

# Snapshot kullanım oranı (dolmadan önce uyar)
sudo lvs -o name,snap_percent vg_data

Production ortamlarda snapshot ve thin pool doluluk oranlarını izlemeniz için basit bir script:

#!/bin/bash
# /usr/local/bin/lvm_check.sh

THRESHOLD=80

while IFS= read -r line; do
    LV_NAME=$(echo $line | awk '{print $1}')
    SNAP_PERCENT=$(echo $line | awk '{print $2}' | tr -d '%')
    
    if [ ! -z "$SNAP_PERCENT" ] && [ "$SNAP_PERCENT" -gt "$THRESHOLD" ]; then
        echo "UYARI: $LV_NAME snapshot doluluk orani: %$SNAP_PERCENT"
        # Buraya mail veya Slack bildirimi ekleyebilirsiniz
    fi
done < <(sudo lvs --noheadings -o lv_name,snap_percent 2>/dev/null | grep -v ' $')

Bu scripti crontab’a eklersek:

# Her 15 dakikada bir kontrol
*/15 * * * * /usr/local/bin/lvm_check.sh >> /var/log/lvm_check.log 2>&1

LVM Metadatasını Yedeklemek

Bunu yapmayanlar için söylüyorum: LVM metadata kaybı, tüm mantıksal birim yapılandırmanızın gitmesi demek. LVM bunu otomatik olarak yapıyor ama elle yedek almak iyi alışkanlık:

# Metadata yedekle
sudo vgcfgbackup -f /root/lvm_backup_$(date +%Y%m%d).cfg vg_data

# Metadata geri yükle (felaket durumunda)
sudo vgcfgrestore -f /root/lvm_backup_20240115.cfg vg_data

Otomatik yedekler /etc/lvm/backup/ ve /etc/lvm/archive/ dizinlerinde tutuluyor. Bu dizinleri de genel sistem yedeklerinize dahil etmeyi unutmayın.

LVM ve RAID: Birlikte Kullanım

LVM, yazılım RAID (mdadm) ile birlikte kullanıldığında hem esneklik hem performans hem de dayanıklılık sağlar. Tipik bir kurulum:

  • Alt katman: RAID1 veya RAID6 (dayanıklılık için)
  • Üst katman: LVM (esneklik için)
# RAID6 üzerine LVM PV oluşturma
sudo mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sd{b,c,d,e}
sudo pvcreate /dev/md0
sudo vgcreate vg_raid /dev/md0
sudo lvcreate -L 500G -n lv_data vg_raid

LVM ile İlgili Sık Yapılan Hatalar

Yıllar içinde gördüğüm ve bizzat yaptığım hatalar:

  • Snapshot alanını küçük almak: Snapshot dolarsa otomatik olarak devre dışı kalır ve merge edilemez. Snapshot boyutunu değişiklik miktarının en az 2 katı alın.
  • Küçültme işleminde sırayı karıştırmak: LV küçültürken önce dosya sistemini küçültün, sonra LV’yi. Tersi yapılırsa veri kaybı kesin.
  • XFS’i küçültmeye çalışmak: XFS dosya sistemi küçültülemiyor. Bunu denemeyin.
  • Thin pool’u monitörsüz bırakmak: Thin pool %100 dolduğunda LV’ler deactivate olur, bu production’da felaket demektir.
  • Metadata backup’ı ihmal etmek: LVM metadatasını sistem yedeklerinden ayrı tutmak büyük hata.

Sonuç

LVM, bir kez alıştıktan sonra “bunu nasıl yapmadan yaşadım” diyeceğiniz araçlardan biri. Disk alanı yönetiminde size gerçek bir özgürlük sunuyor: büyütme, taşıma, snapshot alma, hatta çalışırken disk değiştirme. Tüm bunlar için sistem kapatmak gerekmiyor.

Eğer yeni kurduğunuz bir sunucu varsa, disk bölümlerini doğrudan oluşturmak yerine LVM üzerinden gitmenizi şiddetle tavsiye ederim. İlk kurulumda biraz daha zaman harcıyorsunuz ama uzun vadede kazandığınız esneklik, o zamanın çok üzerinde bir karşılık veriyor.

Özellikle veritabanı sunucuları, depolama sunucuları ve sanallaştırma host’ları için LVM neredeyse standart hale gelmiş durumda. Snapshot özelliğini backup stratejinize entegre ettiğinizde, uygulamalarınızı durdurmadan tutarlı yedekler alabilirsiniz. Bu tek başına bile LVM kullanmak için yeterli bir sebep.

Burada anlattıklarım LVM’nin temel ve orta düzey kullanımını kapsıyor. Daha ileri seviyede cache volume’lar (lvmcache), VDO entegrasyonu ve cluster LVM (clvmd) gibi konular da var, onları ayrı yazılarda ele alacağım. Sorularınız varsa yorumlara bekliyorum.

Yorum yapın