LVM (Logical Volume Manager)
LVM (Logical Volume Manager), Linux sistemlerde disk yönetimini esnek ve dinamik bir şekilde yapmaya olanak tanıyan bir mantıksal hacim yöneticisidir. LVM, fiziksel diskleri birleştirerek mantıksal birimler (logical volumes) oluşturmanıza ve disk alanını ihtiyaç duyulduğunda kolayca yeniden düzenlemenize olanak tanır. Bu, klasik sabit disk bölümleme işlemlerinden daha fazla esneklik sağlar ve disk yönetimini kolaylaştırır.
LVM’in Temel Bileşenleri
LVM yapısında üç ana bileşen bulunur:
Physical Volumes (PV): Fiziksel diskler veya bölümler (örneğin, /dev/sda1) PV olarak tanımlanır. PV’ler, LVM’in temel yapı taşlarıdır.
Volume Groups (VG): PV’lerin birleştirilerek oluşturduğu mantıksal depolama havuzlarıdır. VG, birden fazla fiziksel diski tek bir mantıksal havuz gibi görmenizi sağlar. Bu sayede disk alanını yönetmek daha esnek hale gelir.
Logical Volumes (LV): VG içindeki disk alanının ihtiyaç doğrultusunda oluşturulan birimleridir. LV’ler, normal disk bölümleri gibi kullanılabilir ve dosya sistemleri buraya kurulabilir. İhtiyaç durumunda LV’lerin boyutları kolayca değiştirilebilir.
Bir önceki blogumda partitionları anlattığımda kullandığım cfdisk aracı ise Disk bölümlerini sabit bir şekilde ayarlar. Bir bölüm oluşturduktan sonra bölümü yeniden boyutlandırmak veya başka disklere yaymak mümkün değildir. Bölümleri yönetmek için daha statik bir yapı sunar.
LVM’in ne kadar avantajlı olduğunu anlamamız için, yaygın olan bir problemi anlatarak başlayacağım.
Diskimizde 3 tane partition’ımız var ve bunlar birbirinden bağımsız iki adet oluşturulmuş ve aynı zamanda partitition yapılmayan boş bir alan var ( free space).
Diyelim ki 2.(middle)partition’u resize ederek büyütmek istedik ve evet bunu yapabiliriz. Free space’i kullanarak büyütebiliriz. Peki 1.partitionu’da(beginning) büyütmek istediğimizde ise sağında ve solunda boş alan olmadığından bunu yapamıyoruz. Çok ısrar edersek mecburen 2.partitionu tekrar küçültmemiz gerekiyor.
LVM üzerine alınan bir disk ise, beginning partition büyütülmek istendiğinde , boş alanın yarısını belirleyip , beginning partition’a ek depolama alanı bağlıyor. Birden fazla diski tek bir mantıksal birimde birleştirip, tek bir diskmiş gibi yönetebiliyoruz. Bu esneklik, disk alanı yönetiminde LVM’yi oldukça avantajlı hale getiriyor.
Örneğin makinemize 3 adet her biri 5GB’lık sanal disk bağlayacağız.
Makinemizde 3 adet her biri 5GB’lık sanal disk bağlanmis oldugunu hatirlatarak:
Ilk once lvm yardimci aracimizi yukleyelim
sudo apt install lvm2
Sonra komutumuzla sistemde PV(Physical Volumes) ‘leri incelemek icin
sudo lvmdiskscan
/dev/sda2 [ 2.00 GiB]
/dev/sda3 [ <43.00 GiB]LVM physical volume
/dev/sdb1 [ 4.00 GiB]
/dev/sdb2 [ 4.00 GiB]
/dev/sdb3 [ <2.00 GiB]
/dev/sdc [ 5.00 GiB] >> yeni
/dev/sdd [ 5.00 GiB] >> yeni
/dev/sde [ 5.00 GiB] >> yeni
3 disks 4 partitions
1 LVM physical volume whole disk
/dev/sda3 lvm tarafindan otomatik olusturuldu.
Simdi, 2 yeni diskimizi , pyhsical volume olarak LVM’ye ekleyeylim. Asagidaki komutlari kullanalim
sudo pvcreate /dev/sdc /dev/sdd
Komutu girdikten sonra, saglamasini yapmak icin hangi fiziksel volume’lerin bagli oldugunu gormek icin asagidaki komut ile kontrol edelim.
sudo pvs
PV VG Fmt. Attr PSize PFree
/dev/sda3 ubuntu-vg lvm2 a-- <43.00g. 21.50g
/dev/sdc lvm2 --- 5.00g 5.00g
/dev/sdd lvm2 --- 5.00g 5.00g
Goruldugu uzere Psize degerleri 5GB ve bos alan olarak 5 GB’lik sdc ve sdd fiziksel volumlerimiz olusturuldu.
Simdi bu disklerin hangi amacla kapasitesini kullanmasini belirtmemiz icin VG(Volume Group) ‘lara ekleyecegiz. Ben burada my_volume ismini verdim ancak siz backup veya kendi isminizi verebilirsiniz.
VG(Volume group) ile aslinda iki adet 5gb’lik PV’leri tek bir 10GB’lik birim gibi davranmasini saglayacagiz. Yani sistem bunlari o sekilde degerlendirecek. Neden bu sekilde yapiyoruz? Cunku genisletme istedigimiz zaman bu ‘my_volume’ volume grubuna birden fazla pv ekleyerek genisletecegiz, vg extend komutu ile volume grubumuza daha fazla pv ekleyerek yapacagiz. Aslinda geleneksel disk genisletmeden daha avantajli olmasi bu yuzdendir.
sudo vgcreate my_volume /dev/sdc /dev/sdd
Volume group “my_volume” successfully created
Simdi ise bosta olan /dev/sde pvmizide olusturdugumuz ‘my_volume” grubuna ekleyerek ‘my_volume” birimimizi genisletelim.
sudo pvcreate /dev/sde
sudo vgextend my_volume /dev/sde
Volume Group “my_volume” successfully extended
Artik my_volume VG’mizin 15GB diske sahip olmasi gerekir. Yani tek bir 15GB’lik fiziksel diskmis gibi olmasini saglamis olmamiz lazim.Bunun saglamasini yapmamiz icin asagidaki komutla kontrol edelim. Bu komutun ciktisi bize PV sayisini Vsize degerini vererek bilgilendirecek ve listeleyecek ve goruldugu uzere volume grubumuz 15GB degere sahip.
sudo vgs
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 5 0 wz--n- <43.00g 21.50g
my_volume 3 0 0 wz--n- 14.99g 14.99g
14.99 Gib kapasitenin hepsi Free olarak gorunuyor. Yani aslinda su an hic kullanilmiyor cunku uzerinde hicbir logical volume yoktur.
Simdi PV ve VG ‘lerin nasil olusuturuldu ve ne ise yaradigini ogrendigimize gore, son adim olarak bunlari gercekten kullanabilmemiz icin LV(Logical volume) olusturacagiz ve LV’yi , volume grup icinde partition gibi dusunebilirsiniz.
Ayrica Volume grubumuzda, Fiziksel volumeleri(PV) cikarmak icinse reduce komutunu kullanabiliriz.
sudo vgreduce my_volume /dev/sde
LVM uzerindede PV’leri ayni sekilde cikarmak icin:
sudo pvremove /dev/sde
Daha once tek bir 15GB’lik fiziksel diskmis gibi olmasini saglamak icin VG(volume group) olusturdugumuzu soyledim. Simdi VG bir diskse ve LVM icerisinde sanal olarak duruyorsa bu diski yani VG’yi partitionlayip kullanabilmemiz anlamina geliyor. Yani LV(Logical Volume) eklememiz gerekiyor. Kafalari cok karistirmadan devam edelim 🙂
‘partition1’ isminde bir LV olusturup bunu, ‘my_volume’ grubumuzun ustunde olusturuyoruz.
sudo lvcreate —-size 2G —-name partition1 my_volume
Logical volume “partition1” created.
Asagidaki komut ile “”LV”” sutununda logical volume’un eklendigini ve ‘my_volume” grubunun ustunde oldugunu teyit edelim.
sudo vgs
VG #PV #LV #SN. Attr VSize VFree
ubuntu-vg 2 1 0 wz--n- <43.00g 21.50g
my_volume 2 1 0 wz--n- 9.99g 7.99g
Simdi bir tane daha partition2 isminde bir LV olusturup bunu, my_volume grubumuzun ustunde olusturuyoruz. Size’ini 6 GB olarak belirliyoruz.
sudo lvcreate —-size 6G —-name partition2 my_volume
sudo vgs
VG #PV #LV #SN. Attr VSize VFree
ubuntu-vg 2 1 0 wz--n- <43.00g 21.50g
my_volume 2 2 0 wz--n- 9.99g 1.99g
sudo lvs
LV VG Attr LVM2_VERSION LVM2_FEATURES Size Pool Origin Data
partition1 my_volume -wi-ao---- 2 metadata,thinpool 2.00g
partition2 my_volume -wi-ao---- 2 metadata,thinpool 6.00g
ubuntu-lv ubuntu_vg -wi-ao---- 2 metadata,thinpool <21.50g
Bu durumda ozetlersek, partition1 ve partition2 kisimlarinda toplam 8GB’lik birimler olusturduk.
1.99GB kapasitesi olan ‘my_volume’ isimli volume grubumuza bagli bu iki partition toplamda 8GB kapasiteyle oluşturduğumuz için hala 1.99GB’lık boş ve atanabılır boş kapasitemiz var.
Kalan 1.99GB boş alanı şimdi partition1 isimli LV(logical volume)’mize eklemek istersek aşağıdaki komutla genişletmek işlemini yapabiliriz. —extents opsiyonunu kullaniyoruz.
sudo lvresize —-extents 100%VG my_volume/partition1
reducing 100%VG to remaining free space 3.99 GiB in VG.
Size of logical volume my_volume/partition1 changed from 2.00 Gib to 3.99 Gib
Logical volume my_volume/partition1 successfully resized.
Sağlamasını yapmamız için logical volume listeleyerek partiton1 kapasitesinin istenilen şekilde yükseldiğini teyit edersek görüldüğü üzere 2GB olan partition1 3.99Gib olarak güncellenmiş.
sudo lvs
LV VG Attr LVM2_VERSION LVM2_FEATURES Size Pool Origin Data Segments
partition1 my_volume -wi-ao---- 2 metadata,thinpool 3.99g
partition2 my_volume -wi-ao---- 2 metadata,thinpool 6.00g
ubuntu-lv ubuntu_vg -wi-ao---- 2 metadata,thinpool <21.50g
Yapılan değişikliği geri almak ve tekrar eski haline çevirmek için yine –size kullanabiliriz. Ancak bir hatirlatma olarak kuculteceginiz lv’lerinizde eger onemli bir bilginiz varsa yedek alinmasi gerekir. —size opsiyonunu kullanalim.
sudo lvresize —-size 2GB my_volume/partition1
WARNING: Reducing active logical volume to 2.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce my_volume/partition1? [y/n]: y Size of logical volume my_volume/partition1 changed from 3.99 GiB (1022 extents) to 2.00 GiB (512 extents). Logical volume my_volume/partition1 successfully resized.
Oluşturduğumuz LV’leri (yani senaryomuzda partition1 ve partition2) aktif kullanabilmek için onlara sistemimizde bir filesystem oluşturmamız gerekir. Orn /dev/sda1 gibi bir dizine atayabiliriz.
dev/name-of-volume-group/name-of-logical-volume şeklinde syntaxımızı düşünebiliriz.
sudo mkfs.ext4 /dev/my_volume/partition1
mke2fs 1.45.5 (03-Oct-2024) Creating filesystem with 524288 4k blocks and 131072 inodes Filesystem UUID: c0f5d6e9-09b6-4a2f-9b57-e7d536e1f7e2 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done
Önemli bir nokta, şimdi partition1 bir ext4 filesystemine dosya ile sisteme bağlı olduğu için resize etmek istersek —size opsiyonu ile beraber bir de —resizefs opsiyonu kullanmamız gerekecek ve hem yeniden boyutlandırır hem de dosya sistemini 3GB’a göre otomatik olarak ayarlar. Aşağıdaki komutu kullanabiliriz. Daha fazlasi için man lvm komutu ile dökümantasyonu inceleyebilirsiniz..
sudo lvresize —resizefs —size 3G my_volume/partition1
Logical volume daha sonra silinmesi gerekiyorsa asagidaki komutu kullanarak silebilirsiniz.
sudo lvremove my_volume/partition1
Özetle LVM Nedir ve Avantajları Nelerdir?
LVM, Linux sistemlerde disk yönetimini daha esnek hale getiren bir mantıksal hacim yöneticisidir. Geleneksel disk bölümlendirme işlemlerinin aksine, LVM sayesinde fiziksel diskleri birleştirerek tek bir mantıksal birim olarak yönetebilir ve gerektiğinde bu birimlerin boyutlarını kolayca değiştirebilirsiniz. Bu yapı üç ana bileşenden oluşur: Fiziksel Birimler (PV), Volume Grupları (VG) ve Mantıksal Birimler (LV). PV’ler fiziksel disklerdir, VG’ler bu diskleri tek bir mantıksal havuz olarak toplar ve LV’ler ise bu havuzdan ayrılmış esnek birimlerdir.
Örneğin, bir VG’yi tek bir disk gibi düşünebilir ve ihtiyacınıza göre birden fazla LV oluşturabilirsiniz. Disk alanınızı dinamik olarak yönetebilmek ve birden fazla diski kolayca birleştirebilmek, LVM’nin sağladığı en büyük avantajlardan biridir. Özellikle disk kapasitesini artırma veya küçültme gibi işlemler, LVM’nin sunduğu esneklik sayesinde daha kolay hale gelir.