LVM di Linux: volume fisik, grup, dan volume logis dalam praktik
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.
| Lapisan | Keterangan | Contoh nama | Dibuat dengan |
|---|---|---|---|
| PV (Physical Volume) | disk atau partisi yang disiapkan untuk LVM | /dev/sdb, /dev/sdc1 | pvcreate |
| VG (Volume Group) | kumpulan yang menggabungkan satu atau lebih PV | data_vg | vgcreate |
| LV (Logical Volume) | volume yang dipotong dari VG; sistem berkas dibuat di atasnya | /dev/data_vg/app | lvcreate |
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
| Tugas | Perintah |
|---|---|
| Ringkasan PV, VG, LV | pvs, vgs, lvs |
| Membuat volume fisik | pvcreate /dev/sdb |
| Membuat grup | vgcreate data_vg /dev/sdb |
| Menambah disk ke grup | vgextend data_vg /dev/sdc |
| Membuat volume | lvcreate -n app -L 15G data_vg |
| Memperbesar volume dan sistem berkas | lvextend -r -L +5G /dev/data_vg/app |
| Memperlebar PV setelah disk diperbesar | pvresize /dev/sdb |
| Snapshot | lvcreate -s -n snap -L 2G /dev/data_vg/app |
| Kembali ke snapshot | lvconvert --merge /dev/data_vg/snap |
| Mengeluarkan disk dari grup | pvmove /dev/sdb, lalu vgreduce data_vg /dev/sdb |
| Menghapus volume | lvremove /dev/data_vg/app |
Kesalahan yang sering terjadi
- Volume sudah diperbesar, tetapi df masih menampilkan ukuran lama. Flag
-rterlewat. Jalankanresize2fsatauxfs_growfs. - Insufficient free space. Tidak ada extent kosong di grup: periksa
vgs, lalu tambahkan disk denganvgextendatau 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.
Topik ini dibahas mendalam dengan praktik di kursus “Linux: с нуля до уверенного администрирования”.
Ke kursus