Home / Linux, Systems, and Infrastructure / LVM: Menambah …

LVM: Menambah Kapasitas Disk di Linux dan Memperbesar Filesystem

Disk penuh adalah salah satu insiden yang paling sering dialami sysadmin di server produksi. Kabar baiknya, LVM dan filesystem Linux modern memungkinkan kapasitas ditambah tanpa melepas disk, tanpa unmount berkepanjangan, dan tanpa reinstall.

Ringkasan

  • Kapasitas punya dua lapis: block device dan filesystem; keduanya harus diperbesar.
  • LVM memberi tiga objek: PV, VG, dan LV, dengan PE 4 MiB sebagai satuan alokasi.
  • lvextend hanya memperbesar LV; filesystem menyusul lewat resize2fs atau xfs_growfs.
  • ext4 bisa diperbesar saat mounted; XFS juga online, tapi filesystem wajib mounted.
  • lvextend -r memakai fsadm, paket yang tidak tersedia di Ubuntu 24.04.
  • vgcfgbackup menyimpan metadata ke /etc/lvm/backup sebelum setiap perubahan.
  • Shrink memusnahkan data di area yang dipangkas; ext4 butuh offline, XFS tidak bisa menyusut.
  • Thin provisioning hemat biaya, tapi over-provisioning butuh pemantauan Data% dan Meta%.

Dua Lapis yang Sering Tertinggal Satu

Hampir semua keluhan “tidak bisa tambah disk” berakar pada satu anggapan keliru: memperbesar LV dianggap sama dengan memperbesar ruang pakai. Padahal ada dua lapis yang berdiri sendiri.

LapisDiperbesar olehDiperiksa denganGejala kalau lupa
Block device (LV/partition)lvextend, growpart, pvresizelsblk, lvslvs sudah besar, df tetap
Filesystem (ext4/XFS)resize2fs, xfs_growfsdf -hTdf masih angka lama

Urutan wajib: perbesar LV dulu, baru perbesar filesystem. Manual resize2fs menegaskan bahwa tool ini tidak mengubah ukuran partisi atau LV, hanya memanfaatkan ruang yang sudah tersedia.

Arsitektur LVM: PV, VG, LV, dan PE

LVM menyisipkan lapisan virtualisasi di atas blok device. Pemahaman tiga objek ini menentukan apakah langkah troubleshoot Anda masuk akal.

ObjekArtiPerintah
PV (Physical Volume)Blok device yang sudah diberi label LVMpvcreate, pvs
VG (Volume Group)Kumpulan physical extents milik beberapa PVvgcreate, vgs
LV (Logical Volume)Potongan VG yang muncul sebagai blok devicelvcreate, lvs
PE (Physical Extent)Satuan alokasi, default 4 MiBvgs -o vg_extent_size

Dua detail yang sering membuat orang salah hitung: area metadata PV dimulai di awal device, sedangkan PE pertama secara default ada pada offset 1 MiB, dan ukuran area metadata tidak bisa ditambah setelah pvcreate (dokumentasi pvcreate). Keduanya bisa dicek dengan pvs -o pe_start,mda_size.

Semua perintah di artikel ini diverifikasi di Ubuntu 24.04 dengan LVM 2.03.16, e2fsprogs 1.47.0, dan xfsprogs 6.6.0. Keluaran di bawah diambil dari lingkungan uji terisolasi dengan loop device, jadi ukuran dan nama device akan berbeda di mesin Anda. Nama paket dan ketersediaan fsadm juga berbeda di RHEL dan Fedora.

Menyiapkan PV, VG, dan LV Pertama

bash
sudo pvcreate /dev/sdb1 /dev/sdc1
sudo vgcreate vg0 /dev/sdb1 /dev/sdc1
sudo lvcreate -n data -L 20G vg0
sudo mkfs.ext4 /dev/vg0/data
sudo mkdir -p /mnt/data && sudo mount /dev/vg0/data /mnt/data

Keluaran vgs untuk VG dengan dua PV menunjukkan kapasitas gabungan dan sisa yang masih bisa dipakai:

text
  VG  #PV #LV VSize VFree
  vg0   2   0 7.99g 7.99g

