tr | en
22
Ara
2013
LVM, Tüm Sırlarıyla...
Yazar: Shawn Powers    |   Kategori: İpucu

Evet biraz karmaşık ve zaman alıcı; ama kesinlikle buna değdiğini göreceksiniz.

                                                                                                  

[Özgün yazı: http://porky.linuxjournal.com:8080/LJ/236/11603.html]

Oldukça uzun bir süredir sistem yöneticiliği yapıyorum; sistem yöneticisi olmanın bir yönü ise insani olmayan bazı şeyleri daha çok yapmak durumunda kalmak. Bu bazen çılgın ve etkileyici betikler yazmak anlamına geliyor, bazen geç saatlere kadar çalışmak, bazense "hayır" dememeyi öğrenmek. Ne yazık ki, bazen de işin kolayına kaçmak anlamına geliyor. İtiraf ediyorum, birden fazla kez "o adam" oldum. Bunun güzel bir örneği SELinux. Birkaç kezden daha fazla diyebileceğimiz(en az yüz kere!) farklı durumda, hiç uğraşmadan SELinux'u devre dışı bıraktım, çünkü bazı şeylerin düzgün çalışmasını sağlamak sıklıkla sinir bozucu ve zaman kaybettirici hale geliyor. Aynısı LVM (Logical Volum Manager) için de geçerli. Bir türlü tam anlamıyla hakim olamadım. Onu sadece karmaşıklığı artırıcı bir katman olarak düşündüm, başka bir potansiyel hata yapma noktası olduğunu varsaydım, aptalca bir şey olduğunu düşündüm.

Ama yanılıyordum.

LVM, inanılmaz derecede esnek, komik derecede kullanışlı ve sistemi kullanmak için hiç de korkulacak kadar karmaşık değil. Hayatı kolaylaştırıyor. Depolama araçlarında ileride yapılacak yükseltmeleri ve göçleri(aktarmaları) kolaylaştırıyor. Öyle basit hale getiriyor ki, onu seviyorum. Bu yüzden bu makalede, LVM'nin kavramlarını ve kullanımını ele alacağım. Bu sayede sizin de onu benim sevdiğim kadar seveceğinizi umuyorum!

LVM Nedir?
LVM'yi açıklamak için öne sürebileceğim en benzer yapı SAN. Eğer daha önce sunucu ortamınızda SAN (Storage Area Network) kullandıysanız, onun tekil disk sürücülerini soyutlaştırma fikrine ve bu disk alanlarından sürücü olarak kullanılabilecek yığınlar oluşturma imkanı sağladığına aşinasınızdır. Disk sürücülerinizin ne kadar büyük olabileceği konusunda endişelenmek yerine, bir SAN tüm disk sürücülerinizi bir gövdenin içine koymanıza ve tekil istemcilerinizin kullanacağı disk alanlarını ayırırken hangisinin kaç tane fiziksel sürücü kullanacağını düşünmeden hareket edebilmenize olanak sağlar. LVM de bir nevi bunun gibidir, fakat bütün bir ağ yerine tekil sistemler içindir.

Şekil 1'de LVM konseptini anlatmak için yaptığım başarısız çizim denememi görebilirsiniz. İlk bakışta LVM kullanmak aptalca gibi görünebilir. Neden disk sürücülerinizi basitçe sanal sürücülere bölmek yerine hepsini bir araya getiresiniz ki, değil mi? Zamanı geldiğinde, bu basit inanılmaz bir esneklik sağlayacak. Büyük bir disk bölümüne (partition) ihtiyacınız var; ama elinizde sadece küçük boyutlu disklerden bir demet mi var? Dert değil. Şimdilik sadece birkaç diskiniz var, fakat ileride sistemi formatlamadan yeni diskler mi eklemek istiyorsunuz? Dert değil. Sanal sunucular için yapılabildiği gibi, sistemin belirli bir andaki kopyasını (snapshot) almak istiyorsunuz, fakat sadece gerçek yalın metal bir sistem mi kullanıyorsunuz? Dert değil. LVM, depolama ile uğraşmayı disk bölümlendirmesi yapmaktan veya basit bir RAID yapısı kullanmaktan çok daha iyi hale getiriyor(bu da beni kazara bir sonraki konuya getiriyor).

Şekil 1: Çizimimi bir sanat eser, olarak değerlendirmeniz önemli, tabii muhtemelen ikinci sınıf bir sanat eseri.

LVM Ne Değildir?
Bir önceki bölümde bahsettiğim esneklik ve genişletilebilirlik özellikleriyle LVM, donanım ya da yazılım tabanlı RAID için mükemmel bir alternatif gibi görünebilir. Ne de olsa, RAID'in en büyük avantajlarından birisi, çok sayıda küçük boyutlu disk sürücüsünün tek bir geniş boyutlu disk olarak kullanılabilmelerini sağlaması. Bu belirli özellik açısından baktığımızda elbette LVM idealdir. Öte yandan, LVM ne yazık ki artıklık (redundancy) ve eşlik (parity) için herhangi bir çözüm sunmaz. Bu da demektir ki LVM'de bir sürücü hatası yaşanırsa veri kaybedersiniz. Şeritli (striped) LVM ya da yansılanmış (mirrored) LVM diye bir şey yoktur; basitçe açıklamak gerekirse LVM bu amaçlar için tasarlanmamıştır.

LVM, çoklu diskler üzerinde okuma ve yazma işlemi yapılırken hızı artırmak amacıyla da tasarlanmamıştır. Birim grubunda (volume group) yer alan blok cihazlar (block device) doldukça, eşzamanlı okuma ve yazma işlemleri görülebilir, fakat bu durum tasarlanmış bir şey değildir ve kesinlikle hızı artırmaya yönelik değildir. Umuyorum ki bu nokta yeterince açıktır: LVM gerçekten süper, fakat hiçbir şekilde RAID'in yerini alacak bir şey olarak düşünülmemelidir. (Not: Aslında LVM'nin güncel sürümleri şeritleme (striping) ve yansılama (mirroring) özelliklerini sağlıyor. Bazı durumlarda, RAID'in yerini tamamen doldurabilir. Fakat ben hâlâ ikisini iki farklı konsept olarak anlamanın önemli olduğunu düşünüyorum. Eğer LVM'yi RAID'in özelliklerinden yararlanacak şekilde öğrenmek istiyorsanız, onu bir alıştırma olarak öğrenmek üzere size bırakıyorum.)

Bir Koltukta İki Karpuz
Eğer çizimimin ilk "aşama"sına göz atarsanız, oradaki 10GB büyüklüğündeki kısımları "disk" (drive) olarak adlandırmadığımı fark edersiniz; onlara "fiziksel birim" (physical volume) dedim. Bunun sebebi, LVM'de fiziksel bir diski bütün olarak bir fiziksel birim olarak kullanabileceğiniz gibi, bunun bir zorunluluk olmaması. Hatta, bu kullanım türü yaygın bir uygulama bile değildir. Birçok canlı ortamda LVM ile RAID birlikte kullanılır. Donanım tabanlı ya da yazılım tabanlı RAID olması fark etmez, alt katmanda fiziksel birimlerinizin RAID olarak yapılandırılması ideal olandır.

Zamanında donanım tabanlı RAID dizileriyle bazı sorunlar yaşamış biri olarak, kendi sistemlerimde yazılım tabanlı RAID kullanmayı tercih ediyorum. Bu seçim elbette kişisel tecrübelerle ilgilidir, fakat her ikisi de son derece faydalı olan LVM ve yazılım tabanlı RAID'in kernel düzeyinde birlikte çalışabildiklerini bilmek güzel. Kuşkusuz, yazılım tabanlı RAID bir miktar CPU kaynaği tüketiyor, özellikle de dizilerini yeniden yapılandırırken; ama LVM çok az CPU kaynağı tüketir. Eğer sizin için giriş/çıkış (I/O) performansı her şeyden daha önemliyse, herhangi bir çözümü hayata geçirmeden önce bir miktar araştırma yapmanıza ve muhtemelen test etmenize ihtiyacınız olacaktır.

Başlıyoruz
Halihazırda kurulu bir Linux sistemi LVM'ye geçirmek mümkün olsa da, kurulum öncesinde bunu yapmak çok daha tercih edilesidir. Birçok Linux dağıtımı kurulum aşamalarında LVM ayarlarının yapılmasına imkan sağlamaktadır; SUSE, CentOS ve RHEL dağıtımları ise LVM'yi ön tanımlı olarak kullanmaktadır. RAID olmayan tek bir fiziksel diske kurulum yapıyor olsanız bile LVM'yi tercih etmeniz, sonraki zamanlarda size esneklik ve genişleme seçeneği sunacaktır. Kahretsin, bir sunucuya sonradan RAID eklemek mümkün, ekledikten sonra verileri orijinal fiziksel diskinizden RAID kullanılan diske kolayca aktarabilirsiniz. Verilerinizi kopyalarken sunucunuzun çalışır halde kalmasını da istiyorsanız bu şekilde yapmak dd komutunu kullanmaktan çok daha kolay.

Bu bir giriş yazısı olduğu için, basit bir kurulum örneğiyle başlamama izin verin: Diyelim ki /dev/sdb ve /dev/sdc şeklinde iki fiziksel diskiniz var. LVM ile, herhangi bir blok cihaz (block device) fiziksel birim (PV) olarak kullanılabilir, yani disk bölümlerini ya da diskin tamamını kullanabilirsiniz. Eğer "geleneksel" bir disk bölümüne ihtiyacınız varsa (bazı durumlarda /boot bölümünün LVM olmayan bir disk bölümüne kurulması gerekebilir), diskinizi birim grubuna (volume group) eklemeden önce bölümlendirdiğinizden emin olun. Bu örnekte ise ham diski bölümlendirilmemiş olarak kullanalım.

1. Adım: Fiziksel Birimler (Physical Volume) Oluşturmak
Birim grubunuza (volume group) eklemek istediğiniz blok cihazlarınızı (block devices) hazırladıktan sonra, onları LVM fiziksel birimleri (physical volumes) olarak işaretlemeniz (tekrar hatırlatayım, kavramların karışmaması için çizimime göz atın) gerekir. Bunu yapmak için pvcreate komutunu kullanın:

pvcreate /dev/sdb
pvcreate /dev/sdc

Bu komutlar, sürücüleri birim grubuna (volume group) eklenecek potansiyel adaylar olarak ayarlar. Komutların düzgün biçimde çalıştığından emin olmak isterseniz, pvdisplay ya da pvscan komutlarını kullanarak mevcut LVM fiziksel birimlerinin durumlarını görüntüleyebilirsiniz:

$ sudo pvdisplay
--- Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 10.4 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 4994
Free PE 4994
Allocated PE 0
PV UUID SRKAXh-EpYr-r2td-g0gA-31RA-fnfz-3qqGrO

--- Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 10.4 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 4994
Free PE 4994
Allocated PE 0
PV UUID t2cKru-IwMy-I8re-ADp2-vzFF-Tvh5-O4zMhI

Ve, daha basit bir görüntüleme sunan pvscan komutunun çıktısı:

$ sudo pvscan
PV /dev/sdb lvm2 [10.4 GiB]
PV /dev/sdc lvm2 [10.4 GiB]
Total: 2 [20.8 GiB] / in use: 0 [0 ] / in no VG: 2 [20.8 GiB]


Birim grubunuzu ve mantıksal birimlerinizi oluşturduktan sonra, bu komutları çalıştırarak devam edin ve bu bilgilerin değiştiğini gözlemleyin. Aradaki değişiklik belirgin biçimde görünecek ve mantıklı gelmeye başlayacak.

2. Adım: Birim Grubu [Volume Group]

Henüz bir birim grubunuz yok, o yüzden elinizdeki iki fiziksel birimini (physical volume) kullanarak bir birim grubu yaratın:

vgcreate my_volume_group /dev/sdb /dev/sdc

Neyseki komut oldukça açık. Önceki adımda oluşturduğunuz /dev/sdb ve /dev/sdc fiziksel birimlerinizi (physical volume) kullanarak, my_volume_group adında bir birim grubu (volume group) oluşturdunuz. Fiziksel birimlerinizle birlikte, sisteminizdeki LVM birim gruplarınızın (volume groups) güncel durumlarını kontrol etmek için de vgdisplay komutunu kullanabilirsiniz:

$ sudo vgdisplay
--- Volume group ---
VG Name my_volume_group
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 20.8 GiB
PE Size 4.00 MiB
Total PE 9988
Alloc PE / Size 0 / 0 GiB
Free PE / Size 9988 / 20.8 GiB
VG UUID oVYiY6-bQp9-4CVO-QgrN-LGgB-1umR-ebJQo4


Komutun çıktısında da görebileceğiniz gibi, iki fiziksel birimin (physical volume) sahip olduğu disk boyutlarını (her biri 10.4GB) birleştirerek toplamda 20.8GB büyüklüğünde bir havuz bir grup elde ettiniz. Birim grubunuza başka diskler ekleyebilirsiniz, başka disk sürücülerinizin tamamını ya da bazı bölümlerini işin içine karıştırabilirsiniz. LVM bu konuda çok esnektir. Ne var ki, mantıksal birimlerinizi (logical volume) oluşturmadığınız sürece bu geniş veri havuzu işlevsizdir.

3. Adım: Mantıksal Birimler (Logical Volumes)

Sisteminize bir disk sürücüsü eklediğinizde, aslında onun ismini gerçekten siz seçmezsiniz. Elinizde sadece /dev/sda, /dev/sdb diye ilerleyen isimler olur. Mantıksal birimler (logical volume) oluşturduğunuzda ise cihazları nasıl adlandıracağınıza siz karar verirsiniz. Ayrıca her bir "sürücünün" boyutunun ne kadar olacağına da kendiniz karar verirsiniz, tıpkı birim grubunun boyutuna karar verdiğiniz gibi. Mantıksal birimlerinizi çok küçük boyutlarda oluştursanız bile onları daha sonra genişletmenin çok kolay olduğunu belirtmem iyi olacak, yani uzun vadede oluşabilecek potansiyel ihtiyaçlara karşı bir planlama yapmak için endişelenmeyin. Gelecekte daha fazla alana ihtiyacınız olursa, basitçe ekleyebilirsiniz. Mantıksal birimlerinizi oluşturmak için, şu komutu kullanın:

$ sudo lvcreate -L 5G -n 5gig my_volume_group

Logical volume "5gig" created

Ardından, arka tarafta ne olup bittiğini görmek için, şu komutu çalıştırın:

$ sudo lvdisplay

--- Logical volume ---
LV Path /dev/my_volume_group/5gig
LV Name 5gig
VG Name my_volume_group
LV UUID 3MxOB0-ce5o-yvBD-YORT-52qV-j8HJ-oDru2G
LV Write Access read/write
LV Status available
# open 0
LV Size 5.0 GiB
Current LE 5753
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0

LVM ile cihazları adlandırmanın ne kadar güzel ve temiz bir şekilde yapıldığına dikkat edin. İşaretlediğiniz cihazın adını bildiğinizden emin olmak açısından lvdisplay komutunu çalıştırmak önemli. Birçok sistem, cihazların sanal konumlarının kolayca bulunması için sembolik linkler kullanır, fakat bence bu durum, gerçekte neler olup bittiğini anlamaya çalışan bizim gibiler için karışıklığı artırıcı bir katman daha ortaya çıkmasına sebep olur.

Bak, Yeni Bir (Sanal) Disk Sürücüsü!

Mantıksal birimlerinizi (logical volume) başarıyla oluşturduktan sonra, geriye sadece onları blok cihazlar (block device) olarak kuallanmak kalıyor. Eğer /home dizininiz olarak bağlamanız gereken bir dosya sistemine ihtiyaç duyarsanız, sadece şunları yapın:

$ sudo mkfs.ext3 /dev/my_volume_group/5gig
$ sudo mount -t ext3 /dev/my_volume_group/5gig /home

Ve, 5GB boyuta sahip nurtopu gibi bir /home dizini kullanıma hazır, üstelik, LVM sağolsun, tamamen genişletilebilir! (Elbette, bu mantıksal biriminizi sisteminizin ev (home) dizini olarak bağlamak istiyorsanız, açılışta otomatik olarak bağlanması için /etc/fstab dosyasına bununla ilgili bir satır eklemeniz gerekir.) Linux sisteminizin gözünden bakacak olursak, /dev/my_volume/5gig aynı sisteminize takacağınız bir disk sürücü gibi, bir blok cihaz olarak algılanır. Yukarıda yaptığınız gibi formatlayıp swap alanı olarak kullanabileceğiniz gibi, şifreleyip başka bir yere şifrelenmiş bölüm olarak da bağlayabilirsiniz.

Epeyce Şey Yaptık, Neden Tekrarlayalım?
Biliyorum, bu küçük örnekte sadece disklerden oluşan bir yığın (JBOD - Just a Bunch Of Disks) tipinde bir sistem oluşturmaktan öte pek bir şey yapmadınız, böylesi bir sistem disklerden birisini kaybetseniz bile tamamen çökecek ve veri kaybetmenize yol açacaktır. Herhangi bir veri taşıma işlemine gerek kalmadan mantıksal birimlerinizi genişletmek istemediğiniz sürece LVM'nin gücü tam olarak anlaşılamaz. Ya da, bir güncellemenin sebep olacağı bir çöküş sonrası geri yükleyebilmek üzere sisteminizin belirli bir andaki LVM kopyasını almak istediğinizde anlayabilirsiniz. Ya da, küçük bir diski hızlı bir RAID dizisiyle değiştirmek ve verilerinizi yeni fiziksel biriminize usulca taşımak istediğinizde görebilirsiniz bu gücü.

Logical Volume Manager(LVM), depolama aygıtlarını soyutlayan bir sistemdir. Sisteminizi bir katman daha karmaşıklaştırır, bu konuda yalan söylemeyeceğim; ama kazanımlarınız mükemmeldir. Belki sisteminizi bir miktar daha karmaşıklaştıracak ama ileride depolama sorunlarıyla boğuşmanız gerektiğinde işinizi çok kolaylaştıracak.

Gelecek Hakkında Konuşup Duruyoruz Da...

Umarım, bu aşamada LVM'nin tamamen bir zaman kaybı olmadığını anlayacaksınız. Zamanı geldiğinde, LVM size ne tür avantajlar sağlar? Listenin ilk anda aklıma gelen elemanlarını görmek isterseniz, şöyle sıralayabilirim:

  • Eski, yavaş bir fiziksel birimden yeni ve hızlı olanına mantıksal birimlerinizi sistemi çalışır tutarak taşıyabilirsiniz.
  • Mantıksal birimlerinizi, birim grubunuzda daha fazla yer kaplayacak şekilde genişletebilirsiniz.
  • Daha iyi performans için, bir birim grubunun içindeki fiziksel birimlerde yer alan verileri şerit haline getirebilirsiniz[stripe].
  • Birim gruplarını yeni fiziksel birimler ekleyerek ya da içindeki fiziksel grupları çıkararak yeniden boyutlandırabilirsiniz.
  • Herhangi bir mantıksal birimin belirli bir andaki kopyasını [snapshot] alarak daha sonra tekrar yüklenip kullanılabilir halde saklayabilirsiniz.

Benim çalışan sistemlerimdeki favori LVM işlemlerimden biri, sonuncu madde; bir sistemde güncelleme yapmadan önce sistemin belirli bir andaki LVM kopyasını almak. Eğer güncelleme sırasında bir şeyler yanlış giderse aldığım kopyayı geri yükleyerek çalışmakta olan sistemime dönebilirim. LVM'nin sunduğu seçenekler hakkında düşündükçe, LVM kullanmak için neden bu kadar beklediğinize şaşıracaksınız!

:
31 Mayıs 2014 06:00:41

Peki iki fiziksel diskin hızlı veya yavaş olması okuma/yazma hızını etkiler mi?

ozhankaraman: Özhan KARAMAN
22 Ocak 2014 09:57:47

LVM günümüzde Linux''un olmazsa olmazı :)

hakan: Hakan Kalyoncu
18 Ocak 2014 12:46:03

güzel içerik


Yorum Ekle (giriş yapın)