LVM (Logical Volume Management)

Eyl 06, 2013

LVM, modüler disk veri kümesi veya kümeleri oluşturulmasını, böylelikle de istenildiğinde mevcut disk alanı üzerinde  istenilen boyutlandırmanın yeniden yapabilmesini sağlar. Disk alanının yetersiz kaldığı durumlarda LVM ile oluşturulan disk veri kümesine kolaylıkla yeni disk veya disk bölümleri ilave edebilir, ihtiyaca göre disk alanı şekillendirilebilir.

Özellikle büyük disk alanı ihtiyacı olan sistemlerde LVM ile disk veri kümeleri oluşturularak ya da sisteme yeni bir disk daha eklenerek toplam disk boyutu arttırılabilir veya sistemde pasif durumda olan bir disk bölümü aktif disk kümesine dahil edilebilir. Aynı zamanda mevcut disk bölümlerinin boyutları değiştirilebilir. Yapılacak fiziksel veri alanı değişikliklerinden sistemin mevcut haritası hiçbir şekilde etkilenmez ve yeni tanımlar yapmaya gerek kalmaz.

Bir örnek ile ifade edilirse; sistemde /home için ayrılmış 100 GB'lık ve /var için ayrılmış 2GB'lık alanlar olsun. Zamanla /var için ayrılan disk alanın yetersiz gelmeye başladığı düşünülsün. Bu durumda  /home alanında kullanılmayan yeterli boş alan varsa bu alan /var bölümüne aktarılabilir ve mevcut alan kolayca yeniden boyutlandırılabilir. Aynı şekilde /home için ayrılan alan yetmemeye başladığı zaman da sisteme eklenecek yeni bir disk ile bu bölüm için kullanılabilir veri alanı arttırabilir. Yedekleme (Mirror) yapılan sistemlerde kullanılan disk veri alanları genelde birden fazla diskin LVM veya aynı işi yapan başka yapılarla birleştirilerek veri kümesi oluşturulması ile sağlanır.

LVM, hacim grubu (vp) ve bu grubun içinde fiziksel hacim (pv) ve mantıksal hacimlerden (lv) oluşur.

Hacim Grubu (VG): Hacim grubu, fiziksel ve mantıksal hacimleri içine alan üst düzey bir katmandır.

Fiziksel Hacim (PV): Fiziksel hacim adından da anlaşılacağı üzere fiziksel aygıtlardan (disklerden) veya disk bölümlerinden oluşan kısımdır.

Mantıksal Hacim (LV): Disk bölümlerinin karşılığıdır. Dosya sistemi içerir.

Fiziksel hacime örnek olarak diskler veya bu disklerin bölümleri verilebilir. İki farklı disk bölümü birleştirilip ortaya bir hacim grubu çıkarılır. Daha sonra bu hacim grubunun içinde de mantıksal bölümlemeler yapılır. Bu mantıksal bölümler dosya sistemlerini içerirler. Dosya sistemi olarak her mantıksal bölümde farklı olarak kullanılabilirler.

Aşağıdaki şekiller hacim gruplarına ve bunların içindeki mantıksal hacimlere örnektir.


Ayrıca fiziksel hacim içerisinde fiziksel birimler (PE) ve aynı şekilde mantıksal hacim içerisinde bulunan mantıksal kümeler vardır. Bunların varsayılan değeri tüm dosya sistemlerinde aynı olup 4 MB'dır. 

Fiziksel Birimler (PE): Fiziksel hacim her biri eşit uzunlukta (varsayılan değeri 4 MB) veri parçalarına bölünmüştür.

Mantıksal Birimler (LE): Mantıksal hacimlerde aynı şekilde her biri eşit uzunlukta (varsayılan değeri 4 MB) veri parçalarına bölünmüştür. Fiziksel birimler ve mantıksal birimler arasında da birebir ilişki vardır.

Aşağıdaki şemada fiziksel birimler birleşerek fiziksel hacimleri, mantıksal birimler birleşerek mantıksal hacimleri oluşturmuşlardır. Daha sonra bu mantıksal ve fiziksel hacimler birleşerek hacim gruplarını oluşturmuşlardır.
 

Diğer şekilde ise 1. sabit diskin /home dizini ve 2. sabit diskin /var dizini fiziksel birimlerle birleşir ve fiziksel hacim 1 ve fiziksel hacim 2 grupları oluşur. Bu fiziksel hacim grupları da birleşerek hacim grubunu oluştururlar.


