Temeller

Linux'ta LVM: fiziksel birimler, gruplar ve mantıksal birimler pratikte

Güncellendi: · Skillaria.Top

LVM (Logical Volume Manager) Linux'ta diskler ile dosya sistemleri arasında bir katmandır: diskler fiziksel birimlere (PV) dönüşür, bir birim grubunda (VG) birleşir ve bu gruptan istenen boyutta mantıksal birimler (LV) kesilir. Temel avantajı, birimin lvextend -r ile anında büyütülebilmesi, gruba hizmet kesintisi olmadan yeni disk eklenebilmesi ve riskli bir işlemden önce anlık görüntü alınabilmesidir.

LVM (Logical Volume Manager), Linux'ta dosya sistemlerini fiziksel disklerden ayıran bir mantıksal birim yöneticisidir. /var dizinini sabit olarak /dev/sdb1 bölümüne bağlamak yerine, diskleri ortak bir havuza koyar ve ondan istediğiniz boyutta birimler kesersiniz. Yer yetmediğinde birim tek komutla büyür; yeniden başlatmaya veya hizmeti durdurmaya gerek kalmaz. Aşağıda Linux'ta LVM'in nasıl çalıştığını, birimleri sıfırdan nasıl oluşturacağınızı, büyütmeyi, anlık görüntü almayı ve tipik hatalardan nasıl kaçınacağınızı anlatıyoruz.

Normal bölümler varken LVM neden gerekli

Sıradan bir bölüm, tek bir diskin kesintisiz bir parçasıdır. Boyutu bölümlendirme sırasında belirlenir ve yalnızca hemen arkasında boş alan varsa büyütülebilir. Disk dolduğunda yeni disk almanız, verileri taşımanız ve /etc/fstab dosyasını yeniden yazmanız gerekir; bu sırada hizmeti de durdurmanız gerekir.

LVM üç sorunu çözer:

  • Esnek boyut. Mantıksal birim istediğiniz zaman büyütülebilir (ext4 için küçültülebilir de).
  • Diskleri birleştirme. Birden fazla fiziksel disk tek bir havuz olur; bir birim aynı anda iki diskte de bulunabilir.
  • Anlık görüntüler. Güncelleme, veritabanı taşıma veya başka bir riskli işlemden önce birimin anlık kopyası.

Bu yüzden Ubuntu Server, RHEL, Rocky ve AlmaLinux kurulum programları varsayılan olarak LVM önerir ve veri sunucularında neredeyse her zaman kullanılır.

LVM'in üç katmanı: PV, VG ve LV

Tüm LVM mantığı üç kavrama sığar. Basit bir benzetme: diskler un çuvalları, grup ortak depo, mantıksal birimler depodan tarttığınız porsiyonlar.

KatmanNeÖrnek adOluşturan komut
PV (Physical Volume)LVM için hazırlanmış disk veya bölüm/dev/sdb, /dev/sdc1pvcreate
VG (Volume Group)bir veya birden fazla PV'yi birleştiren havuzdata_vgvgcreate
LV (Logical Volume)VG'den kesilmiş birim; üzerinde dosya sistemi oluşturulur/dev/data_vg/applvcreate

VG içindeki alan, sabit boyutlu bloklara — PE (physical extents) — bölünür; varsayılan boyut 4 MiB'dir. Mantıksal birim, bu extent'lerin bir kümesinden ibarettir; extent'ler bitişik olmak zorunda değildir ve farklı disklerde bulunabilir. Birimin bu kadar kolay büyütülebilmesinin nedeni budur: LVM ona boş extent'leri her yerden ekleyebilir.

Mantıksal birime iki eşdeğer yoldan erişilebilir: /dev/data_vg/app ve /dev/mapper/data_vg-app. Arka planda bu, çekirdeğin device-mapper aygıtıdır.

Mevcut durumu görme

Önce paketin kurulu olduğundan emin olun: Debian ve Ubuntu'da bu lvm2 paketidir (sudo apt install lvm2); RHEL ailesinde varsayılan olarak kuruludur. Genel bakış için kısa ve ayrıntılı komutlar vardır:

$ sudo pvs
  PV         VG      Fmt  Attr PSize   PFree
  /dev/sdb   data_vg lvm2 a--  <20.00g      0
  /dev/sdc   data_vg lvm2 a--  <20.00g  <10.00g

$ sudo vgs
  VG      #PV #LV #SN Attr   VSize  VFree
  data_vg   2   1   0 wz--n- 39.99g <10.00g

$ sudo lvs
  LV   VG      Attr       LSize  Pool Origin Data%  Meta%
  app  data_vg -wi-ao---- 30.00g

