Üçüncü bölümde Striped, Mirrored ve Snaphot Volume oluşturmak hakkında çalışmalar yapacağız. LVM aslında geniş bir konu olmakla birlikte bu yazı serisinde bir çok konuya değindiğimizi düşünüyorum. LVM ile ilgili genel bilgiyi Bölüm 1’den , Volume Group (VG) ve Logical Volume (LV) üzerindeki işlemleri Bölüm 2’den takip edebilirsiniz.
Striped Volume Oluşturmak
Striped Volume’in, veriyi tek bir diske yazmak yerine belirlenen stripe size (block size diye de adlandırılır.) boyutuna göre birden fazla diske sırayla yazabilen Volume’ler olduğundan ilk makalemizde bahsetmiştik.
vgs ve pvs komutlarıyla LVM yapımıza göz atalım. sdb1, sdc1 ve sdd1 partitionlarıyla Physical Volume’leri (PV) oluşturduk. Ardından bu PV’leri lvmgrups isimli bir Volume Group’a (VG) ekledik. Mevcut durumda elimizde 9 GB boyutunda 3 PV’den oluşan bir VG var.
lvcreate komutuyla Striped Volume oluşturacağız. Komuttaki, i3, 3 adet diskimizi ifade ediyor. 3GB’lık alanı 3’e bölerek disklere 1GB olarak yazacak. I128 ise stripe size’ı ifade eder. Bir dosya kaydedilirken bölüneceği parçanın boyutudur. Bizim örneğimizde 128 KB’tır. Şöyleki 10KB’lık bir dosya kaydettiniz ancak stripe size 128KB olduğu için diskte 128KB yer kaplar. Bu değerin boyutu çalıştığınız veriyle ilgilidir. Çok küçük değerler girerseniz bu sefer disk çok daha küçük parçalara veri yazmaya ve okumaya çalışır. Bu da diskin okuma yazmasını olumsuz etkiler. Disk ve disk controller özelliklerine göre bu değer girilmelidir.
volstrip, Volume ismimiz ve lvmgrups ise Striped Volume’un oluşturulacağı VG’nin ismidir.
Eğer önceden disk içerisinde bir biçimlendirme varsa silinmesi için izin istenir.
lvcreate -L 3G -i3 -I128 -n volstriped lvmgrups
mkfs.ext4 /dev/mapper/lvmgrups-volstriped komutuyla diski formatlıyoruz.
Dosya sistemimizde striped isimli bir dizin oluşturup Striped Volume’u mount ediyoruz.
mount /dev/mapper/lvmgrups-volstriped /striped/
Görüleceği üzere 3 PV’de mount olmuş durumdadır. Bu alana yazmaya başladığınızda 128KB ilk diske, 2nci 128KB diğer diske, 3ncü 128KB 3’ncü diske ve sonra başa dönerek 1’nci diske yazılmaya devam edilecek. Bu şekilde 3 diske birden yazarak disklere yazma performansında artış sağlayabilirsiniz.
Mirrored Volume Oluşturmak
Verilerinizi birden fazla PV üzerinde tutarak yedeklilik sağlar. Bu çalışmamızda önceden oluşturduğumuz lvmgrups LVM grubunu kullanacağız. pvs komutuyla PV’ler üzerinde kalan alanımızı kontrol ediyoruz. Bir önceki bölümde 1GB’lık alanları Striped Volume için kullanmıştık.
lvcreate komutunda -m1 argümanı ile Mirrored Volume oluşturuyoruz. m1 ile 1 tane kopya oluşturulur. 500 Mb’lık ve 1 tane kopyası olacak şekilde bir Volume oluşturduk.
lvcreate -L 500M -m1 -n volmirrored lvmgrups
pvs komut çıktısına baktığımızdaa sdb1 ve sdc1 ‘den 500M’lık alanın azaldığını görüyoruz
mkfs komutuyla Volume’u formatlayıp dosya sisteminde bir alana mount ediyoruz. lsblk çıktısı ile disk alanlarımızı kontrol edelim. Çıktıda da görüleceği üzere her iki disk alanı üzerinde de Mirrored Volume için alan oluşturulmuş.
Snapshot Volume Oluşturmak
Snapshot (anlık görüntü) Volume, Logical Volume’lerin anlık alınan kopyalarıdır. Bu şekilde snapshot’ı alınan Volume’ın bir kopyası tutulmuş olur. Volume içerisindeki verilerde bir problem olması durumundan snapshotdan geriye dönülebilir. lvs komut çıktımızda lvmgrups isimli LVM grubumuz var. Bu gruba ait üç adet Logical Volume (LV) bulunmaktadır. Striped ve Mirrored Volume’leri önceki bölümlerde oluşturmuştuk. lvcreate komutuyla veriler isimli LV’yi oluşturdum. veriler isimli LV’nin snapshot’ını alacağız.
lvcreate komutuna -s argümanı ekleyerek snapshot’ını alacağımız LV’nin konumunu yazıyoruz.
lvcreate -L 100M -s -n veriler_snap /dev/mapper/lvmgrups-veriler
Snapshot oluştuktan sonra tekrar lvs komutuyla LV’lere bakalım. veriler_snap’ın Attr sütununa bakarsanız ilk harfinin s olduğu görülür. s harfi LV’nin snapshot olduğunu gösterir. Aynı satırın devamındaki Origin sütununda veriler ibaresi var. Bu da snapshot’ı alınan LV’yi gösterir. Data% sütunu ise snapshot alındıktan sonra orjinal veriden olan değişimin snapshot alanına oranını gösterir. Karışık oldu açıklayalım 🙂
lvextend komutuyla snapshot alanına 200MB daha ekleyerek genişletelim.
lvextend -L +200M /dev/mapper/lvmgrups-veriler_snap
Ardından orjinal dosyanın bulunduğu dizine bir dosya ekleyelim. seq komutuyla 1 den başlayıp 10 milyona kadar sayı dizini data.txt içine yazdırırak bir dosya oluşturdum.
seq 10000000 > /veriler/data.txt
Tekrar lvs komut çıktısına bakalım. Data% alanı 25.21 gösteriyor. Bizim snapshot alanımız 300 MB’dı. Yüzde 25.21 yaklaşık 76 MB yapıyor. Yani orjinal LV 76 MB büyümüş. ls komutuyla kontrol edelim bakalım gerçekten 76 MB mı artmış. Evet 76 MB artmış görünüyor. Bu değere bakarak snapshot almadan önce snapshot oluşturacağınız alan için boyut belirleyebilirsiniz veya snapshot alanını genişletebilirsiniz.
Snapshot Restore İşlemi
Snapshot’ı, direk oluşturduğunuz bir dizine mount edip içindekileri görebilirsiniz. Ancak mount ettiğiniz alan snapshot olarak kalacaktır.
mount /dev/mapper/lvmgrups-veriler_snap /snapshot/
Eğer orijinal alanınızı tamamen kaybettiyseniz snapshot’ı convert ederek birleştirmelisiniz. lvconvert komutu ile –mergesnapshot argümanını kullanıp lvmgrups VG’sindeki, veriler_snap LV’sini orjinali ile birleştiriyoruz. İlk önce orjinal LV’yi umount etmemiz gerekiyor. Ardınan merge işlemini gerçekleştirip oluşan LV’yi mount ediyoruz.
lvconvert --mergesnapshot lvmgrups/veriler_snap
Aşağıdaki görselde Snapshot Volume Oluşturmak ve Restore işleminin özeti bulunmaktadır.
1. İlk olarak ll (ls -lah komutunun kısaltılmış hali) komutuyla veriler dizininde data1.txt isimli bir dosya var.
2. Veriler dizininin bulunduğu LV’nin snapshot’ını alıyoruz.
3. Veriler dizinine bir dosya ekliyoruz ve ls komutuyla data2.txt isimli bir dosya oluştuğunu görüyoruz.
4. Snapshot’a dönmek için veriler dizinini umount ediyoruz.
5. lvconvert komutuyla lvmgrups içinde bulunan veriler_snap isimli LV’yi orjinal ile merge ediyoruz.
6. Orjinal LV’yi veriler dizinine mount ediyoruz.
7. ls komutuyla tekrar kontrol ettiğimizde data2.txt isimli dosya yok. Çünkü snapshot’a geri döndük. Snapshot aldığımızda data2.txt yoktu. Sonradan oluşturmuştuk.
8. lvs komutuyla baktığımızda snapshot olan LV’nin kaldırıldığını ve orjinal LV’nin durduğunu görüyoruz.
Bu makale ile LVM konusundaki temel konuları tamamlıyoruz.
Faydalı olması dileğiyle,