LVM’nin Avantajları

  • Ölçeklenebilirlik: Çok yüksek veri alanı kümelerinin oluşturulabilmesini sağlar. LVM sayesinde Terabyte'lar mertebesinde disk veri alanı dizileri oluşturulabilir.

  • Kullanılabilirlik: Oluşturulan veri alanlarını dinamik şekilde yönetebilme, istenildiğinde yeni veri alanları ekleyebilme veya fazla veri alanlarını sistemden çıkarabilme gibi imkanları sağlar.

  • Anlık Görüntü (Snapshot): Özellikle yedekleme işleminde kullanılan önemli bir özelliktir. Üzerinde sürekli işlem yapılan bir veri alanı (veritabanı) ele alınsın. Bu veritabanı tutarlı bir anında yedeklenmek istensin. Bu durumda, snapshot özelliği yapılacak işlemler için kolaylık ve hız sağlar.
    Bu veritabanı normal yöntemlerle (copy, rsync vb.) bir yerden diğer bir yere yedeklenirken, yedek alınan yerdeki veritabanı o an için tutarlı olmayan bir durumda kalmış olabilir. Bir veri A tablosuna yazıldıktan sonra o veri ile ilişkili başka veriler tam B tablosuna da yazılacağı sırada yapılan bir yedekleme, tutarsız bir yedeklemeye sebep olabilir. Bunu engellemek için yedek almadan önce, veritabanı tutarlı olduğu bir anda durdurulup yedeklenir. Sonra veritabanı kaldığı yerden devam ettirilebilir. Ancak bu durum özellikle yüksek oranda veri yedeklemesi yapılacağı durumlarda ciddi gecikmelere ve sistemin işlemez hale gelmesine sebep olabilir. Bunun önüne geçebilmek için veritabanının tutarlı olduğu bilindiği bir anda LVM ile anlık görüntüsü alınarak veritabanının duraksamasına engel olunur. Snapshot alınmadan önce tutarlı durumu korumayı garanti edebilmek için veritabanı durdurulsa bile görüntü ile yedekleme işlemi çok kısa bir zaman alacağından  veritabanının tekrar aktif hale getirilmesi çok uzun sürmeyecektir.

LVM ile Anlık Görüntü (Snapshot) Almak

LVM disk alanının esnek bir şekilde yönetilebilmesinin yanında ayrıca sürekli değişen dosyaların anlık görüntüsünün alınması sırasında bir yedeğinin de alınmasını sağlar. Anlık görüntü almak için ilgili modülün yüklenmesi gerekir.

  1. modprobe dm_snapshot komutu ile modül yüklenir.



  2. lvcreate komutu ile 500M'lık bir anlık görüntü oluşturulur. Bu 500M alan bölümün anlık görüntüsü alındıktan sonra yazılacak 500M 'lık dosyaları tutmak için ayarlanmaktadır. Bu sayede oluşturulan görüntü asıl dosya sisteminden daha küçük boyutlarda olabilir. Aşağıda işletilen komutta -s parametresi anlık görüntü oluşturmak için, -L parametresi oluşturulacak görüntünün boyutunu belirtmek için, -n parametresi ise oluşan görüntüye verilecek isim için kullanılmıştır. Aşağıdaki örnekte testsnpsht isminde 500 mb'lık bir snapshot oluşturulmaktadır.



  3. Bu işlemden sonra oluşturulan anlık görüntü istenilen bir dizine bağlanır. Böylelikle bu görüntü üzerinden yedek alınabilir. Aşağıda testsnpsht isimli snapshot  /snap dizine bağlanır.

Tüm bu işlemlerden sonra /snap üzerinde istenilen yedekleme işlemi uygulanabilir. /usr altında bir dosya silinse bile bu silinen dosya /snap altında durmaya devam edecektir.

Journaling (Loglama)
Journaling dosya sistemi diğer dosya sistemlerinden (ext2) daha karmaşık bir yapıya sahiptir. Journaling (loglama) özelliği, dosya sistemlerine, sabit diskler üzerindeki tüm değişiklikleri kontrol etme, bu değişikliklerin loglarını tutma ve sabit disk üzerinde yapılan tüm işlemleri kontrol ederek düzenleme olanağı sağlar. Loglama özelliği güvenliği arttıran bir özelliktir. Sabit diskte bir değişiklik olduğu zaman loglara bakılarak, sabit disk üzerinde yapılan değişiklik geri alınabilir veya diske daha güvenli bir şekilde müdahale edilebilir. Journaling özelliğine sahip olan başlıca dosya sistemleri EXT3, Reiserfs, XFS ve JFS dir.
 

LVM İçin Tercih Edilen Dosya Sistemleri

Dosya sistemi tercihi, kullanılan bilgisayar sistemin ne amaçla kullanılacağına ve bu sistemdeki dosyaların hangi boyutta olacağına, performansın veya sağlamlılığın ön planda tutulmasına göre yapılır. LVM’de kullanılan dosya sistemleri şöyledir.

Ext2: En çok tercih edilen kararlı dosya sistemlerindendir. Ancak journaling özelliğine sahip olmaması ve veri kaybı riskinin yüksek olması bu dosya sisteminin tercih edilebilirliğini düşürmektedir.

Ext3: En kararlı journaling dosya sistemlerinin başında gelir. Artık çoğu dağıtımda varsayılan kurulumda desteklenir ve tercih edilir durumdadır. Aynı zamanda günümüzde çoğu sunucu bu dosya sistemi kullanılmaktadır.

