LVM ile çalışma
LVM (Logical Volume Manager), fiziksel depolama üzerinde bir soyutlama katmanı sağlayan bir disk yönetim sistemidir. Disk alanının esnek şekilde tahsis edilmesine, sistem çalışırken boyutlandırma yapılmasına ve snapshot tabanlı yedeklemeler oluşturulmasına olanak tanır. Sanallaştırma için depolama katmanı olarak yaygın şekilde kullanılır. Şifreli sistemlerde LVM genellikle LUKS ile şifrelenmiş bir cihazın üzerine yerleştirilir; böylece tek bir kilit açma işlemi tüm volume group'un erişilebilir olmasını sağlar.
Bu makalede Linux üzerinde LVM kurulumu, physical volume, volume group ve logical volume oluşturma, bunların boyutlarını değiştirme, snapshot'larla çalışma ve thin provisioning kullanımı ele alınmaktadır.
LVM kurulumu
LVM çoğu Linux dağıtımında varsayılan olarak bulunur. Yüklü değilse sistemin paket yöneticisini kullanarak lvm2 paketini yükleyin.
Debian ve Ubuntu üzerinde:
sudo apt-get install lvm2
RHEL, CentOS Stream, AlmaLinux ve Rocky Linux üzerinde:
sudo dnf install lvm2
Physical Volume oluşturma
Physical Volume (PV), LVM'nin en alt seviyedeki temel bileşenidir. Tam bir disk (örneğin /dev/sdb) veya tek bir bölüm (örneğin /dev/sdb1) olabilir.
Tam bir diski PV olarak kullanmak, daha sonra yapılacak boyutlandırma işlemlerini kolaylaştırır; çünkü önce altta bulunan bölümün büyütülmesi gerekmez. Diskin LVM dışı verileri de barındırması gerekiyorsa veya sistemdeki diğer araçlar bir bölüm tablosu bekliyorsa bölüm kullanılması tercih edilir.
pvcreate ile bir Physical Volume oluşturun:
sudo pvcreate /dev/sdb
/dev/sdb yerine blok aygıtınızın yolunu yazın.
Sonucu pvdisplay ile kontrol edin:
sudo pvdisplay
Çıktı, LVM'nin şu anda yönettiği Physical Volume'leri, her birinin boyutu ve Volume Group bilgileriyle birlikte listeler.
Volume Group oluşturma
Bir Volume Group (VG), bir veya daha fazla Physical Volume'ü tek bir depolama havuzunda birleştirir. Logical Volume'ler bu havuzdan oluşturulur.
Tek bir Physical Volume'den vg0 adlı bir Volume Group oluşturun:
sudo vgcreate vg0 /dev/sdb
Veya aynı anda birden fazla Physical Volume kullanın:
sudo vgcreate vg0 /dev/sdb /dev/sdc
Sonucu vgdisplay ile kontrol edin:
sudo vgdisplay
Logical Volume oluşturma
Logical Volume (LV), sistem tarafından normal bir blok aygıtı olarak görülür. Üzerinde bir dosya sistemi oluşturabilir ve bağlayabilirsiniz.
vg0 Volume Group'u içinde 10 GB boyutunda lv0 adlı bir Logical Volume oluşturun:
sudo lvcreate -n lv0 -L 10G vg0
-n seçeneği Logical Volume adını, -L ise boyutunu belirler.
Sonucu lvdisplay ile kontrol edin:
sudo lvdisplay
Logical Volume üzerinde bir dosya sistemi oluşturun:
sudo mkfs.ext4 /dev/vg0/lv0
Bir bağlama noktası oluşturun ve dosya sistemini bağlayın:
sudo mkdir -p /mnt/lv0 sudo mount /dev/vg0/lv0 /mnt/lv0
Yeni dosya sistemi artık /mnt/lv0 altında kullanılabilir. Açılışta otomatik olarak bağlamak için /etc/fstab dosyasına uygun bir giriş ekleyin.
LVM her Logical Volume'ü iki eşdeğer yol üzerinden sunar: /dev/<vg>/<lv> ve /dev/mapper/<vg>-<lv>. Yukarıdaki örnekte bunlar /dev/vg0/lv0 ve /dev/mapper/vg0-lv0 yollarıdır. Her iki yol da aynı aygıta işaret eder; araçlar ve yapılandırma dosyaları bunlardan herhangi birini kullanabilir.
Normal blok aygıtlarıyla birlikte PV/VG/LV hiyerarşisinin tamamını görmek için çalıştırın:
lsblk
Birimlerin boyutunu değiştirme
LVM her katmanda çevrimiçi boyutlandırmayı destekler: Physical Volume, Volume Group ve Logical Volume.
pvresize, temel blok aygıtının boyutu değiştirildikten sonra LVM'nin Physical Volume ile ilgili görünümünü günceller (örneğin hipervizörde sanal disk büyütüldükten sonra):
sudo pvresize /dev/sdb
vgextend, mevcut bir Volume Group'a Physical Volume ekler ve böylece Volume Group'u büyütür:
sudo vgextend vg0 /dev/sdc
vgreduce, bir Physical Volume'ü Volume Group'tan kaldırır:
sudo vgreduce vg0 /dev/sdc
lvresize, bir Logical Volume'ün boyutunu değiştirir. Örneğin lv0 üzerine 5 GB eklemek için:
sudo lvresize -L +5G /dev/vg0/lv0
Veya Logical Volume'ü Volume Group'taki tüm boş alanı kullanacak şekilde genişletmek için:
sudo lvresize -l +100%FREE /dev/vg0/lv0
-L (büyük harf) ile -l (küçük harf) arasındaki farka dikkat edin. Büyük harfli sürüm M, G veya T gibi birim son eki içeren bir boyut kabul eder. Küçük harfli sürüm ise extent sayısı veya yüzde kabul eder.
Bir Logical Volume'ün boyutunu değiştirmek, üzerindeki dosya sisteminin boyutunu otomatik olarak değiştirmez. Dosya sistemi için uygun aracı kullanın. ext2, ext3 ve ext4 için:
sudo resize2fs /dev/vg0/lv0
XFS için dosya sisteminin bağlama noktası üzerinde xfs_growfs çalıştırın.
ext4 ve XFS dahil desteklenen dosya sistemlerinde, -r seçeneği ile kullanılan lvextend, Logical Volume'ün ve dosya sisteminin boyutunu tek adımda değiştirir:
sudo lvextend -r -L +5G /dev/vg0/lv0
Bu, çevrimiçi büyütme için en yaygın yöntemdir.
Bir Logical Volume'ü küçültme işlemi ters sırayla yapılır: önce dosya sistemi küçültülmeli, ardından Logical Volume küçültülmelidir. Tersi yapılırsa, dosya sistemi hâlâ eski boyutuna sahip olduğunu düşünürken temel aygıtın boyutu küçültülür ve bu durum veri kaybına yol açar. ext4 için işlem çevrimdışı yapılmalıdır. Dosya sistemini ayırın, sudo e2fsck -f /dev/vg0/lv0 komutunu çalıştırın, dosya sistemini sudo resize2fs /dev/vg0/lv0 <new_size> ile küçültün, Logical Volume'ü aynı boyuta sudo lvresize -L <new_size> /dev/vg0/lv0 ile küçültün ve ardından dosya sistemini yeniden bağlayın. XFS küçültmeyi hiç desteklemez; bir XFS dosya sistemini küçültmenin tek yolu yedek almak, daha küçük bir dosya sistemi oluşturmak ve verileri geri yüklemektir.
Yukarıdaki komutların tamamı seçeneklerin tam listesini görmek için --help parametresini destekler.
LVM snapshot'ları
Bir snapshot, belirli bir anda bir Logical Volume'ün durumunu yakalar. Copy-on-write mekanizmasıyla çalışır: orijinal Logical Volume değiştikçe değiştirilen bloklar snapshot için ayrılmış alana kaydedilir ve böylece snapshot orijinal durumu göstermeye devam eder.
Snapshot'lar çalışan bir dosya sisteminin çökme tutarlı yedeklerini oluşturmak ve silinerek geri alınabilecek değişiklikleri test etmek için kullanışlıdır. Uygulama tutarlı yedeklemeleri, snapshot alınmadan önce dosya sisteminin dondurulması veya uygulamanın geçici olarak duraklatılması gibi ek koordinasyon gerektirir.
Snapshot oluşturma
lvcreate ve -s seçeneği ile bir snapshot oluşturun:
sudo lvcreate -L 1G -s -n myvolume_snap /dev/myvg/myvolume
Bu komut, myvg Volume Group içindeki myvolume Logical Volume'ünün myvolume_snap adlı snapshot'ını oluşturur ve değişiklikler için 1 GB alan ayırır. Ayrılacak alan miktarını snapshot'ın kullanım süresi boyunca değişmesi beklenen veri miktarına göre belirleyin: çoğunlukla kullanılmayan volume'lerin snapshot'ları az miktarda alana ihtiyaç duyarken yoğun şekilde yazılan volume'ler orijinal boyutun önemli bir bölümüne ihtiyaç duyabilir.
Uzun süre kullanılacak snapshot'lar ve çok sayıda snapshot içeren senaryolar için thin pool içindeki thin snapshot'ları değerlendirin. Bunlar sabit bir miktarı önceden ayırmak yerine ortak pool'daki alanı ihtiyaç oldukça kullanır ve genellikle alanı daha verimli kullanır.
Orijinal Logical Volume snapshot'ın kaldırabileceğinden daha fazla değişirse snapshot geçersiz hale gelir ve yakaladığı veriler kaybolur. Snapshot boyutunu kullanım ömrü boyunca beklenen değişiklik miktarını karşılayacak şekilde belirleyin.
Snapshot kullanma
Bir snapshot diğer herhangi bir Logical Volume gibi bağlanabilir. Yedekleme ve inceleme işlemleri için, yazma erişimi gerçekten gerekli olmadığı sürece salt okunur olarak bağlayın:
sudo mkdir -p /mnt/snapshot sudo mount -o ro /dev/myvg/myvolume_snap /mnt/snapshot
Bağlandıktan sonra snapshot, yedekleme veya inceleme amacıyla okunabilir.
Snapshot silme
Snapshot artık gerekli değilse lvremove ile kaldırın:
sudo lvremove /dev/myvg/myvolume_snap
Bir snapshot'ın kaldırılması, ayırdığı alanı serbest bırakır. Snapshot'ın kendisine, yani orijinal volume yerine snapshot'a yazılmış tüm veriler kaybolur.
Orijinal volume'ü snapshot tarafından yakalanan duruma geri döndürmek için lvremove yerine lvconvert --merge kullanın:
sudo lvconvert --merge /dev/myvg/myvolume_snap
Birleştirme işleminden sonra snapshot tüketilir ve otomatik olarak kaldırılır. Orijinal volume şu anda kullanımdaysa birleştirme, volume bir sonraki kez etkinleştirilene kadar ertelenir.
Thin provisioning
Thin pool, depolama alanını ihtiyaç oldukça tahsis eden özel bir Logical Volume türüdür. Bunun içinden oluşturulan Logical Volume'ler (thin volume'ler), pool'daki gerçek boş alanı aşan bir tanımlı boyuta sahip olabilir ve yalnızca yazılan bloklar gerçek depolama alanı tüketir.
Bu teknoloji, birçok sanal diskin tek bir ortak depolama pool'unu paylaştığı ancak nadiren tümünün aynı anda tanımlanan kapasitesine ulaştığı sanallaştırma ortamlarında yaygın olarak kullanılır.
Thin pool oluşturma
myvg Volume Group içinde 50 GB boyutunda mythinpool adlı bir thin pool oluşturun:
sudo lvcreate -L 50G -T -n mythinpool myvg
-L seçeneği pool boyutunu belirler, -T lvcreate'e thin pool oluşturmasını söyler ve -n pool adını belirler. LVM, pool'u Volume Group'un boş alanından oluşturur; pool'un belirli cihazlarda bulunması gerekiyorsa komutun sonunda belirli Physical Volume'ler belirtilebilir.
Thin volume oluşturma
mythinpool içinde 10 GB boyutunda mythinvolume adlı bir thin volume oluşturun:
sudo lvcreate -V 10G -T myvg/mythinpool -n mythinvolume
-V seçeneği thin volume'ün sanal boyutunu belirler, -T thin pool'u belirtir ve -n yeni volume'ün adını belirler.
Thin volume kullanma
Bir thin volume diğer Logical Volume'ler gibi kullanılır. Üzerinde bir dosya sistemi oluşturun:
sudo mkfs.ext4 /dev/myvg/mythinvolume
Ardından thin volume bağlanabilir ve normal bir blok aygıtı olarak kullanılabilir.
Thin pool'lar overcommit edilebildiğinden pool'un gerçek kullanımını izleyin. Hem veri alanı hem de metadata alanı birbirinden bağımsız olarak tükenebilir ve her ikisi de kritiktir: bir thin volume'e yazma işlemi sırasında thin pool'da veri alanı veya metadata alanı tükenirse, bu volume'e yapılan yazma işlemleri başarısız olmaya başlar.
Thin pool'lar dahil tüm Logical Volume'lerin mevcut veri ve metadata kullanımını lvs ile inceleyebilirsiniz:
sudo lvs -o +data_percent,metadata_percent
data_percent veya metadata_percent değerlerinden biri 100'e yaklaştığında, tamamen dolmadan önce thin pool'u lvextend ile genişletin.
Komut referansı
Katmanlara göre gruplandırılmış yaygın LVM komutları.
Physical Volume'ler:
- pvcreate bir blok aygıtını Physical Volume olarak başlatır.
- pvdisplay Physical Volume'ler hakkında ayrıntılı bilgi gösterir.
- pvs Physical Volume'lerin özet tablosunu gösterir.
- pvresize temel aygıtın boyutu değiştirildikten sonra Physical Volume'ü günceller.
Volume Group'lar:
- vgcreate bir veya daha fazla Physical Volume'den bir Volume Group oluşturur.
- vgextend bir Volume Group'a Physical Volume ekler.
- vgreduce bir Physical Volume'ü Volume Group'tan kaldırır.
- vgdisplay Volume Group'lar hakkında ayrıntılı bilgi gösterir.
- vgs Volume Group'ların özet tablosunu gösterir.
Logical Volume'ler:
- lvcreate bir Logical Volume oluşturur.
- lvextend ve lvresize bir Logical Volume'ün boyutunu değiştirir.
- lvremove bir Logical Volume'ü kaldırır.
- lvconvert --merge bir snapshot'ı tekrar kaynak volume ile birleştirir.
- lvdisplay Logical Volume'ler hakkında ayrıntılı bilgi gösterir.
- lvs Logical Volume'lerin özet tablosunu gösterir.
Günlük kullanımda pvs, vgs ve lvs gibi kısa özet komutları, ayrıntılı *display sürümlerine göre genellikle daha kullanışlıdır. Her komut, tüm seçeneklerin listesini görmek için --help parametresini destekler.