Ukuran partisi yang kita tetapkan hari ini adalah tebakan untuk kebutuhan setahun ke depan, dan tebakan itu hampir selalu meleset. Jalan tradisional ketika partisi penuh — backup, repartisi, restore — menyita berjam-jam dengan downtime. LVM (Logical Volume Manager) memutus masalah itu dengan menyisipkan satu lapisan perantara antara disk fisik dan filesystem: kapasitas beberapa disk digabung menjadi satu kolam, lalu dipotong menjadi volume yang bisa dibesarkan kapan saja tanpa memindahkan data. Chapter ini membedah tiga lapisannya — physical volume, volume group, logical volume — membaca laporan pvs, vgs, lvs, melakukan resize online, lalu melihat sekilas snapshot. Bekal dari chapter Disk Partitioning Tools
dan fstab
akan terus terpakai.
Masalah Partisi Statik #
Partisi adalah wilayah tetap yang dipatok tabel partisi, dan filesystem hidup di dalam satu wilayah itu. Ketika partisi /data menipis, ruang kosong hampir selalu berada di disk lain — bukan tepat di belakangnya — sehingga solusi tradisionalnya adalah partisi baru plus salin data, dengan downtime sebagai bonus. Masalah kedua: dua disk terpisah tidak bisa menyumbang kapasitas untuk satu filesystem karena masing-masing tetap pulau sendiri. LVM menjawab keduanya dengan memindahkan pembagian kapasitas ke lapisan perangkat lunak yang boleh ditata ulang kapan pun.
Tiga Lapisan: Physical Volume, Volume Group, Logical Volume #
LVM membagi pekerjaannya menjadi tiga lapisan, dan setiap lapisan punya set perintah sendiri. Diagram berikut memperlihatkan alurnya:
Lapisan pertama, physical volume (PV), adalah disk utuh atau partisi yang ditandai sebagai bahan baku LVM; pvcreate /dev/sdb menulis metadata LVM di awal device. Lapisan kedua, volume group (VG), adalah kolam yang menyerap semua PV — vgcreate data /dev/sdb /dev/sdc membuat VG data berkapasitas gabungan kedua disk. Lapisan ketiga, logical volume (LV), adalah irisan dari kolam itu: lvcreate -n dokumen -L 50G data mengambil 50 GiB untuk LV bernama dokumen. LV muncul sebagai block device /dev/data/dokumen — tinggal diformat mkfs dan didaftarkan di fstab
.
LVM bukan driver tunggal: LVM menyusun device baru di atas device lama memakai device-mapper, fasilitas kernel yang memetakan blok dari satu device ke device lain. Kita bisa memeriksa keberadaan fasilitas itu beserta topologi disk saat ini:
grep -i device-mapper /proc/devices
lsblk -o NAME,MAJ:MIN,SIZE,TYPEOutput yang Dihasilkan:
252 device-mapper
NAME MAJ:MIN SIZE TYPE
zram0 253:0 0B disk
vda 254:0 10G disk
pmem0 259:0 384M disk
└─pmem0p1 259:1 383M partBaris 252 device-mapper menunjukkan nomor major yang dipegang device-mapper — angka yang membuntuti setiap device LVM. Kolom MAJ:MIN pada lsblk memakai skema yang sama: vda bernomor 254:0, dan LV pertama akan muncul sebagai dm-0 bernomor 252:0. Path /dev/data/dokumen sebenarnya hanya symlink ke /dev/dm-0. Pada server yang memakai LVM, lsblk menampilkan LV dengan TYPE bernilai lvm di bawah partisi pembawanya.
Membangun Bertingkat: pvcreate, vgcreate, lvcreate #
Di server sungguhan, empat perintah berikut membangun seluruh menara dari dasar sampai filesystem:
sudo pvcreate /dev/sdb /dev/sdc
sudo vgcreate data /dev/sdb /dev/sdc
sudo lvcreate -n dokumen -L 50G data
sudo mkfs.ext4 /dev/data/dokumenBedah baris per barisnya:
- Baris 1 (
pvcreate ...): menulis header metadata LVM ke kedua disk dan menandainya sebagai physical volume. Isi disk lama ditimpa, jadi pastikan disk ini memang kosong. - Baris 2 (
vgcreate data ...): menggabungkan kedua PV menjadi satu kolam bernamadata. Sejak baris ini,sdbdansdctidak lagi diakses terpisah. - Baris 3 (
lvcreate -n dokumen -L 50G data): mengalokasikan 50 GiB dari kolamdatauntuk LV bernamadokumen. - Baris 4 (
mkfs.ext4 ...): memformat LV persis seperti partisi biasa — tinggal di-mount dan didaftarkan di fstab.
Setiap lapisan punya tiga kelompok perintah yang sejajar: membuat, melapor, dan membongkar.
| Lapisan | Membuat | Melapor | Membongkar |
|---|---|---|---|
| Physical volume | pvcreate /dev/sdb | pvs, pvdisplay | pvremove |
| Volume group | vgcreate data /dev/sdb | vgs, vgdisplay | vgremove |
| Logical volume | lvcreate -n dokumen -L 50G data | lvs, lvdisplay | lvremove |
VG mengalokasikan kapasitas dalam potongan seragam bernama extent — 4 MiB pada pengaturan bawaan. Opsi -L (ukuran langsung) dan -l (jumlah extent) adalah dua pintu ke alokasi yang sama, dan aritmetikanya bisa kita hitung sendiri:
echo "50 GiB = $((50 * 1024 / 4)) extent"
echo "VG dua disk 200 GiB = $((2 * 200 * 1024 / 4)) extent"Output yang Dihasilkan:
50 GiB = 12800 extent
VG dua disk 200 GiB = 102400 extentAngka 12800 berarti lvcreate -L 50G data setara dengan lvcreate -l 12800 data, dan kolam masih menyisakan 89600 extent. Opsi -l 100%FREE menghabiskan seluruh sisa kolam sekaligus. Konsep extent juga menjadi dasar fitur lain: pvmove memindahkan extent antar-PV tanpa mengganggu LV, dan ukuran snapshot dihitung per extent.
Pola “gabung dulu, potong kemudian” bisa kita rasakan pada file biasa tanpa menyentuh disk sungguhan. Anggap dua file berikut dua disk kosong:
truncate -s 64M disk-a.img
truncate -s 64M disk-b.img
cat disk-a.img disk-b.img > kolam.img
head -c 32M kolam.img > lv-dokumen.img
stat -c '%n %s byte' disk-a.img disk-b.img kolam.img lv-dokumen.imgOutput yang Dihasilkan:
disk-a.img 67108864 byte
disk-b.img 67108864 byte
kolam.img 134217728 byte
lv-dokumen.img 33554432 byteBedah baris per barisnya:
- Baris 1-2 (
truncate -s 64M ...): membuat dua file bayangan 64 MiB sebagai pengganti dua disk fisik. - Baris 3 (
cat disk-a.img disk-b.img > kolam.img): menggabungkan kapasitas keduanya menjadi satu file 128 MiB — analogi kasar darivgcreate. - Baris 4 (
head -c 32M kolam.img > lv-dokumen.img): memotong 32 MiB dari depan kolam — analogi darilvcreatelinear. - Baris 5 (
stat -c '%n %s byte' ...): memastikan ukurannya: 64 juta, 64 juta, 128 juta, dan 32 juta byte.
Perumpamaan ini akurat soal ukuran, tetapi tidak soal mekanisme. LVM tidak menyalin byte seperti cat — device-mapper hanya memetakan extent, sehingga satu LV bisa menyeberang batas dua disk tanpa pemindahan data sama sekali.
Resize Online dengan lvextend #
Inilah fitur yang membuat LVM sepadan dengan usahanya. Ketika LV dokumen menipis dan VG masih punya sisa, satu perintah memperbesar LV sekaligus filesystem di dalamnya:
sudo lvextend -r -L +20G /dev/data/dokumen
df -h /mnt/dokumenTanda plus pada +20G berarti “tambahkan 20 GiB”; tanpa tanda plus, angka itu berarti ukuran akhir. Opsi -r memerintahkan LVM turut membesarkan filesystem lewat fsadm yang menguasai ext4, XFS, dan Btrfs — semuanya berlangsung online tanpa unmount dan tanpa downtime. df -h tinggal dipakai memastikan ukuran baru sudah terbaca.
Snapshot: Cabang Beku Sekejap #
Satu varian lvcreate memberi kegunaan ekstra: sudo lvcreate --snapshot -n dokumen-snap -L 5G /dev/data/dokumen membekukan citra LV pada satu titik waktu lewat copy-on-write. Snapshot hanya menyalin blok yang berubah setelahnya, sehingga pembuatannya selesai dalam hitungan detik. Snapshot cocok sebagai titik kembali saat backup database yang sedang berjalan, namun areanya bisa penuh bila LV aslinya ramai berubah — pantau kolom Data% di lvs. Pembahasan tuntasnya menyusul di chapter Filesystem Snapshots
.
Membaca Laporan: pvs, vgs, lvs #
Tiga laporan siap pakai mencerminkan tiga lapisan — pvs, vgs, dan lvs — dan ketiganya hanya membaca metadata, jadi aman dijalankan kapan saja. Berikut contoh tampilan ketiganya pada VG data setelah LV kedua dibuat:
PV VG Fmt Attr PSize PFree
/dev/sdb data lvm2 a-- 200.00g 100.00g
/dev/sdc data lvm2 a-- 200.00g 100.00g
VG #PV #LV #SN Attr VSize VFree
data 2 2 0 wz--n- 400.00g 200.00g
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
dokumen data -wi-ao---- 50.00g
media data -wi-ao---- 150.00gKolom Attr memadatkan status: a berarti active, o berarti device sedang terbuka (filesystem di dalamnya ter-mount), dan w pada VG berarti writable. Baris lvs memperlihatkan kedua LV dengan sisa kolam VFree 200 GiB yang siap dijadikan LV baru atau resize. Dokumentasi lengkap perintahnya ada di lvm(8)
, lvcreate(8)
, serta panduan LVM
di wiki Arch.
Kolam LVM memberi elastisitas, tetapi menyimpan risiko baru: pada LV linear, satu disk yang mati bisa merusak seluruh VG karena data tersebar di semua anggotanya. Chapter berikutnya menambahkan lapisan ketahanan — RAID — yang justru kerap dipasang di bawah LVM supaya kolamnya dibangun di atas disk-disk yang saling menggantikan.