Dasar

LVM di Linux: volume fisik, grup, dan volume logis dalam praktik

Diperbarui: · Skillaria.Top

LVM (Logical Volume Manager) di Linux adalah lapisan di antara disk dan sistem berkas: disk menjadi volume fisik (PV), digabung menjadi grup volume (VG), dan dari situ dipotong volume logis (LV) dengan ukuran apa pun. Keunggulan utamanya, volume bisa diperbesar saat berjalan dengan lvextend -r, disk baru bisa ditambahkan ke grup tanpa menghentikan layanan, dan snapshot dapat dibuat sebelum operasi berisiko.

LVM (Logical Volume Manager) adalah pengelola volume logis di Linux yang memisahkan sistem berkas dari disk fisik. Alih-alih mengikat /var secara kaku ke partisi /dev/sdb1, Anda memasukkan disk ke satu kumpulan bersama dan memotong volume dengan ukuran yang dibutuhkan. Saat ruang kurang, volume dapat membesar dengan satu perintah, tanpa reboot dan tanpa menghentikan layanan. Di bawah ini dibahas cara kerja LVM di Linux, cara membuat volume dari nol, memperbesarnya, membuat snapshot, serta menghindari kesalahan yang umum terjadi.

Mengapa perlu LVM jika sudah ada partisi biasa

Partisi biasa adalah sepotong bagian yang berkesinambungan pada satu disk. Ukurannya ditentukan saat partisi dibuat, dan partisi hanya bisa diperbesar jika ruang kosong tersedia tepat di sebelahnya. Jika disk sudah penuh, Anda harus membeli disk baru, memindahkan data, dan menulis ulang /etc/fstab, sementara layanan harus dihentikan selama proses itu.

LVM menyelesaikan tiga hal:

  • Ukuran yang fleksibel. Volume logis dapat diperbesar (dan untuk ext4 juga dikecilkan) kapan saja.
  • Penggabungan disk. Beberapa disk fisik menjadi satu kumpulan; satu volume bisa berada di dua disk sekaligus.
  • Snapshot. Salinan seketika dari sebuah volume sebelum pembaruan, migrasi basis data, atau operasi berisiko lainnya.

Karena itulah installer Ubuntu Server, RHEL, Rocky, dan AlmaLinux menawarkan LVM secara default, dan di server yang menyimpan data hampir selalu LVM dipasang.

Tiga lapisan LVM: PV, VG, dan LV

Seluruh logika LVM bisa dirangkum dalam tiga istilah. Sebagai analogi: disk adalah karung tepung, grup adalah gudang bersama, dan volume logis adalah takaran yang Anda ambil dari gudang.

LapisanKeteranganContoh namaDibuat dengan
PV (Physical Volume)disk atau partisi yang disiapkan untuk LVM/dev/sdb, /dev/sdc1pvcreate
VG (Volume Group)kumpulan yang menggabungkan satu atau lebih PVdata_vgvgcreate
LV (Logical Volume)volume yang dipotong dari VG; sistem berkas dibuat di atasnya/dev/data_vg/applvcreate

Di dalam VG, ruang dibagi menjadi extent (PE, physical extent) — blok berukuran tetap, secara default 4 MiB. Volume logis hanyalah kumpulan extent yang tidak harus berurutan dan boleh berada di disk yang berbeda. Itulah sebabnya volume sangat mudah diperbesar: LVM bisa menambahkan extent kosong dari mana saja.

Perangkat volume logis dapat diakses melalui dua jalur yang setara: /dev/data_vg/app dan /dev/mapper/data_vg-app. Di balik layar, perangkat ini adalah device-mapper dari kernel.

Melihat apa yang sudah ada

Pertama, pastikan paketnya terpasang: di Debian dan Ubuntu namanya lvm2 (sudo apt install lvm2), sedangkan di keluarga RHEL sudah terpasang secara default. Untuk ringkasan tersedia perintah singkat dan rinci:

$ 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

Informasi lebih detail diberikan oleh pvdisplay, vgdisplay, dan lvdisplay. Gambaran lengkap bersama partisi biasa diberikan oleh lsblk: volume logis tampil di sana dengan tipe lvm.

$ 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

Terlihat bahwa volume app berukuran 30 GB berada di dua disk masing-masing 20 GB — hal seperti ini tidak mungkin dilakukan dengan partisi biasa.

LVM dari nol: dari disk mentah hingga volume terpasang

Misalkan sebuah disk kosong /dev/sdb ditambahkan ke server dan aplikasi membutuhkan volume 15 GB untuk datanya. Periksa nama disk melalui lsblk dua kali: semua perintah di bawah menghapus data pada perangkat yang disebutkan.

Langkah 1. Membuat volume fisik

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

Anda bisa memberikan seluruh disk kepada LVM, atau terlebih dahulu membuat partisi dengan fdisk atau parted bertipe «Linux LVM», lalu menggunakan partisi itu (/dev/sdb1). Partisi lebih jelas bagi administrator lain dan melindungi dari pemartisian ulang yang tidak sengaja di atas LVM; di cloud, seluruh disk lebih mudah diperbesar.

