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.
lvextendhanya memperbesar LV; filesystem menyusul lewatresize2fsatauxfs_growfs.- ext4 bisa diperbesar saat mounted; XFS juga online, tapi filesystem wajib mounted.
lvextend -rmemakaifsadm, paket yang tidak tersedia di Ubuntu 24.04.vgcfgbackupmenyimpan metadata ke/etc/lvm/backupsebelum 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%danMeta%.
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.
| Lapis | Diperbesar oleh | Diperiksa dengan | Gejala kalau lupa |
|---|---|---|---|
| Block device (LV/partition) | lvextend, growpart, pvresize | lsblk, lvs | lvs sudah besar, df tetap |
| Filesystem (ext4/XFS) | resize2fs, xfs_growfs | df -hT | df 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.
| Objek | Arti | Perintah |
|---|---|---|
| PV (Physical Volume) | Blok device yang sudah diberi label LVM | pvcreate, pvs |
| VG (Volume Group) | Kumpulan physical extents milik beberapa PV | vgcreate, vgs |
| LV (Logical Volume) | Potongan VG yang muncul sebagai blok device | lvcreate, lvs |
| PE (Physical Extent) | Satuan alokasi, default 4 MiB | vgs -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
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/dataKeluaran vgs untuk VG dengan dua PV menunjukkan kapasitas gabungan dan sisa yang masih bisa dipakai:
VG #PV #LV VSize VFree
vg0 2 0 7.99g 7.99gMenambah 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.
sudo pvcreate /dev/sdd1
sudo vgextend vg0 /dev/sdd1
sudo pvs -o pv_name,vg_name,pv_size,pv_free --units gKeluarannya 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:
sudo lvextend -L 40G /dev/vg0/dataLVM 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.
$ 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/labSekarang filesystem-nya yang menyusul, dan ext4 bisa diperbesar tanpa unmount:
sudo resize2fs /dev/loop24resize2fs 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/labSebelum eksekusi, pakai dry run untuk melihat rencana tanpa mengubah metadata:
sudo lvextend -t -L 40G /dev/vg0/dataPerintah 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
| Filesystem | Perbesar online | Persyaratan | Mengecilkan |
|---|---|---|---|
| ext4 | Ya | Mounted cukup | Offline saja, resize2fs ke ukuran lebih kecil |
| XFS | Ya | Wajib mounted, pakai xfs_growfs /mnt/data | Tidak didukung |
| Btrfs | Ya | btrfs filesystem resize | Ya |
[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.
# ukuran disk sudah diperbesar dari panel cloud
sudo partprobe /dev/sdb || true
sudo pvresize /dev/sdb1
sudo lvextend -r -l +100%FREE /dev/vg0/datapvresize(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.
sudo vgcfgbackup -f /root/vg0-backup.vgcfg vg0
sudo vgs -o mda_free vg0Nilai 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.
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_percentOver-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:
sudo umount /mnt/data
sudo e2fsck -f /dev/vg0/data
sudo lvreduce --size 15G --resizefs /dev/vg0/data
sudo mount /mnt/dataSelalu siapkan backup tervalidasi sebelum menjalankan lvreduce. Untuk XFS, opsi ini tidak ada karena filesystem tidak mendukung menyusut.
Troubleshooting Cepat
| Gejala | Penyebab | Tindakan |
|---|---|---|
lvs besar, df tetap | Filesystem belum di-resize | resize2fs atau xfs_growfs |
Filesystem check failed. saat -r | LV tanpa filesystem atau fsadm hilang | Pasang filesystem, resize manual |
Resize2fs: Device or resource busy | Filesystem sedang dipakai | lvextend -t dulu, cek mount |
xfs_growfs menolak jalan | XFS belum mounted | Mount dulu, lalu jalankan ulang |
/dev/vg0/lv tidak ada | Node LVM belum terbentuk | dmsetup mknodes, cek /dev/mapper |
Data% thin pool 100 | Over-provisioning | lvextend 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.