Partisi dan LVM

Tata letak disk, partisi, dan posisi LVM.

Daftar isi

Topik ini membahas tata letak penyimpanan dari sisi perangkat, yaitu bagaimana sebuah disk dibagi menjadi partisi, bagaimana nama perangkat dibentuk, dan di mana LVM berada di antara partisi dan sistem berkas. Pembacaan peta partisi dilakukan dari keluaran lsblk dan berkas /proc/partitions yang nyata pada container latihan. Perintah pemartisian dan pemformatan tidak dijalankan di sini karena membutuhkan hak root dan disk yang dapat disunting, sehingga bloknya hanya ditampilkan sebagai gambaran.

Disk, partisi, dan nama perangkatnya#

Partisi (partition) adalah pembagian logis atas sebuah disk yang diperlakukan kernel sebagai perangkat blok tersendiri. Satu disk dapat berisi beberapa partisi, dan setiap partisi menerima nama perangkatnya sendiri di bawah /dev. Kernel mengenali disk dan partisinya melalui sepasang nomor. Nomor mayor menunjuk driver yang menangani jenis perangkat tersebut, sedangkan nomor minor menunjuk perangkat spesifiknya.

Pola penamaan mengikuti jenis pengendali disk, bukan pilihan bebas.

Pola namaContohJenis disk
/dev/sdXN/dev/sdb1Disk SATA, SCSI, atau USB, dengan huruf sda, sdb, sdc
/dev/vdXN/dev/vda1Disk virtio pada mesin virtual
/dev/nvme0n1pN/dev/nvme0n1p1SSD NVMe
/dev/mmcblk0pN/dev/mmcblk0p2Kartu SD dan memori eMMC

Huruf pada pola sd dan vd menunjuk urutan disk, sedangkan angka di belakangnya menunjuk urutan partisi, sehingga sdb1 adalah partisi pertama pada disk kedua. Pola NVMe lebih panjang karena memuat tiga lapis nomor, yaitu nvme0 untuk pengendali, n1 untuk namespace atau ruang penyimpanan yang dikelola satu pengendali, dan p1 untuk partisi. Perhatikan bahwa angka partisi selalu mengikuti huruf p pada pola NVMe dan mmcblk, karena nama disknya sendiri sudah diakhiri angka.

Bentuk paling ringkas untuk membaca hubungan tersebut adalah lsblk dengan pemilihan kolom.

bash
# pohon perangkat dengan kolom nama, ukuran, dan tipe
lsblk -o NAME,SIZE,TYPE
text Keluaran
NAME       SIZE TYPE
zram0        0B disk
vda         10G disk
pmem0      384M disk
└─pmem0p1  383M part

Keluaran ini menampilkan satu pasangan disk dan partisi yang nyata. Baris pmem0p1 berlekuk di bawah pmem0 dan bertipe part, sehingga terbaca sebagai partisi pertama milik disk pmem0. Perangkat zram0 dan vda tidak memiliki partisi pada container ini, sehingga keduanya tampil sebagai disk polos tanpa anak.

Membaca peta partisi dari kernel#

Kernel merangkum seluruh perangkat blok beserta partisinya dalam berkas virtual /proc/partitions. Kolom major dan minor menunjuk perangkat yang sama dengan kolom MAJ:MIN pada lsblk, sedangkan kolom #blocks menyatakan ukuran dalam satuan blok 1 KiB. Berkas ini membantu ketika keluaran lsblk perlu diproses oleh skrip, karena bentuknya tabel polos tanpa pohon.

bash
# peta perangkat blok menurut kernel
cat /proc/partitions
text Keluaran
major minor  #blocks  name

 254        0   10485760 vda
 259        0     393216 pmem0
 259        1     392192 pmem0p1

Angkanya dapat dihitung ulang dengan mudah. Nilai 10485760 blok dikali 1 KiB menghasilkan 10 GiB, sesuai ukuran vda pada lsblk. Selisih pmem0 terhadap pmem0p1 adalah 1024 blok, yaitu 1 MiB di awal disk yang lazim disisakan untuk tabel partisi. Kolom name menegaskan pola penamaan yang sama, yaitu partisi pmem0p1 selalu tampil sebagai turunan langsung dari disk pmem0.

Memformat dan memasang partisi#

Partisi yang baru dibuat masih kosong sampai sebuah sistem berkas dituliskan ke dalamnya. Perintah mkfs.ext4 menuliskan struktur sistem berkas ext4 ke sebuah partisi, dan setelah itu partisi dapat dipasang ke satu titik kait dengan mount. Urutan kerjanya bergerak dari memeriksa disk, membuat partisi, memformat, sampai memasang.