Ayrıntılı bilgi için pvdisplay, vgdisplay ve lvdisplay kullanılır. Normal bölümlerle birlikte genel görünümü lsblk verir: mantıksal birimler lvm türüyle görünür.

$ lsblk /dev/sdb /dev/sdc
NAME             MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb                8:16   0  20G  0 disk
└─data_vg-app    253:0    0  30G  0 lvm  /srv/app
sdc                8:32   0  20G  0 disk
└─data_vg-app    253:0    0  30G  0 lvm  /srv/app

Görüldüğü gibi, 30 GB'lık app birimi, her biri 20 GB olan iki diskte birden yer alıyor — normal bir bölümle bunu yapmak mümkün değildir.

Sıfırdan LVM: ham diskten bağlı birime

Sunucuya boş bir /dev/sdb diski eklendiğini ve uygulama verileri için 15 GB'lık bir birime ihtiyaç olduğunu varsayalım. Diskin adını lsblk ile iki kez kontrol edin: aşağıdaki tüm komutlar belirtilen aygıttaki verileri yok eder.

Adım 1. Fiziksel birim oluşturma

$ sudo pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.

LVM'e diskin tamamını verebilirsiniz; ya da önce fdisk veya parted ile “Linux LVM” türünde bir bölüm oluşturup onu (/dev/sdb1) verebilirsiniz. Bölüm diğer yöneticiler için daha açıktır ve diski LVM'in üzerine yanlışlıkla bölümlendirmeye karşı korur; tüm diski ise bulutta büyütmek daha kolaydır.

Adım 2. Birim grubu oluşturma

$ sudo vgcreate data_vg /dev/sdb
  Volume group "data_vg" successfully created

Adım 3. Mantıksal birim kesme

$ sudo lvcreate -n app -L 15G data_vg
  Logical volume "app" created.

-L mutlak boyut verir, -l ise extent sayısı veya yüzde verir: -l 100%FREE grubun tüm boş alanını alır, -l 50%VG grubun yarısını. Gruptaki boş bir payı korumak iyi bir uygulamadır: sonradan herhangi bir birime ekleyebilir veya anlık görüntüye ayırabilirsiniz.

Adım 4. Dosya sistemi ve bağlama

$ sudo mkfs.ext4 /dev/data_vg/app
$ sudo mkdir -p /srv/app
$ sudo mount /dev/data_vg/app /srv/app
$ df -h /srv/app
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/data_vg-app   15G   24K   14G   1% /srv/app

Birimin yeniden başlatmadan sonra da bağlı kalması için /etc/fstab dosyasına satır ekleyin. Mantıksal birimler için /dev/mapper/... yolu kararlıdır, bu yüzden bunu ya da blkid'in verdiği UUID'yi kullanabilirsiniz:

/dev/mapper/data_vg-app  /srv/app  ext4  defaults  0 2

Yeniden başlatmadan önce sudo mount -a ile kaydı kontrol edin: fstab'daki bir hata sunucuyu acil durum moduna sokabilir.

LVM birimini hizmeti durdurmadan büyütme

LVM'i sevmenin asıl nedeni budur. Birim bağlı dosya sistemi üzerinde büyür, uygulama yazmaya devam eder. Senaryo, grupta boş yer olup olmadığına bağlıdır.

VG içinde boş yer varsa

$ sudo vgs data_vg
  VG      #PV #LV #SN Attr   VSize   VFree
  data_vg   1   1   0 wz--n- <20.00g <5.00g

$ sudo lvextend -r -L +4G /dev/data_vg/app
  Size of logical volume data_vg/app changed from 15.00 GiB to 19.00 GiB.
  Logical volume data_vg/app successfully resized.
resize2fs 1.47.0
Filesystem at /dev/mapper/data_vg-app is mounted on /srv/app; on-line resizing required

Kilit bayrak -r (--resizefs): birim büyütüldükten hemen sonra dosya sistemini de genişletir. Bu bayrak olmadan birim büyür, ama df -h eski boyutu gösterir, çünkü dosya sistemi yeni alandan haberdar değildir. En sık yapılan hata budur; bu durumda resize2fs (ext4) veya xfs_growfs (XFS) komutunu elle çalıştırmak yeterlidir.

$ sudo resize2fs /dev/data_vg/app      # ext4, aygıt adı verilir
$ sudo xfs_growfs /srv/app             # XFS, bağlama noktası verilir

Dikkat: -L +4G 4 GB ekler, -L 4G ise toplam boyutu 4 GB yapar. Geriye kalan tüm yeri birime vermek için -l +100%FREE kullanın.

