21 Nisan 2014 Pazartesi

LVM kullanımı

Bir makinede diskin tamamen dolması ya da bölümlendirme yaparken bir bölüme yetersiz alan verdiğimiz durumlar ile genellikle karşılaşırız. LVM (Logical Volume Management / Mantıksal Disk Yönetimi) özellikle sıfırdan bir sistem kurarken son derece işimize yarayan bir yapı olarak karşımıza çıkıyor. LVM sayesinde çalışma zamanında sistemimize yeni bir disk ekleyip, kapasitesi dolmak üzere olan ve bir dizine bağlanmış (mount) alanımızı rahatlıkla genişletebiliriz. LVM ile yapılandırılmış bir sistem temelde Fiziksel Hacimler (Volume) ve bu fiziksel hacimlerin bir araya getirdiği hacim grubundan oluşmaktadır. Bu hacim grubunda mantıksal bölümler oluşturarak bölümlendirmeler yapabiliriz. Aşağıdaki resmi Wikipedia'daki LVM konusundan aldım. Tüm LVM sistemini özetliyor. Sistemi daha iyi anlatabilmek için herkesin hali hazırdaki bir linux sisteminde ek bir disk satın almadan ya da varolan sistemini bozmadan deneyebileceği bir örnek ile olayı izah etmeye çalıştım.



LVM ile basit birkaç işlem yapalım. Örneğin 3 adet 100 GB'lık diskimiz bulunuyor. Normalde RAID kullanmadan bu sistemde 100 GB'dan büyük bir bölümü bilinen NTFS, FAT, Ext3, Ext4 gibi dosya sistemleri ile oluşturmam pek olası değil. Fakat LVM ile bu mümkün. Örneklerimizi GB değil de MB'da çevirerek linux komutları ile test ortamı oluşturalım.

4 adet içerisi hex 0 dolu 100MB boyutunda sanal disk dosyaları oluşturuyoruz.
dd if=/dev/zero of=disk1.img bs=1024 count=102400
dd if=/dev/zero of=disk2.img bs=1024 count=102400
dd if=/dev/zero of=disk3.img bs=1024 count=102400
dd if=/dev/zero of=disk4.img bs=1024 count=102400
Daha sonra bu disklerin içerisine LVM tipinde bölümler oluşturuyoruz. Her bir disk dosyası için aşağıdakileri uygulayabiliriz.
fdisk disk1.img
n,p,enter,enter,enter,t,8e,w
Yani kısaca yeni bir bölüm oluşturuyoruz ve bu bölümün tipini Linux LVM yapıyoruz. Daha sonra değişiklikleri kaydedilerek fdisk uygulamasından çıkıyoruz. Akabinde oluşturulan diskleri bir loop blok aygıt dosyasına bağlayabiliriz. Bu bize sabit disk blok dosyaları (/dev/hda, /dev/sda ...) gibi disk dosyalarına erişim yapmamızı sağlayacak. Tüm disk operasyonlarını yapmakla kalmayıp aynı zamanda mount etmemize de olanak sağlayacaktır.
losetup /dev/loop1 disk1.img
losetup /dev/loop2 disk2.img
losetup /dev/loop3 disk3.img
losetup /dev/loop4 disk4.img
Oluşturduğumuz disk bölümlerinin de birer blok aygıta bağlanması gerekir. Bunun için kpartx uygulamasını kullanıyoruz.
kpartx -a /dev/loop1
kpartx -a /dev/loop2
kpartx -a /dev/loop3
kpartx -a /dev/loop4
Yukarıdaki işlemlerden sonra bölümlere özel blok aygıtlarımız olur. Örneğin /dev/mapper/loop1p1 blok aygıt dosyası doğrudan disk1.img dosyası içinde oluşturduğumuz bölüme bağlanmıştır. Artık LVM'i test edebiliriz. Öncelikle fiziksel hacimlerimizi (disklerimizi) tanımlayalım. LVM terimi olarak Physical Volume şeklinde adlandırılıyor.
pvcreate /dev/mapper/loop1p1
pvcreate /dev/mapper/loop2p1
pvcreate /dev/mapper/loop3p1
pvcreate /dev/mapper/loop4p1
Oluşturduğumuz LVM fiziksel hacimlerine pvdisplay komutu ile bakabiliriz. Bu disklerden 3 tanesini bir hacim grubu (volume group) ile gruplayalım.
vgcreate vg_test /dev/mapper/loop1p1 /dev/mapper/loop2p1 /dev/mapper/loop3p1
Değişiklikleri pvdisplay ve vgdisplay ile izleyebiliriz. vgdisplay çıktısındaki PE ifadesi resimdeki minik fiziksel bölütlerin boyutunu göstermektedir. Şimdi istediğimiz miktarda mantıksal bölüm oluşturabiliriz.
lvcreate -L 180M -n lv_test1 vg_test
Yukarıdaki komut ile 180 MB boyutunda bir mantıksal alan oluşturduk. Geri kalan tüm alan içinde mantıksal bir bölüm oluşturabiliriz.
lvcreate -l 100%FREE -n lv_test2 vg_test
Sonucu görüntülemek için lvdisplay komutu kullanılabilir. Şimdi 180 ve yaklaşık 120 MB boyutlarında iki disk bölümümüz oldu. Hiç kullanmadığımız 4. diskimizi de oyuna katıp mevcutta oluşturduğumuz bölümleri silmeden boyutlarını değiştirelim. Öncelikle fiziksel hacim tanıtılarak hacim grubuna (volume group) ekleniyor.
vgextend vg_test /dev/mapper/loop4p1
Varolan mantıksal bölümlerden ikincisini yeni eklediğimiz fiziksel hacim sayesinde 50 MB kadar genişletelim.
lvextend -L 50M /dev/vg_test/lv_test2 /dev/mapper/loop4p1
İkinci diski doğrudan silmeden genişlettik. Birinci disk için daha çok karşılaştığımız diğer bir durumu deneyelim. Format atılmış ve üzerinde veriler olan bir bölüm senaryosunu test edelim. Bunun için birinci bölümü ext4 dosya sistemi şeklinde biçimlendirelim.
mkfs.ext4 /dev/vg_test/lv_test1
Şimdi ext4 dosya sistemine sahip bölümü büyütelim.
lvextend /dev/vg_test/lv_test1 /dev/mapper/loop4p1
Formatlı bir bölümü büyüttüğümüzden dolayı üzerindeki dosya sistemini de aynı ölçüde boyutlandırmak gerekir.
resize2fs /dev/vg_test/lv_test1
kabaca LVM kullanımı bu şekilde. Yukarıda yaptıklarımız haricinde mantıksal bölümü küçültme ve anlık görüntüsünü alma (snapshot) gibi LVM yetenekleri ile disk yönetimi oldukça kolay bir hale gelmiş oluyor. Kişisel tavsiyem kurulan yeni sistemlerin hatta sanal makinelerin hepsinde LVM kullanmalıyız. Zaten yeni birçok dağıtımda LVM ayarı varsayılan olarak seçili geliyor. Btrfs dosya sistemine geçmeden önce kullanmamız gereken yegane araç gibi görünüyor.