Langkah 2. Membuat grup volume

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

Langkah 3. Memotong volume logis

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

Flag -L menentukan ukuran absolut, sedangkan -l untuk ukuran dalam extent atau persentase: -l 100%FREE mengambil seluruh ruang kosong grup, -l 50%VG separuh grup. Menyisakan cadangan kosong di VG adalah praktik yang baik: nanti ruang itu bisa ditambahkan ke volume mana pun atau dipakai untuk snapshot.

Langkah 4. Sistem berkas dan pemasangan

$ 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

Agar volume terpasang lagi setelah reboot, tambahkan baris di /etc/fstab. Untuk volume logis, jalur /dev/mapper/... bersifat stabil, jadi bisa dipakai, atau UUID dari blkid:

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

Periksa barisnya dengan sudo mount -a sebelum reboot: kesalahan di fstab bisa membuat server masuk mode darurat.

Cara memperbesar volume LVM tanpa menghentikan layanan

Inilah alasan utama menyukai LVM. Volume membesar saat sistem berkasnya terpasang, dan aplikasi tetap menulis data. Skenarionya bergantung pada ada atau tidaknya ruang kosong di grup.

Jika ada ruang kosong di VG

$ 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

Flag kuncinya adalah -r (--resizefs): segera setelah volume membesar, sistem berkasnya juga ikut diperbesar. Tanpa flag ini, volume menjadi lebih besar, tetapi df -h masih menampilkan ukuran lama, karena sistem berkas tidak mengetahui ruang barunya. Ini kesalahan yang paling sering terjadi; jika hal itu terjadi, cukup jalankan manual resize2fs untuk ext4 atau xfs_growfs untuk XFS.

$ sudo resize2fs /dev/data_vg/app      # ext4, sebutkan perangkatnya
$ sudo xfs_growfs /srv/app             # XFS, sebutkan titik pasangnya

Perhatikan perbedaannya: -L +4G menambahkan 4 GB, sedangkan -L 4G menetapkan ukuran akhir 4 GB. Untuk memberikan seluruh sisa ruang kepada volume, gunakan -l +100%FREE.

Jika ruang di VG habis: menambahkan disk

Pasang disk baru (di cloud, lampirkan volume), temukan melalui lsblk, lalu tambahkan ke grup:

$ 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

Tiga perintah, tanpa henti layanan. Sistem berkas kini berada di dua disk, dan aplikasi tidak menyadarinya.

Jika disk diperbesar di cloud

Di cloud sering lebih mudah tidak menambah disk, melainkan memperbesar disk yang sudah ada. Kernel kemudian melihat ukuran perangkat yang baru, dan volume fisik perlu diperlebar dengan pvresize:

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

Jika PV dibuat di atas partisi (/dev/sdb1), perbesar partisinya lebih dulu, misalnya dengan growpart /dev/sdb 1 dari paket cloud-guest-utils, baru kemudian jalankan pvresize /dev/sdb1.

Bisakah volume LVM dikecilkan

Bisa, tetapi tidak untuk semua sistem berkas dan tidak saat sistem berjalan. XFS sama sekali tidak bisa dikecilkan — hanya dibuat ulang dengan memindahkan data. Ext4 bisa dikecilkan, tetapi hanya dalam kondisi tidak terpasang:

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

Dengan flag -r, LVM sendiri akan memeriksa sistem berkas (e2fsck) dan mengecilkannya sebelum volume dipangkas. Tanpa -r, mudah sekali memotong volume lebih kecil daripada sistem berkasnya dan merusak data. Sebelum mengecilkan, selalu buat cadangan.

Snapshot LVM: salinan volume sebelum operasi berisiko

Snapshot adalah salinan seketika dari sebuah volume logis. Ia dibuat dalam hitungan sepersekian detik dan tidak menyalin data: LVM bekerja dengan prinsip copy-on-write dan hanya menyimpan ke snapshot blok-blok yang berubah di volume asal setelah snapshot dibuat. Karena itu, snapshot hanya membutuhkan ruang di VG sebesar perubahannya, bukan sebesar seluruh volume.

$ 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

Kolom Data% menunjukkan seberapa penuh penyimpanan perubahannya. Jika mencapai 100%, snapshot klasik menjadi tidak valid dan hanya bisa dihapus. Pilih ukuran dengan cadangan yang cukup untuk perkiraan perubahan, dan pantau snapshot yang berumur panjang melalui lvs atau perbesar dengan lvextend.

Cara kembali ke snapshot

Jika pembaruan berjalan buruk, kembalikan volume ke kondisi saat snapshot dibuat:

$ 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

Setelah penggabungan, snapshot menghilang. Jika volume tidak bisa dilepas (misalnya ini root sistem), penggabungan akan ditunda sampai volume diaktifkan kembali, yaitu saat reboot berikutnya.

Jika semuanya berjalan baik

Snapshot cukup dihapus agar tidak memperlambat penulisan dan tidak memakan ruang:

$ sudo lvremove /dev/data_vg/app_before_upgrade

Snapshot juga berguna dipasang hanya-baca untuk mengambil cadangan yang konsisten dari sistem yang sedang berjalan: gunakan mount -o ro lalu salin dengan rsync atau tar. Untuk XFS tambahkan opsi nouuid, jika tidak pemasangan akan ditolak karena UUID-nya sama dengan volume asli.

LVM dan RAID: jangan tertukar tujuannya

LVM sendiri tidak melindungi dari kerusakan disk. Jika sebuah volume tersebar di dua disk dan salah satunya rusak, seluruh volume hilang, bukan setengahnya. Untuk ketahanan terhadap kegagalan, letakkan RAID (mdadm) di bawah LVM, atau gunakan mode cermin bawaan LVM (lvcreate --type raid1 -m 1).

Namun baik RAID maupun snapshot tidak menggantikan cadangan. Snapshot berada di disk yang sama dengan volume asal, dan RAID dengan patuh juga menyalin rm -rf yang tidak disengaja. Diperlukan salinan terpisah di media lain.

Contekan perintah LVM

TugasPerintah
Ringkasan PV, VG, LVpvs, vgs, lvs
Membuat volume fisikpvcreate /dev/sdb
Membuat grupvgcreate data_vg /dev/sdb
Menambah disk ke grupvgextend data_vg /dev/sdc
Membuat volumelvcreate -n app -L 15G data_vg
Memperbesar volume dan sistem berkaslvextend -r -L +5G /dev/data_vg/app
Memperlebar PV setelah disk diperbesarpvresize /dev/sdb
Snapshotlvcreate -s -n snap -L 2G /dev/data_vg/app
Kembali ke snapshotlvconvert --merge /dev/data_vg/snap
Mengeluarkan disk dari gruppvmove /dev/sdb, lalu vgreduce data_vg /dev/sdb
Menghapus volumelvremove /dev/data_vg/app

Kesalahan yang sering terjadi

  • Volume sudah diperbesar, tetapi df masih menampilkan ukuran lama. Flag -r terlewat. Jalankan resize2fs atau xfs_growfs.
  • Insufficient free space. Tidak ada extent kosong di grup: periksa vgs, lalu tambahkan disk dengan vgextend atau perlebar PV.
  • Device /dev/sdc excluded by a filter. Di disk masih tersisa tabel partisi atau tanda sistem berkas lama. Jika datanya benar-benar tidak diperlukan, bersihkan dengan wipefs -a /dev/sdc.
  • Snapshot menjadi Invalid. Penyimpanan perubahannya penuh 100%. Tidak bisa dipulihkan — hanya bisa dihapus, dan lain kali alokasikan ruang lebih besar.

Kesimpulan

LVM di Linux terdiri dari tiga lapisan: volume fisik (PV) digabung menjadi grup (VG), dan dari grup dipotong volume logis (LV). Hasilnya adalah sesuatu yang tidak dimiliki partisi biasa: perbesaran volume saat berjalan dengan lvextend -r, penambahan disk tanpa henti layanan, dan snapshot sebelum perubahan berisiko. Ingatlah bahwa LVM tidak menggantikan RAID maupun cadangan. Pemartisian disk, LVM, RAID, dan kuota dibahas secara praktis dalam pelajaran kursus Linux.

Pertanyaan umum

Bisakah partisi yang sudah berisi data diubah menjadi LVM?

Tidak secara langsung: pvcreate menimpa awal perangkat. Buat LVM di disk lain, salin data dengan rsync, perbarui fstab, dan baru kemudian kosongkan partisi lama.

Apakah LVM memperlambat disk?

Tanpa snapshot, beban device-mapper hampir tidak terasa. Snapshot klasik yang aktif memperlambat penulisan ke volume asal karena copy-on-write, jadi jangan menyimpannya berminggu-minggu.

Apakah LVM perlu di komputer rumah atau laptop?

Tidak wajib, tetapi berguna jika disk dienkripsi (LUKS dengan LVM di dalamnya) atau Anda ingin mengubah ukuran partisi tanpa mempartisi ulang. Di server yang menyimpan data, LVM hampir menjadi standar.

Apa itu thin provisioning di LVM?

Itu volume tipis: dibuat kolam (lvcreate --type thin-pool), dan volume di dalamnya hanya memakan ruang fisik sebanyak data yang ditulis. Dengan cara ini volume bisa diberikan lebih besar daripada ruang fisik yang ada, tetapi pengisian kolam harus dipantau.

Bagaimana cara mengeluarkan disk dari grup volume tanpa kehilangan data?

Pindahkan extent-nya ke disk lain dalam grup dengan pvmove /dev/sdb (ruang kosong yang cukup harus tersedia), lalu jalankan vgreduce data_vg /dev/sdb dan pvremove /dev/sdb.

Pelajari topik ini lewat video

Topik ini dibahas mendalam dengan praktik di kursus “Linux: с нуля до уверенного администрирования”.

Ke kursus