ReiserFs: Küçük boyutlu ve çok sayıda olan dosyalarda yüksek performans sergiler. Bu dosya sisteminin eksik tarafı bozuk sektörler (bad sector) bulunduran disklerde bozuk sektör yönetimi yapamadığı için bu alanlara ulaşamayıp hataları düzeltememesidir. ReiserFS hakkındaki görüşler genelde yeterince olgunlaşmadığı yönündedir.

XFS: Kararlı ve sağlam bir dosya sistemidir. XFS için amaç yüksek performans değil yüksek kararlılıktır. Bu açıdan veri kaybının çok büyük zararlara yol açabileceği ve verilerin korunması son derece önemli olan sistemlerde tercih edilir.

JFS: Linux için kararlı halde değildir. Sistemlerde kullanımı tercih edilmez.

LVM'nin Limitleri

LVM  bir takım limitler içerir. Ancak bu limitler günümüzde bile kolay aşılabilecek ve problem oluşturabilecek limitler değildirler. Ayrıca bu limitler çekirdeğin sınırlarına, fiziksel ve mantıksal birim boyutlarına göre de sistemden sisteme farklılık gösterebilir. Limitler her dosya sistemi (ext3, reiserfs, ext2, jfs, xfs) için aynıdır. Söz konusu limitler şöyledir;

  • Makine başına oluşturulabilecek maksimum hacim grubu (VG) sayısı 99 'dur.
  • Her hacim grubu içinde olabilecek maksimum fizisel hacim sayısı 256 dır.
  • Tek bir LVM boyutu varsayılan 4 MB fiziksel birim değeri ile maksimum 255.99 GB olabilir. Bu değer kullanılan sistemin özelliğine göre 2 TB hatta istenildiğinde 1 Petabyte 'a kadar çıkabilir.
  • Her fiziksel hacim grubu yine varsayılan 4 MB'lık fiziksel birim değeri ile maksimum 262 GB olabilir. Yani her fizisel hacim grubu maksimum 65534 tane fiziksel birim içerebilir bu da varsayılan 4 MB'lık değer ile 65534*4 = 262 GB 'a denk gelir.

LVM'de Kullanılan Komutlar ve Görevleri

Not:
LVM'de kullanılan komutlar tüm Linux sürümleri için aynıdır.

pvcreate: Sisteme diski veya bölümü fiziksel olarak tanıtır. Genellikle  fdisk'ten sonra kullanılır.

$ pvcreate /dev/sdb1

pvdisplay: Fiziksel tanımlı diskleri ve bölümleri ekrana listeler.

$ pvdisplay

pvremove: Fiziksel tanımlı diskin veya bölümün tanımını iptal eder.

$ pvremove /dev/sdb1

vgcreate: Hacim grubu oluşturur.

$ vgcreate vg0 /dev/sdb1 /dev/sdb2

vgextend: Hacim grubuna disk veya bölüm ekler.

$ vgextend vg0 /dev/sdc
$ vgextend vg0 /dev/sdb1

vgreduce: Hacim grubundan disk veya bölüm çıkartır.

$ vgreduce vg0 /dev/sdc
$ vgreduce vg0 /dev/sdb1

vgremove: Hacim grubununu kaldırır.

$ vgreduce vg0

vgdisplay: Hacim grubunu listeler.

$ vgdisplay vg0

vgcfgbackup: Mevcut hacim grubunun ayarlarını bir dosyaya yedekler.

$ vgcfgbackup vg0                             (Ayarlar /etc/lvm/backup dizini altına yedeklenir.)

vgcfgrestore: Mevcut hacim grubunun ayarlarını dosyadan düzenler.

$ vgcfgrestore vg0

lvcreate: Tanımlı mantıksal gruptan disk alanı oluşturur.

- Toplam 300GB disk alanına sahip vg0 isimli hacim grubundan bir adet 80 Gb, bir adet 55GB 'lik mantıksal sürücü oluşturulsun.

$ lvcreate -L80GB vg0                         ( /dev/vg0/lvol0 isimli 80Gblık mantıksal sürücü oluşur.)
$ lvcreate -L40GB vg0                         ( /dev/vg0/lvol1 isimli 40Gblık mantıksal sürücü oluşur.)

lvdisplay: Mantıksal sürücüleri ekrana listeler.

$ lvdisplay

lvremove: Mantıksal sürücüleri kaldırır.

$ lvremove /dev/vg0/lvol0

lvreduce: Tanımlı mantıksal sürücülerden blok siler.

$ lvreduce -L-10GB /dev/vg0/lvol0               (10GBlik alanı iptal eder.)

lvextend:
Tanımlanmış mantıksal sürücüye blok ekler.

$ lvextend -L+10GB /dev/vg0/lvol0              (10GBlik alan ekler.)

lvm: Lvm  komutlarını ekrana açıklamasıyla beraber listeler.

lvmdiskscan: Sistemdeki tüm diskleri listeler.