Menambah Disk Baru ke VG yang Sudah Ada

Menambah PV ke VG lama cukup dua langkah: pvcreate pada device baru, lalu vgextend. Tidak ada downtime karena LV yang sedang mounted tidak disentuh.

bash
sudo pvcreate /dev/sdd1
sudo vgextend vg0 /dev/sdd1
sudo pvs -o pv_name,vg_name,pv_size,pv_free --units g

Keluarannya menunjukkan PV baru sudah bergabung, dan vg_free bertambah. Prefix + atau %FREE membuat LVM membaca ukuran relatif, bukan absolut — [lvextend(8)](https://man7.org/linux/man-pages/man8/lvextend.8.html) menyatakan satuan input selalu basis dua, sehingga -L 1G berarti 1 GiB.

Memperbesar LV: Dua Langkah yang Sering Terlupakan

Ini inti artikel. Perbesar LV dulu:

bash
sudo lvextend -L 40G /dev/vg0/data

LVM melaporkan LV sudah 40 GiB, tetapi filesystem di atasnya masih sebesar 20 GiB. Transkrip berikut berasal dari pengujian: LV 512 MiB diperbesar ke 1 GiB, device di dalamnya terlihat sebagai /dev/loop24 di lingkungan uji, lalu filesystem-nya di-resize online.

text
$ lvextend -L 1G /dev/vg0/data
  Size of logical volume vg0/data changed from 512.00 MiB (128 extents) to 1.00 GiB (256 extents).
  Logical volume vg0/data successfully resized.

$ df -hT /mnt/lab
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/loop24    ext4  488M   51M  402M  12% /mnt/lab

Sekarang filesystem-nya yang menyusul, dan ext4 bisa diperbesar tanpa unmount:

bash
sudo resize2fs /dev/loop24
text
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/loop24 is mounted on /mnt/lab; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/loop24 is now 393216 (4k) blocks long.

$ df -hT /mnt/lab
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/loop24    ext4  1.5G   51M  1.4G   4% /mnt/lab

Sebelum eksekusi, pakai dry run untuk melihat rencana tanpa mengubah metadata:

bash
sudo lvextend -t -L 40G /dev/vg0/data

Perintah mode -t mencetak “TEST MODE: Metadata will NOT be updated” dan keluar dengan status 0, sehingga aman dijalankan di server produksi.

Online vs Offline: ext4 dan XFS Berbeda

FilesystemPerbesar onlinePersyaratanMengecilkan
ext4YaMounted cukupOffline saja, resize2fs ke ukuran lebih kecil
XFSYaWajib mounted, pakai xfs_growfs /mnt/dataTidak didukung
BtrfsYabtrfs filesystem resizeYa

[xfs_growfs(8)](https://man7.org/linux/man-pages/man8/xfs_growfs.8.html) hanya bisa dijalankan pada filesystem yang sedang mounted, dan XFS tidak punya opsi menyusutkan filesystem. Saat diuji, xfs_growfs /mnt/datamencetak "data blocks changed from 393216 to 655360" dandflangsung ikut naik. Sebaliknya,resize2fs` menolak shrink online dengan pesan “On-line shrinking not supported”.

Peran -r dan Ketiadaan fsadm

lvextend --resizefs terlihat solusi satu perintah, tapi lvextend(8) menyatakan opsi ini menyerahkan resize ke fsadm(8). Di RHEL dan Fedora, fsadm ikut paket lvm2; di Debian dan Ubuntu paket fsadm tidak ada di repositori, termasuk Ubuntu 24.04 yang dipakai pada lingkungan pengujian artikel ini. Akibatnya, andalkan dua perintah manual di atas, atau pasang fsadm dari sumber resmi distribusi.

Kalau lvextend -r gagal dengan pesan “Filesystem check failed.”, periksa dua hal: LV belum punya filesystem sama sekali, atau fsadm tidak tersedia.

Memperbesar PV di Server Virtual

Di VM dan cloud, disk virtual bisa diperbesar dari luar sistem, lalu perangkatnya perlu di-refresh agar kernel melihat ukuran baru. Setelah itu, PV masih menyimpan ukuran lama sampai pvresize dipanggil.

bash
# ukuran disk sudah diperbesar dari panel cloud
sudo partprobe /dev/sdb || true
sudo pvresize /dev/sdb1
sudo lvextend -r -l +100%FREE /dev/vg0/data

pvresize(8) menegaskan bahwa PV yang sudah menjadi anggota VG dan memiliki LV aktif tetap bisa di-resize. Urutannya tetap: perbarui PV, perbesar LV, perbesar filesystem.

Cadangkan Metadata Sebelum Mengubah Apa Pun

LVM menyimpan metadata VG sebagai teks di dua tempat pada setiap PV, dan salinan otomatis ada di direktori backup. Pastikan backup aktif sebelum eksperimen apa pun.

bash
sudo vgcfgbackup -f /root/vg0-backup.vgcfg vg0
sudo vgs -o mda_free vg0

Nilai default backup_dir di lvm.conf adalah /etc/lvm/backup, sedangkan arsip konfigurasi berada di /etc/lvm/archive. Jangan abaikan mda_free: area metadata tak bisa diperbesar tanpa membuat ulang PV.

Thin Provisioning dan Snapshot

Thin provisioning membuat LV yang ukuran virtualnya melebihi kapasitas fisik, karena alokasi baru diberikan saat data benar-benar ditulis (dokumentasi RHEL 9). Pool fisik dan LV virtual dipisahkan, sehingga total ukuran virtual boleh melebihi pool.

bash
sudo lvcreate --type thin-pool -n thinpool -L 100G vg0
sudo lvcreate --type thin -V 50G --thinpool vg0/thinpool -n appdata
sudo lvs -o lv_name,lv_size,pool_lv,data_percent,metadata_percent

Over-provisioning adalah jebakan terbesar: pantau Data% dan Meta%, dan siapkan langkah memperbesar pool sebelum pool penuh. Snapshot LVM bekerja dengan copy-on-write: snapshot mulai kosong dan hanya tumbuh ketika ada perubahan pada LV asal, jadi snapshot bukan backup penuh untuk data besar.

Menyusutkan Volume: Langkah Paling Berisiko

Shrink memangkas area yang masih berisi data. Dokumentasi RHEL memperingatkan dengan tegas: data di area yang dipangkas akan hilang, dan filesystem harus diperkecil lebih dulu. Alur yang aman untuk ext4:

bash
sudo umount /mnt/data
sudo e2fsck -f /dev/vg0/data
sudo lvreduce --size 15G --resizefs /dev/vg0/data
sudo mount /mnt/data

Selalu siapkan backup tervalidasi sebelum menjalankan lvreduce. Untuk XFS, opsi ini tidak ada karena filesystem tidak mendukung menyusut.

Troubleshooting Cepat

GejalaPenyebabTindakan
lvs besar, df tetapFilesystem belum di-resizeresize2fs atau xfs_growfs
Filesystem check failed. saat -rLV tanpa filesystem atau fsadm hilangPasang filesystem, resize manual
Resize2fs: Device or resource busyFilesystem sedang dipakailvextend -t dulu, cek mount
xfs_growfs menolak jalanXFS belum mountedMount dulu, lalu jalankan ulang
/dev/vg0/lv tidak adaNode LVM belum terbentukdmsetup mknodes, cek /dev/mapper
Data% thin pool 100Over-provisioninglvextend pool, kurangi thin LV

Kesimpulan

Menambah kapasitas di Linux bukan satu perintah, melainkan dua lapis yang harus dikerjakan berurutan: LV lalu filesystem. Kuasai lvs untuk membaca keadaan, pakai lvextend -t untuk menguji, dan siapkan vgcfgbackup sebelum menyentuh metadata. Thin provisioning dan snapshot memang hemat, tapi keduanya memindahkan risiko ke pemantauan.

Seluruh perintah di artikel ini diuji di lingkungan Ubuntu 24.04 terisolasi (LVM 2.03.16, e2fsprogs 1.47.0, xfsprogs 6.6.0) pada kernel 7.0.0, memakai loop device. Sebelum dijalankan di server produksi, pastikan Anda memakai hak akses root dan sudah memiliki backup tervalidasi.