VG'de yer bittiyse: disk ekleme

Yeni diski takın (bulutta birim ekleyin), lsblk ile bulun ve gruba ekleyin:

$ sudo pvcreate /dev/sdc
$ sudo vgextend data_vg /dev/sdc
  Volume group "data_vg" successfully extended
$ sudo lvextend -r -l +100%FREE /dev/data_vg/app

Üç komut, sıfır kesinti. Dosya sistemi artık iki diskin üzerinde durur ve uygulama bunu fark etmez.

Bulutta disk büyütüldüyse

Bulutta çoğu zaman yeni disk eklemek yerine mevcut diski büyütmek daha kolaydır. Bu durumda çekirdek aygıtın yeni boyutunu görür, fiziksel birimi ise pvresize ile genişletmeniz gerekir:

$ sudo pvresize /dev/sdb
  Physical volume "/dev/sdb" changed
$ sudo lvextend -r -l +100%FREE /dev/data_vg/app

PV bir bölüm (/dev/sdb1) üzerinde oluşturulduysa, önce bölümü genişletin — örneğin cloud-guest-utils paketindeki growpart /dev/sdb 1 ile — ve ancak sonra pvresize /dev/sdb1 çalıştırın.

LVM birimi küçültülebilir mi

Küçültülebilir, ama her dosya sistemi için değil ve çalışır durumdayken değil. XFS hiç küçültülemez — yalnızca verileri taşıyarak yeniden oluşturulabilir. Ext4 küçültülebilir, ama yalnızca bağlantısı kesilmiş durumda:

$ sudo umount /srv/app
$ sudo lvreduce -r -L 10G /dev/data_vg/app

-r bayrağıyla LVM dosya sistemini kendisi denetler (e2fsck) ve birim küçülmeden önce sıkıştırır. Bu bayrak olmadan dosya sistemini olduğundan küçük bir birim yapıp verileri bozmak kolaydır. Küçültmeden önce mutlaka yedek alın.

LVM anlık görüntüleri: riskli işlem öncesi kopya

Anlık görüntü, mantıksal birimin an'lık bir kopyasıdır. Saniyenin küçük bir kesrinde oluşturulur ve veriyi kopyalamaz: LVM copy-on-write (yazmada kopyala) yöntemiyle çalışır ve yalnızca anlık görüntüden sonra orijinal birimde değişen blokları saklar. Bu nedenle anlık görüntü için VG'de yalnızca değişiklikler kadar yer gerekir, birimin tamamı kadar değil.

$ sudo lvcreate -s -n app_before_upgrade -L 2G /dev/data_vg/app
  Logical volume "app_before_upgrade" created.

$ sudo lvs data_vg
  LV                 VG      Attr       LSize  Origin Data%
  app                data_vg owi-aos--- 19.00g
  app_before_upgrade data_vg swi-a-s---  2.00g app    0.01

Data% sütunu değişiklik deposunun ne kadar dolu olduğunu gösterir. %100'e ulaşırsa klasik anlık görüntü geçersiz olur ve yalnızca silinebilir. Boyutu beklenen değişim miktarına göre biraz fazla seçin; uzun süre tutulan anlık görüntüleri lvs ile izleyin veya lvextend ile genişletin.

Anlık görüntüye geri dönme

Güncelleme kötü giderse, birimi anlık görüntü anındaki haline döndürün:

$ sudo umount /srv/app
$ sudo lvconvert --merge /dev/data_vg/app_before_upgrade
  Merging of volume data_vg/app_before_upgrade started.
$ sudo mount /srv/app

Birleştirmeden sonra anlık görüntü kaybolur. Birim bağlantısı kesilemiyorsa (örneğin sistem kökü ise), birleştirme bir sonraki birim etkinleştirilene, yani yeniden başlatmaya kadar ertelenir.

Her şey yolunda gittiyse

Anlık görüntüyü yalnızca silin; yazmayı yavaşlatmasın ve yer kaplamasın:

$ sudo lvremove /dev/data_vg/app_before_upgrade

Çalışan bir sistemin tutarlı yedeğini almak için anlık görüntüyü yalnızca okuma modunda bağlamak kullanışlıdır: mount -o ro ve kopyalama için rsync ya da tar. XFS için orijinalle UUID çakışması nedeniyle bağlamanın reddedilmemesi adına nouuid seçeneği ekleyin.

LVM ve RAID: görevleri karıştırmayın