bash
# tidak-dijalankan
# fdisk memerlukan hak root dan disk yang benar-benar dapat disunting
sudo fdisk -l
bash
# tidak-dijalankan
# memformat dan memasang partisi memerlukan hak root serta disk nyata
sudo mkfs.ext4 /dev/sdb1
sudo mkdir -p /mnt/data
sudo mount /dev/sdb1 /mnt/data

Perintah fdisk -l dalam rangkaian pertama hanya membaca dan menampilkan tabel partisi seluruh disk, sedangkan mkfs.ext4 dalam rangkaian kedua menulis data baru ke sebuah partisi. Keduanya ditandai tidak-dijalankan karena container latihan tidak memberikan hak root, dan perintah yang menulis ke perangkat memang tidak boleh dicoba sembarangan. Pada mesin latihan milik sendiri, urutan yang sama dijalankan dengan hati-hati setelah nama perangkat diperiksa dua kali.

Jenis sistem berkasnya menyesuaikan tujuan partisi, misalnya ext4 untuk partisi Linux umum, xfs untuk data berkapasitas besar, dan vfat untuk partisi boot yang perlu dibaca lebih dari satu sistem operasi. Struktur yang baru ditulis dapat diverifikasi dengan lsblk -f, yang menampilkan kolom FSTYPE beserta label dan UUID-nya.

Posisi LVM#

LVM (Logical Volume Manager) menambahkan satu lapisan abstraksi di antara partisi dan sistem berkas. Partisi yang dipilih ditetapkan menjadi physical volume (PV), lalu kumpulan PV digabungkan ke dalam satu volume group (VG), dan kapasitas VG dipotong menjadi logical volume (LV) yang diperlakukan seperti partisi biasa. Sistem berkas kemudian dibuat di atas LV, bukan langsung di atas partisi.

Manfaat lapisan ini muncul ketika kebutuhan berubah. LV dapat diperbesar dengan lvextend tanpa memindahkan data, kapasitas VG dapat ditambah dari disk baru dengan vgextend, dan satu LV bahkan dapat mengambil ruang dari beberapa disk sekaligus. Nama perangkat LV berbentuk /dev/vg-data/lv-1, dan perangkat yang sama juga terdaftar di direktori /dev/mapper/. Karena itu, sistem berkas di atas LVM mudah dikenali pada keluaran df dari awalan jalur /dev/mapper/.

bash
# tidak-dijalankan
# LVM memerlukan hak root, paket lvm2, dan disk nyata
sudo pvcreate /dev/sdb1 /dev/sdc1
sudo vgcreate vg-data /dev/sdb1 /dev/sdc1
sudo lvcreate -n lv-1 -L 10G vg-data

Rantai lengkap dari disk mentah sampai titik kait dirangkum diagram berikut, mulai dari pembagian disk menjadi partisi, pembentukan volume logis oleh LVM, penulisan sistem berkas, sampai pemasangan ke titik kait.

Rantai dari disk sampai titik kaitDisk/dev/sdbPartisi/dev/sdb1Volume logis/dev/vg-data/lv-1Sistem berkasext4Titik kait/mnt/datapartisiLVMmkfs.ext4mount
Rantai penyimpanan dari disk sampai titik kait

Kesalahan umum#

Tiga kesalahan berikut berdampak besar dan patut diwaspadai sejak awal.

  • Menjalankan mkfs pada perangkat yang salah. Perintah itu menghapus seluruh isi perangkat tujuannya tanpa konfirmasi, sehingga nama perangkat diperiksa ulang dengan lsblk sebelum dieksekusi. Partisi yang dituju, misalnya /dev/sdb1, berbeda dari disk utuhnya, yaitu /dev/sdb.
  • Memasang partisi yang belum diformat. mount menolak dengan pesan wrong fs type, bad option karena struktur sistem berkasnya belum ada. Buat sistem berkasnya terlebih dahulu dengan mkfs.ext4.
  • Mengira disk baru langsung menambah ruang VG. Disk yang baru terpasang masih perlu dijadikan PV dengan pvcreate, lalu digabungkan dengan vgextend. Kapasitas VG yang bertambah itu baru dipakai oleh LV setelah LV diperbesar dengan lvextend.

Ringkasan#

  • Partisi membagi disk menjadi perangkat blok tersendiri dengan pola nama yang mengikuti jenis pengendalinya, seperti sdb1, vda1, dan nvme0n1p1.
  • Peta partisi terbaca dari /proc/partitions dengan satuan blok 1 KiB, atau dari lsblk dalam bentuk pohon.
  • LVM berada di antara partisi dan sistem berkas, dengan rantai PV, VG, dan LV, sehingga kapasitas dapat digabung dan diperbesar tanpa memindahkan data.

Referensi#