btrfs membawa Copy-on-Write, checksum, subvolume, dan snapshot ke kernel Linux. Episode ini membahas konsep COW dan checksum btrfs, lalu praktik dengan btrfs subvolume, snapshot, send/receive, balance, device management, check, dan scrub.

Sekarang kita masuk generasi modern: btrfs — filesystem Copy-on-Write (COW) bawaan kernel Linux. Berbeda dari ext4 dan XFS yang menulis in-place dengan journal, btrfs menulis data baru di blok baru dan mengubah pointer secara atomik. Konsekuensinya besar: snapshot instan, rollback cepat, checksum seluruh data, dan kompresi transparan.
Keunggulan btrfs bukan satu fitur, melainkan kombinasi: subvolume untuk mengorganisasi data, snapshot untuk perlindungan, send/receive untuk replikasi, dan balance untuk mengelola alokasi blok. Di episode ini kita bahas konsepnya lalu praktik semuanya di lab.
Sebelum lanjut, pastikan toolchain btrfs-progs terinstall dan disk loopback tersedia. Perintah btrfs adalah gerbang utama ke semua operasi btrfs.
Saat file dimodifikasi, btrfs tidak menimpa blok lama. Data baru ditulis ke blok baru, lalu metadata diperbarui menunjuk ke blok baru. Blok lama tetap ada sampai tidak dirujuk siapa pun — inilah dasar snapshot. Setiap blok data juga menyimpan checksum (CRC32C default, atau xxhash). Saat dibaca, checksum diverifikasi; jika gagal, btrfs mencoba memulihkan dari salinan lain (jika ada) atau melaporkan error.
Subvolume adalah bagian filesystem yang punya namespace sendiri, seperti direktori tingkat tinggi yang bisa di-mount mandiri. Snapshot adalah copy-on-write dari subvolume — pembuatannya hampir instan karena tidak menyalin data, hanya menunjuk ke blok yang sama.
Perbedaan penting: snapshot btrfs bisa bersifat read-write maupun read-only. Snapshot read-only digunakan sebagai titik restore dan target send/receive. Snapshot bukan backup — jika blok asli rusak (misalnya bad sector), snapshot ikut rusak karena berbagi blok.
Format disk loopback:
sudo losetup -f /tmp/lab.img
sudo mkfs.btrfs -L lab-btrfs /dev/loop0Untuk mode multi-device, berikan beberapa perangkat sekaligus:
sudo mkfs.btrfs -m raid1 -d raid1 /dev/loop0 /dev/loop1-m raid1 mengatur mode alokasi metadata, -d raid1 mengatur data. Setiap perangkat bisa memiliki ukuran berbeda — btrfs memakai ukuran perangkat terkecil sebagai acuan kapasitas untuk RAID1. Mode RAID yang didukung: single, dup, raid0, raid1, raid10, raid1c3, dan raid1c4.
Mount filesystem:
sudo mkdir -p /mnt/lab
sudo mount /dev/loop0 /mnt/lab
sudo btrfs subvolume list /mnt/labbtrfs membuat subvolume ID 5 (<FS_TREE>) sebagai root, lalu subvolume ID 257. Cek informasi lengkap dengan:
sudo btrfs filesystem show /dev/loop0
sudo btrfs filesystem usage /mnt/labbtrfs filesystem usage menampilkan alokasi metadata vs data secara rinci.
sudo btrfs subvolume create /mnt/lab/data
sudo btrfs subvolume list /mnt/lab
sudo btrfs subvolume delete /mnt/lab/dataSubvolume yang dihapus hanya melepas pointer; ruangnya dibebaskan kemudian oleh proses background (dan dijamin setelah semua referensi COW dilepas).
sudo btrfs subvolume snapshot /mnt/lab/data /mnt/lab/@snap-data
sudo btrfs subvolume snapshot -r /mnt/lab/data /mnt/lab/@ro-snap
sudo btrfs subvolume delete /mnt/lab/data
sudo btrfs subvolume snapshot /mnt/lab/@ro-snap /mnt/lab/data-r membuat snapshot read-only yang aman sebagai titik restore. Pola rollback di atas adalah teknik standar untuk mengembalikan sistem ke kondisi sebelumnya.
Balance mendistribusikan ulang data dan metadata melintasi perangkat, misalnya setelah menambah disk:
sudo btrfs device add /dev/loop2 /mnt/lab
sudo btrfs balance start -dusage=60 /mnt/lab-dusage=60 memindahkan blok data yang terpakai di bawah 60 persen, sehingga ruang kosong terkumpul di perangkat baru. Balance bisa dibatasi dengan -dlimit=, -musage=, dan filter profil.
Kelola anggota filesystem multi-device:
sudo btrfs device stats /mnt/lab
sudo btrfs device usage /mnt/labsudo btrfs scrub start /mnt/lab
sudo btrfs scrub status /mnt/labscrub membaca semua data dan metadata, memverifikasi checksum, dan memperbaiki blok dari salinan lain jika memungkinkan. btrfs check --repair adalah alat perbaikan terakhir dan hanya boleh dijalankan pada filesystem unmounted — kita bahas lebih dalam di episode 11.
Warning
btrfs check --repair dianggap berbahaya pada kernel baru karena bisa menimbulkan korupsi tambahan. Selalu backup dulu dan utamakan restore dari snapshot bila memungkinkan.
btrfs send menghasilkan stream perubahan yang bisa dikirim ke filesystem lain (lokal atau remote melalui ssh) dan diaplikasikan dengan btrfs receive:
sudo btrfs send /mnt/lab/@ro-snap | ssh remote "btrfs receive /mnt/backup"Stream hanya boleh berasal dari snapshot read-only. Setelah berjalan, verifikasi hasil di sisi remote. Kombinasi send/receive ini adalah dasar replikasi dan backup offsite btrfs — kita akan bahas pola incremental di episode 9.
btrfs mengubah cara kalian berpikir tentang filesystem: alih-alih menimpa data, semuanya adalah pointer yang bisa ditunjuk ulang. Subvolume mengorganisasi data, snapshot memberi perlindungan instan, send/receive menangani replikasi, dan scrub menjaga integritas. Fitur ini datang dengan biaya: operasi COW lebih kompleks dan butuh disiplin pengelolaan.
Inti yang harus dibawa pulang:
btrfs balance mendistribusikan ulang alokasi antar perangkat.Di episode 6 selanjutnya kita membahas ZFS: pool, dataset, dan snapshot — filesystem sekaligus volume manager yang menggabungkan RAID, checksum, dan snapshot dalam satu entitas. Kalian akan membuat pool, dataset, snapshot, dan melakukan send/receive dengan OpenZFS.