Panduan LVM Lengkap
Linux LVM: Panduan Lengkap
dari Dasar sampai Troubleshooting Produksi
Linux LVM: Panduan Lengkap dari Dasar sampai Troubleshooting Produksi
Level: L2 hingga L3 · Estimasi baca: 25 menit · Kategori: Linux Administration, DevOps, Storage Management
Pendahuluan
Pernahkah kamu kehabisan space di partisi /var atau /home padahal disk masih banyak sisa di partisi lain? Atau ingin menggabungkan beberapa disk menjadi satu storage pool yang fleksibel? Di sinilah LVM (Logical Volume Management) menjadi penyelamat.
LVM adalah lapisan abstraksi antara disk fisik dan filesystem yang memungkinkan kita mengelola storage secara dinamis — bisa diperluas, diperkecil, dipindah, bahkan di-snapshot, semua tanpa harus merestart server. Ini adalah skill wajib bagi Linux Administrator, DevOps Engineer, maupun siapapun yang bekerja dengan infrastruktur produksi.
Di tutorial ini, kita akan belajar dari nol hingga troubleshooting kasus nyata yang sering muncul di lingkungan produksi.
Daftar Isi
- Apa Itu LVM dan Kenapa Penting?
- Komponen-Komponen LVM
- Instalasi dan Persiapan
- Membuat LVM dari Nol
- Memperluas (Extend) LVM
- Memperkecil (Reduce) LVM
- LVM Snapshot dan Rollback
- Troubleshooting Kasus Produksi
- Perintah Diagnostik Cepat
- Best Practices Produksi
1. Apa Itu LVM dan Kenapa Penting?
Bayangkan kamu punya tiga lemari baju terpisah. Dengan cara konvensional, kamu tidak bisa memindahkan rak dari satu lemari ke lemari lain tanpa mengosongkannya dulu. LVM adalah seperti sistem modular yang memungkinkan kamu menggabungkan semua lemari menjadi satu ruang penyimpanan besar dan membagi-baginya secara bebas.
Keunggulan LVM dibanding Partisi Biasa
| Fitur | Partisi Biasa | LVM |
|---|---|---|
| Resize tanpa umount | Tidak bisa | Bisa (extend) |
| Gabungkan beberapa disk | Tidak bisa | Bisa |
| Snapshot | Tidak bisa | Bisa |
| Pindah data antar disk | Tidak bisa | Bisa (pvmove) |
| Fleksibilitas alokasi | Terbatas | Sangat fleksibel |
Arsitektur LVM
[ Aplikasi / User ]
|
[ Filesystem: /mnt/data — ext4 atau XFS ]
|
[ Logical Volume: /dev/vg_data/lv_app ] <- yang kita "lihat"
|
[ Volume Group: vg_data (storage pool) ] <- kumpulan disk
|
[ Physical Volume: /dev/sdb /dev/sdc ] <- disk fisik
|
[ Hardware: SATA / SCSI / NVMe / SSD ]
Tiga layer utamanya adalah:
- Physical Volume (PV) — disk atau partisi yang sudah “didaftarkan” ke LVM
- Volume Group (VG) — pool besar yang menggabungkan satu atau lebih PV
- Logical Volume (LV) — partisi virtual yang dibuat dari VG, inilah yang kita format dan mount
2. Komponen-Komponen LVM
Physical Volume (PV)
PV adalah titik awal LVM. Sebuah disk (/dev/sdb) atau partisi (/dev/sdb1) yang diinisialisasi dengan perintah pvcreate akan menjadi PV. Di dalamnya, storage dibagi menjadi unit-unit kecil bernama Physical Extent (PE) — ukuran defaultnya 4MB.
Volume Group (VG)
VG adalah “kolam penyimpanan” yang menggabungkan beberapa PV. Anggap saja seperti satu hard disk virtual besar. Dari sinilah kita mengalokasikan space untuk LV. VG bisa diperluas kapan saja dengan menambahkan PV baru.
Logical Volume (LV)
LV adalah partisi virtual yang dibuat dari VG. Inilah yang kita format dengan ext4 atau XFS, lalu kita mount ke direktori. LV menggunakan Logical Extent (LE) yang secara internal dipetakan ke PE di disk fisik.
Physical Extent (PE)
Ini adalah blok terkecil yang bisa dialokasikan di LVM. Ukurannya ditentukan saat VG dibuat (default: 4MB) dan tidak bisa diubah setelahnya. PE yang lebih kecil memberikan alokasi lebih granular, tapi overhead metadata lebih besar.
3. Instalasi dan Persiapan
Instalasi Paket LVM
RHEL / CentOS / Rocky Linux / AlmaLinux:
sudo dnf install lvm2 -y
sudo systemctl enable --now lvm2-lvmpolld.service
Ubuntu / Debian:
sudo apt install lvm2 -y
Verifikasi instalasi:
lvmconfig --version
Melihat Disk yang Tersedia
Sebelum mulai, identifikasi disk yang akan digunakan:
lsblk
Contoh output:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
|--sda1 8:1 0 1G 0 part /boot
`--sda2 8:2 0 19G 0 part /
sdb 8:16 0 10G 0 disk <- disk kosong, siap dipakai
sdc 8:32 0 10G 0 disk <- disk kosong, siap dipakai
Perhatian: Pastikan disk yang akan kamu gunakan benar-benar kosong dan tidak berisi data penting. Perintah
pvcreateakan menghapus semua data di dalamnya!
4. Membuat LVM dari Nol
Mari kita buat LVM lengkap dari awal menggunakan /dev/sdb dan /dev/sdc.
Langkah 1 — Buat Physical Volume
sudo pvcreate /dev/sdb /dev/sdc
Output yang diharapkan:
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
Verifikasi:
sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 --- 10.00g 10.00g
/dev/sdc lvm2 --- 10.00g 10.00g
Langkah 2 — Buat Volume Group
Gabungkan kedua PV menjadi satu VG bernama vg_data:
sudo vgcreate vg_data /dev/sdb /dev/sdc
Output:
Volume group "vg_data" successfully created
Cek detail VG:
sudo vgdisplay vg_data
--- Volume group ---
VG Name vg_data
VG Size 19.99 GiB
PE Size 4.00 MiB
Total PE 5118
Free PE / Size 5118 / 19.99 GiB
Tips: Gunakan
vgcreate -s 8M vg_data /dev/sdbuntuk mengatur PE size menjadi 8MB jika kamu butuh granularitas lebih besar untuk volume besar.
Langkah 3 — Buat Logical Volume
Buat LV bernama lv_app dengan ukuran 15GB:
sudo lvcreate -L 15G -n lv_app vg_data
Atau gunakan semua sisa space:
sudo lvcreate -l 100%FREE -n lv_app vg_data
Verifikasi:
sudo lvs
LV VG Attr LSize Pool Origin Data%
lv_app vg_data -wi-a----- 15.00g
Langkah 4 — Format dengan Filesystem
Gunakan XFS (direkomendasikan untuk produksi):
sudo mkfs.xfs /dev/vg_data/lv_app
Atau ext4:
sudo mkfs.ext4 /dev/vg_data/lv_app
Kenapa XFS lebih direkomendasikan? XFS mendukung online grow (diperluas tanpa umount), performa lebih baik untuk file besar, dan menjadi default filesystem di RHEL 7 ke atas.
Langkah 5 — Mount dan Verifikasi
sudo mkdir -p /mnt/app
sudo mount /dev/vg_data/lv_app /mnt/app
df -hT /mnt/app
Output:
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_data-lv_app xfs 15G 32M 15G 1% /mnt/app
Langkah 6 — Buat Permanen di /etc/fstab
Agar mount otomatis saat reboot:
echo '/dev/vg_data/lv_app /mnt/app xfs defaults 0 0' | sudo tee -a /etc/fstab
Selalu test fstab sebelum reboot!
sudo mount -a
echo $? # harus menampilkan 0
Penting: Kesalahan di
/etc/fstabbisa menyebabkan server tidak bisa booting. Selalu jalankanmount -auntuk memverifikasi sebelum restart!
5. Memperluas (Extend) LVM
Ini adalah salah satu fitur paling berguna LVM — memperluas storage secara online tanpa downtime.
Skenario 1: Extend LV yang Sudah Ada
Tambah 5GB ke LV yang sudah ada (cara singkat dengan flag -r yang sekaligus resize filesystem):
sudo lvextend -L +5G -r /dev/vg_data/lv_app
Flag -r akan otomatis menjalankan xfs_growfs atau resize2fs tergantung jenis filesystem. Ini cara paling aman dan efisien.
Jika ingin manual (dua langkah):
# Langkah 1: Extend LV
sudo lvextend -L +5G /dev/vg_data/lv_app
# Langkah 2: Resize filesystem
sudo xfs_growfs /mnt/app # untuk XFS
# atau
sudo resize2fs /dev/vg_data/lv_app # untuk ext4
Skenario 2: VG Penuh — Tambah Disk Baru
Jika VG sudah habis, tambahkan disk baru:
# Inisialisasi disk baru sebagai PV
sudo pvcreate /dev/sdd
# Tambahkan ke VG yang sudah ada
sudo vgextend vg_data /dev/sdd
# Verifikasi free space bertambah
sudo vgs vg_data
# Sekarang extend LV seperti biasa
sudo lvextend -L +10G -r /dev/vg_data/lv_app
6. Memperkecil (Reduce) LVM
PERINGATAN KERAS: Operasi reduce bersifat destruktif. XFS tidak bisa diperkecil sama sekali. Hanya ext4 yang mendukung shrink. Selalu backup data sebelum melakukan ini!
Urutan yang benar untuk memperkecil LV ext4:
# Langkah 1: Umount filesystem (WAJIB)
sudo umount /mnt/app
# Langkah 2: Jalankan fsck untuk memastikan filesystem sehat
sudo e2fsck -f /dev/vg_data/lv_app
# Langkah 3: Kecilkan filesystem DULU (harus lebih kecil dari target LV)
sudo resize2fs /dev/vg_data/lv_app 8G
# Langkah 4: Baru kecilkan LV
sudo lvreduce -L 8G /dev/vg_data/lv_app
# Langkah 5: Mount kembali dan verifikasi
sudo mount /mnt/app
df -hT /mnt/app
Mengapa filesystem harus dikecilkan DULU? Jika kamu mengecilkan LV lebih dulu sebelum filesystem, data di ujung filesystem akan terpotong dan mengakibatkan korupsi data permanen. Urutan ini tidak boleh dibalik!
7. LVM Snapshot dan Rollback
Snapshot adalah salah satu fitur LVM paling powerful. Ia bekerja menggunakan teknik Copy-on-Write (CoW) — hanya blok yang berubah setelah snapshot dibuat yang disimpan, sehingga sangat efisien.
Kapan Menggunakan Snapshot?
- Sebelum upgrade OS atau update paket besar
- Sebelum perubahan konfigurasi database
- Sebagai titik restore untuk backup konsisten
- Saat testing perubahan di production
Membuat Snapshot
sudo lvcreate -L 5G -s -n lv_app_snap /dev/vg_data/lv_app
Penjelasan parameter:
– -L 5G — ukuran storage untuk menyimpan perubahan (bukan ukuran volume asli)
– -s — membuat snapshot
– -n lv_app_snap — nama snapshot
– /dev/vg_data/lv_app — LV sumber (origin)
Cek status snapshot:
sudo lvs /dev/vg_data/lv_app_snap
LV VG Attr LSize Origin Snap%
lv_app_snap vg_data swi-a-s--- 5.00g lv_app 0.00
Kolom Snap% menunjukkan seberapa penuh snapshot. Jika mencapai 100%, snapshot menjadi invalid!
Backup dari Snapshot
# Mount snapshot sebagai read-only
sudo mkdir /mnt/snap
sudo mount -o ro /dev/vg_data/lv_app_snap /mnt/snap
# Lakukan backup dari snapshot (non-disruptive)
sudo rsync -av /mnt/snap/ /backup/app/
# Unmount setelah selesai
sudo umount /mnt/snap
Rollback dengan Merge Snapshot
# Langkah 1: Unmount LV asli
sudo umount /mnt/app
# Langkah 2: Merge snapshot ke LV asli
sudo lvconvert --merge /dev/vg_data/lv_app_snap
# Langkah 3: Deaktivasi lalu aktifkan kembali untuk trigger merge
sudo lvchange -an /dev/vg_data/lv_app
sudo lvchange -ay /dev/vg_data/lv_app
# Langkah 4: Mount kembali dan verifikasi
sudo mount /mnt/app
df -hT /mnt/app
Setelah merge selesai, snapshot otomatis dihapus.
Hapus Snapshot (jika tidak diperlukan lagi)
sudo umount /mnt/snap 2>/dev/null
sudo lvremove -f /dev/vg_data/lv_app_snap
Tips Monitoring: Set cron job untuk memantau
Snap%. Jika melebihi 70%, segera perluas atau hapus snapshot yang tidak diperlukan. Snapshot yang penuh (100%) tidak bisa digunakan untuk rollback!
8. Troubleshooting Kasus Produksi
Berikut adalah kasus-kasus nyata yang paling sering ditemui di lingkungan produksi beserta cara mengatasinya.
Kasus 1: VG Tidak Terlihat Setelah Reboot
Gejala: Perintah vgs menampilkan output kosong, atau aplikasi tidak bisa jalan karena storage tidak tersedia.
Penyebab umum:
– LVM service tidak start otomatis
– Disk tidak terdeteksi kernel
– Filter di /etc/lvm/lvm.conf mengecualikan device
Solusi:
# Scan ulang semua PV dan aktifkan VG
sudo pvscan --cache -ay
# Aktifkan VG secara manual
sudo vgchange -ay vg_data
# Rebuild cache LVM
sudo vgscan
# Pastikan service LVM aktif dan start otomatis
sudo systemctl enable --now lvm2-lvmpolld.service
# Cek pesan kernel
dmesg | grep -i lvm
Kasus 2: LV Tidak Bisa Di-mount — Device Not Found
Gejala: mount: special device /dev/vg0/lv_data does not exist
Solusi:
# Cek apakah LV ada dan statusnya
sudo lvs -a
# Aktifkan LV
sudo lvchange -ay /dev/vg_data/lv_app
# Cek symlink device
ls -la /dev/vg_data/
ls -la /dev/mapper/
# Coba mount ulang
sudo mount /dev/vg_data/lv_app /mnt/app
Kasus 3: Filesystem Corruption
Gejala: Mount gagal dengan error “wrong fs type”, atau server melaporkan filesystem read-only secara tiba-tiba.
Solusi untuk ext4:
sudo umount /mnt/app
sudo e2fsck -f -y /dev/vg_data/lv_app
sudo mount /mnt/app
Solusi untuk XFS:
sudo umount /mnt/app
sudo xfs_repair /dev/vg_data/lv_app
# Jika gagal karena dirty log:
sudo xfs_repair -L /dev/vg_data/lv_app # gunakan hanya jika repair normal gagal
sudo mount /mnt/app
Setelah repair, cek kesehatan disk fisiknya:
smartctl -a /dev/sdb. Filesystem corruption sering kali gejala awal dari disk yang akan gagal!
Kasus 4: VG Penuh — Tidak Ada Free Extents
Gejala: Insufficient free extents (X) in volume group vg_data
Solusi:
sudo vgdisplay vg_data | grep "Free PE"
sudo pvcreate /dev/sdd
sudo vgextend vg_data /dev/sdd
sudo vgs vg_data
sudo lvextend -L +15G -r /dev/vg_data/lv_app
Kasus 5: UUID Salah / fstab Error
Gejala: Boot server tertahan lama atau gagal mount saat startup.
Solusi:
sudo blkid /dev/vg_data/lv_app
sudo vi /etc/fstab
sudo mount -a
echo $? # harus 0
sudo systemctl daemon-reload
Contoh entri fstab yang benar:
/dev/vg_data/lv_app /mnt/app xfs defaults,nofail 0 0
Tips: Untuk LVM, lebih disarankan menggunakan path
/dev/vg_name/lv_namedaripada UUID di fstab — lebih mudah dibaca dan tetap stabil. Tambahkan opsinofailuntuk server cloud/VM.
Kasus 6: PV Hilang Setelah Reboot
Gejala: vgs menampilkan VG sebagai “partial”, beberapa PV berstatus unknown device.
Solusi:
# Lihat semua PV termasuk yang missing
sudo pvs -a
# Cek apakah disk terdeteksi OS
lsblk
# Aktifkan VG meskipun ada PV yang missing (untuk recovery darurat)
sudo vgchange --partial -ay vg_data
# HATI-HATI: Hapus PV yang missing dari VG (data di PV itu HILANG)
sudo vgreduce --removemissing --force vg_data
Sebelum menjalankan
--removemissing, coba cari dulu penyebab disk tidak terdeteksi (cek kabel, slot, BIOS). Operasi ini tidak bisa dibatalkan.
Kasus 7: LVM Performance Lambat
Gejala: I/O wait tinggi, aplikasi lambat pada storage berbasis LVM.
Diagnosis dan solusi:
# Cek utilisasi I/O per disk
iostat -xz 2 5
# Lihat LV dipetakan ke PV mana
sudo lvs -o +devices
# Pindahkan data ke disk yang lebih cepat (misalnya SSD)
sudo pvcreate /dev/nvme0n1
sudo vgextend vg_data /dev/nvme0n1
sudo pvmove /dev/sdb /dev/nvme0n1
# Tuning read-ahead untuk workload sequential
echo 512 | sudo tee /sys/block/dm-0/queue/read_ahead_kb
9. Perintah Diagnostik Cepat
Gunakan perintah-perintah ini untuk diagnosis cepat saat ada masalah:
# Status lengkap semua komponen LVM sekaligus
sudo pvs && echo "---" && sudo vgs && echo "---" && sudo lvs
# Lihat semua disk, partisi, filesystem, dan UUID
lsblk -f
# Cek penggunaan disk untuk semua LV
df -hT | grep -E "mapper|vg"
# Lihat device mapper tree
sudo dmsetup ls --tree
# Lihat info detail satu LV beserta segment-nya
sudo lvdisplay -m /dev/vg_data/lv_app
# Semua UUID dan tipe filesystem
sudo blkid
# Log LVM dari kernel
dmesg | grep -i lvm | tail -20
# Log service LVM
journalctl -u lvm2-lvmpolld --no-pager | tail -30
# Cek kesehatan disk fisik
sudo smartctl -a /dev/sdb
Tabel Referensi Perintah LVM
| Perintah | Fungsi |
|---|---|
pvs -v |
Detail PV dengan peta alokasi PE |
vgs -v |
Detail VG dengan semua LV terdaftar |
lvs -a -o +devices |
Semua LV termasuk snapshot dan device mapping |
lvdisplay -m |
Peta segment LV ke PE fisik |
vgdisplay -v vg0 |
Info lengkap VG termasuk semua PV/LV |
dmsetup info /dev/dm-0 |
Info detail device mapper untuk debugging |
pvmove /dev/sdb |
Pindah semua data dari sebuah PV |
vgexport / vgimport |
Pindah VG antar server |
10. Best Practices Produksi
Gunakan XFS sebagai Default
XFS mendukung online grow tanpa umount, performa lebih baik untuk workload besar, dan menjadi default di RHEL/Rocky Linux. Kecuali ada alasan khusus, selalu gunakan XFS.
Sisakan 15–20% Space di VG
Jangan isi VG hingga 100%. Ruang kosong diperlukan untuk snapshot darurat, operasi pvmove, dan emergency extend jika LV tiba-tiba penuh.
# Monitor free PE secara berkala
sudo vgs -o +vg_free_count
Konvensi Penamaan yang Konsisten
Nama yang baik menyelamatkanmu saat krisis tengah malam:
VG: vg_prod, vg_dev, vg_staging
LV: lv_mysql, lv_app, lv_logs, lv_backup
Hindari nama generik seperti vg0, lv1 — tidak informatif sama sekali.
Ritual Snapshot Sebelum Perubahan Besar
# Sebelum upgrade atau perubahan konfigurasi besar
sudo lvcreate -L 5G -s -n lv_app_before_upgrade /dev/vg_data/lv_app
# Jika sukses: hapus snapshot
sudo lvremove -f /dev/vg_data/lv_app_before_upgrade
# Jika gagal: rollback
sudo lvconvert --merge /dev/vg_data/lv_app_before_upgrade
Selalu Test fstab
Aturan emas yang tidak boleh dilanggar:
sudo mount -a && echo "fstab OK" || echo "fstab ERROR - cek segera!"
Setup Monitoring Snapshot
# Cek Snap% setiap 15 menit via cron
*/15 * * * * lvs --noheadings -o snap_percent | awk '$1 > 70 {print "ALERT: Snapshot > 70%"}' | mail -s "LVM Alert" ops@yourcompany.com
Gunakan nofail untuk LV Non-Root
/dev/vg_data/lv_app /mnt/app xfs defaults,nofail 0 0
Opsi nofail mencegah server hang saat boot jika LV tidak tersedia.
Simpan Dokumentasi LVM Layout
sudo pvdisplay > /root/lvm-layout-$(date +%Y%m%d).txt
sudo vgdisplay >> /root/lvm-layout-$(date +%Y%m%d).txt
sudo lvdisplay >> /root/lvm-layout-$(date +%Y%m%d).txt
Sangat berharga saat disaster recovery ketika sistem tidak bisa booting.
Checklist RHCSA / RHCE
Perintah yang wajib dikuasai untuk ujian:
pvcreate— inisialisasi PVvgcreate -s— buat VG dengan PE size kustomlvcreate -Ldanlvcreate -l— buat LV berdasarkan size atau jumlah PEmkfs.xfsdanmkfs.ext4— format filesystemmount -adan/etc/fstab— mount permanenlvextend -r— extend LV sekaligus resize filesystemxfs_growfsdanresize2fs— grow filesystemlvcreate -s— buat snapshotlvconvert --merge— rollback via snapshotvgextenddanpvmove— tambah disk dan migrasi datavgreduce— hapus PV dari VGblkid— cek UUIDe2fsck -f— repair ext4
Tips ujian RHCSA: Kamu sering diminta membuat LV dengan jumlah PE tertentu (
-l 32) bukan ukuran. Ingat rumusnya: LV size = PE count x PE size. Cek PE size denganvgdisplay | grep "PE Size".
Kesimpulan
LVM adalah fondasi dari storage management di Linux modern. Dengan memahami konsep PV, VG, dan LV, kamu bisa mengelola storage dengan fleksibel tanpa downtime, memperluas kapasitas server produksi secara online, membuat snapshot untuk backup dan rollback cepat, serta mendiagnosis dan menyelesaikan masalah storage dengan percaya diri.
Skill ini sangat relevan untuk persiapan RHCSA/RHCE, interview DevOps/SRE, maupun pekerjaan sehari-hari sebagai Linux Administrator.
Langkah selanjutnya yang bisa kamu pelajari: LVM Thin Provisioning, LVM RAID (mirroring), dan Stratis (next-generation storage management di RHEL 9+).
Referensi
Tutorial ini berguna untukmu? Share ke rekan-rekan Linux admin lainnya! Punya pertanyaan atau kasus troubleshooting yang belum tercakup? Tulis di kolom komentar di bawah.
Tags: linux lvm storage devops rhcsa rhce sysadmin linux-admin tutorial-indonesia