LVM tek başına disk arızasına karşı koruma sağlamaz. Birim iki diske yayılmışsa ve diskten biri bozulursa, birimin yarısı değil tamamı kaybolur. Arızaya dayanıklılık için LVM'in altına RAID (mdadm) konur veya LVM'in kendi ayna (mirror) modu kullanılır: lvcreate --type raid1 -m 1.

Ne RAID ne de anlık görüntü yedeğin yerini tutar. Anlık görüntü orijinalle aynı disklerde durur; RAID ise yanlışlıkla çalıştırılan rm -rf komutunu da sadık biçimde yansıtır. Başka bir ortamda ayrı bir kopya gerekir.

LVM komutları özeti

GörevKomut
PV, VG, LV genel görünümüpvs, vgs, lvs
Fiziksel birim oluşturmapvcreate /dev/sdb
Grup oluşturmavgcreate data_vg /dev/sdb
Gruba disk eklemevgextend data_vg /dev/sdc
Birim oluşturmalvcreate -n app -L 15G data_vg
Birimi ve dosya sistemini büyütmelvextend -r -L +5G /dev/data_vg/app
Disk büyütüldükten sonra PV'yi genişletmepvresize /dev/sdb
Anlık görüntülvcreate -s -n snap -L 2G /dev/data_vg/app
Anlık görüntüye geri dönmelvconvert --merge /dev/data_vg/snap
Diski gruptan çıkarmapvmove /dev/sdb, sonra vgreduce data_vg /dev/sdb
Birimi silmelvremove /dev/data_vg/app

Sık yapılan hatalar

  • Birim büyütüldü, ama df eski boyutu gösteriyor. -r unutulmuş. resize2fs veya xfs_growfs çalıştırın.
  • Insufficient free space. Grupta boş extent yok: vgs ile kontrol edin ve vgextend ile disk ekleyin ya da PV'yi genişletin.
  • Device /dev/sdc excluded by a filter. Diskte eski bölüm tablosu veya dosya sistemi imzası kalmış. Veriler gerçekten gereksizse, wipefs -a /dev/sdc ile temizleyin.
  • Anlık görüntü Invalid oldu. Değişiklik deposu %100 doldu. Onarılamaz; yalnızca silinebilir ve bir dahaki sefere daha fazla yer ayrılmalıdır.

Özet

Linux'ta LVM üç katmandan oluşur: fiziksel birimler (PV) bir gruba (VG) konur, o gruptan mantıksal birimler (LV) kesilir. Bu, normal bölümlerde olmayan şeyleri sağlar: lvextend -r ile birimi anında büyütmek, kesinti olmadan disk eklemek ve riskli değişikliklerden önce anlık görüntü almak. LVM'in RAID'in ve yedeklemenin yerini tutmadığını unutmayın. Disk bölümlendirme, LVM, RAID ve kotalar kursta uygulamalı olarak işlenmektedir.

Sık sorulan sorular

Verileri olan çalışan bir bölümü LVM'e geçirmek mümkün mü?

Doğrudan değil: pvcreate aygıtın başlangıcını siler. Önce başka bir diskte LVM kurun, verileri rsync ile kopyalayın, fstab'ı düzeltin ve ancak sonra eski bölümü serbest bırakın.

LVM disk performansını yavaşlatır mı?

Anlık görüntü olmadan device-mapper'ın ek yükü neredeyse fark edilmez. Etkin klasik anlık görüntüler ise copy-on-write nedeniyle orijinal birimdeki yazmaları yavaşlatır; bu yüzden onları haftalarca tutmamalısınız.

Ev bilgisayarında veya dizüstü bilgisayarda LVM gerekli mi?

Zorunlu değildir, ama disk şifrelemesi (içinde LVM bulunan LUKS) ile veya bölümleri yeniden bölümlendirmeden boyutlandırmak istediğinizde faydalıdır. Veri içeren sunucularda LVM neredeyse standarttır.

LVM'de thin provisioning nedir?

İnce birimlerdir: bir havuz (lvcreate --type thin-pool) oluşturulur ve havuzdaki birimler yalnızca veri yazıldıkça gerçek yer kaplar. Böylece fiziksel olarak olandan fazla alan vaat edebilirsiniz, ama havuzun dolumunu izlemeniz gerekir.

Veriyi kaybetmeden bir diski birim grubundan nasıl çıkarırım?

Diskteki extent'leri grubun diğer disklerine pvmove /dev/sdb ile taşıyın (yeterli boş alan gerekir), ardından vgreduce data_vg /dev/sdb ve pvremove /dev/sdb çalıştırın.

Bu konuyu videoyla öğrenin

Bu konu “Linux: с нуля до уверенного администрирования” kursunda uygulamalı olarak ayrıntılı işleniyor.

Kursa git