Btrfs (B-tree File System) adalah sistem berkas copy-on-write (CoW) yang dikembangkan oleh Oracle sejak tahun 2007.
Fitur Utama Btrfs meliputi:
-
Copy-on-Write (CoW) Setiap perubahan data tidak langsung menimpa data lama, melainkan membuat salinan baru. Fitur ini memungkinkan penggunaan snapshot dan rollback.
-
Subvolume dan Snapshot Mendukung pembuatan subvolume yang ringan serta snapshot instan untuk keperluan backup dan rollback.
-
RAID Bawaan Mendukung RAID 0, 1, 5, 6, dan 10 tanpa memerlukan perangkat lunak tambahan.
-
Kompresi Transparan Mendukung kompresi data dengan algoritma zlib, LZO, dan zstd.
-
Self-Healing Memiliki mekanisme pemeriksaan dan perbaikan otomatis terhadap kerusakan data (jika menggunakan redundansi).
-
Dynamic Inode Allocation Tidak memiliki batas jumlah inode tetap seperti pada sistem berkas tradisional (misalnya Ext4).
Membuat File System Btrfs #
Instalasi Paket #
Instal paket yang dibutuhkan:
apt -y install btrfs-progs libbtrfsutil
Identifikasi Disk #
Gunakan salah satu perintah berikut untuk melihat disk yang tersedia:
lsblk
atau
fdisk -l
Membuat File System Btrfs #
Anda dapat langsung membuat file system Btrfs pada sebuah disk, misalnya /dev/sdX:
mkfs.btrfs /dev/sdX
Atau, Anda dapat membagi disk menjadi beberapa partisi, misalnya:
/dev/sdX1→ Ext4 (log dan data sistem)/dev/sdX2→ Btrfs (data aplikasi)
Untuk membuat file system Ext4.
mkfs.ext4 /dev/sdX1
Untuk membuat file system Btrfs.
mkfs.btrfs /dev/sdX2
Mount Partisi #
Buat direktori mount point:
mkdir -p /mnt/logs
mkdir -p /mnt/apps
Mount partisi Ext4 dan Btrfs:
mount /dev/sdX1 /mnt/logs
mount /dev/sdX2 /mnt/apps
(Opsional) Tambahkan ke /etc/fstab
#
/dev/sdX1 /mnt/logs ext4 defaults 0 2
/dev/sdX2 /mnt/apps btrfs defaults 0 2
Membuat dan Mengelola Subvolume #
Subvolume adalah fitur khas Btrfs yang memungkinkan pembuatan sistem berkas logis di dalam satu partisi. Subvolume sering digunakan untuk memisahkan direktori penting seperti /home, /var, dan snapshot.
Mount Partisi Btrfs #
mount /dev/sdXn /mnt
Membuat Subvolume Root #
btrfs subvolume create /mnt/@
(Opsional) Membuat Subvolume Tambahan #
- Untuk
/home
btrfs subvolume create /mnt/@home
- Untuk
/var
btrfs subvolume create /mnt/@var
- Untuk snapshot
btrfs subvolume create /mnt/@snapshots
Unmount Partisi #
umount /mnt
Mounting Btrfs Subvolume #
Subvolume Btrfs dapat di-mount menggunakan opsi subvol atau subvolid.
Mount menggunakan subvolid
#
sudo mount -o subvolid=256 /dev/sdb /home
subvolid biasanya digunakan untuk keperluan teknis atau debugging. Untuk penggunaan sehari-hari, disarankan menggunakan subvol.
Mount menggunakan subvol
#
sudo mount -o subvol=@home /dev/sdb /home
Mount Otomatis saat Boot (/etc/fstab)
#
Agar subvolume otomatis ter-mount saat sistem melakukan boot, tambahkan entri berikut ke /etc/fstab:
UUID=<UUID-partisi> / btrfs subvol=@,defaults 0 0
UUID=<UUID-partisi> /home btrfs subvol=@home,defaults 0 0
/dev/sdX) untuk menghindari perubahan nama disk saat boot.
Kompresi di Btrfs #
Btrfs mendukung kompresi transparan untuk menghemat ruang disk dan meningkatkan performa I/O pada media tertentu (terutama SSD).
Mount dengan Kompresi zstd (Direkomendasikan)
#
mount -o subvol=@,compress=zstd /dev/sdX2 /mnt/apps
Mount dengan Kompresi lzo
#
mount -o subvol=@,compress=lzo /dev/sdX2 /mnt/apps
Optimasi Mount Options Btrfs untuk SSD #
Btrfs sangat cocok digunakan pada SSD, namun untuk mendapatkan performa dan efisiensi maksimal, beberapa mount options direkomendasikan.
Opsi Mount yang Direkomendasikan #
Contoh mount options umum untuk SSD:
defaults,noatime,ssd,compress=zstd,space_cache=v2,discard=async
Contoh penggunaan pada /etc/fstab:
UUID=<UUID-partisi> / btrfs subvol=@,noatime,ssd,compress=zstd,space_cache=v2,discard=async 0 0
UUID=<UUID-partisi> /home btrfs subvol=@home,noatime,ssd,compress=zstd,space_cache=v2,discard=async 0 0
Penjelasan Opsi:
-
noatimeMenonaktifkan pencatatan access time untuk setiap file → mengurangi write yang tidak perlu. -
ssdMengoptimalkan perilaku I/O untuk media SSD. -
compress=zstdMengaktifkan kompresi transparan dengan algoritma zstd (direkomendasikan). -
space_cache=v2Mempercepat proses mount dan meningkatkan efisiensi manajemen ruang kosong. -
discard=asyncMengaktifkan TRIM secara asinkron (lebih aman dan efisien dibandingdiscardsinkron).
Snapshot: Backup dan Rollback #
Snapshot adalah fitur unggulan Btrfs yang memungkinkan pembuatan salinan instan dari subvolume dengan overhead minimal karena menggunakan mekanisme copy-on-write (CoW).
Snapshot sangat berguna untuk:
- Backup cepat
- Rollback setelah upgrade gagal
- Perlindungan dari kesalahan konfigurasi
Membuat Snapshot #
Snapshot Read-Write.
btrfs subvolume snapshot /mnt/subvolume1 /mnt/subvolume1_$(date -I)
Snapshot ini bersifat read-write, sehingga dapat langsung digunakan atau dimodifikasi.
Snapshot Read-Only (Direkomendasikan untuk Backup).
btrfs subvolume snapshot -r /mnt/subvolume1 /mnt/snapshots/subvolume1_$(date -I)
Restore / Rollback Snapshot #
Untuk mengembalikan kondisi sistem dari snapshot:
- Unmount subvolume (jika sedang digunakan).
umount /mnt/subvolume1
- Hapus subvolume lama.
btrfs subvolume delete /mnt/subvolume1
- Restore dari snapshot.
btrfs subvolume snapshot /mnt/snapshots/subvolume1_2026-01-11 /mnt/subvolume1
- Mount kembali.
mount /mnt/subvolume1
Backup ke Disk Lain dengan btrfs send / receive
#
Snapshot dapat dikirim ke disk lain tanpa duplikasi data:
btrfs send /.snapshots/root_2026-01-11 | btrfs receive /backup/btrfs
Incremental Backup #
btrfs send -p /.snapshots/root_2026-01-10 \
/.snapshots/root_2026-01-11 | btrfs receive /backup/btrfs
Manajemen Disk, RAID, dan Skalabilitas Btrfs #
Btrfs memungkinkan penambahan, penghapusan, dan penggantian disk secara online tanpa perlu memformat ulang filesystem.
Menambah Disk ke Filesystem #
btrfs device add /dev/sdb1 /home
Periksa daftar device:
btrfs filesystem show /home
Menghapus Disk dari Filesystem #
btrfs device delete /dev/sdb1 /home
Membuat Filesystem dengan RAID Btrfs #
RAID 1.
mkfs.btrfs -m raid1 -d raid1 /dev/sda1 /dev/sdb1
- Metadata dan data direplikasi
- Tahan terhadap kegagalan satu disk
RAID 10.
mkfs.btrfs -m raid10 -d raid10 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
- Performa tinggi
- Redundansi kuat
- Cocok untuk server produksi
Recovery RAID Btrfs #
Jika salah satu disk gagal, mount filesystem dalam mode degraded:
mount -o degraded,rw /data
Masukkan disk baru sebagai pengganti, lalu jalankan:
btrfs replace start -r 3 /dev/sde /data
Keterangan:
-r→ read-only mode untuk device yang hilang3→ device ID dari disk yang hilang/dev/sde→ disk pengganti
Cek status proses replace:
btrfs replace status /data
Setelah replace selesai verifikasi dengan perintah berikut.
btrfs filesystem show /data
Setelah penambahan atau penggantian disk, lakukan balance untuk mendistribusikan ulang data.
btrfs balance start --bg /data
Cek status balance.
btrfs balance status /data
Best Practices Penggunaan Btrfs #
1. Gunakan Struktur Subvolume yang Jelas #
Gunakan pemisahan subvolume untuk memudahkan manajemen, snapshot, dan rollback.
Contoh struktur subvolume:
@→ Root filesystem (/)@home→/home@log→/var/log@snapshots→ Direktori penyimpanan snapshot
Struktur ini memudahkan:
- Snapshot selektif
- Rollback tanpa memengaruhi data lain
- Manajemen sistem yang lebih rapi
2. Jalankan Scrub Secara Berkala #
Scrub digunakan untuk memverifikasi integritas data dan memperbaiki error (jika menggunakan redundansi).
sudo btrfs scrub start -Bd /
Rekomendasi:
- Server produksi → 1× per bulan
- Desktop / laptop → 2–3 bulan sekali
Aktifkan scrub otomatis:
systemctl enable btrfs-scrub@-.timer
3. Gunakan Balance Secara Selektif #
Balance berguna untuk mengoptimalkan distribusi data dan metadata, terutama setelah:
- Penambahan / penghapusan disk
- Perubahan konfigurasi RAID
Contoh balance selektif:
sudo btrfs balance start -musage=50 -dusage=50 /
⚠️ Jangan menjalankan balance penuh (
balance starttanpa filter) kecuali benar-benar diperlukan.
4. Hindari RAID 5 / RAID 6 #
RAID 5 dan RAID 6 pada Btrfs belum direkomendasikan untuk produksi karena masih memiliki keterbatasan stabilitas.
Rekomendasi:
- Produksi → RAID1 atau RAID10
- Testing / lab → Single disk atau RAID1
5. Manfaatkan Snapshot Sebelum Perubahan Besar #
Selalu buat snapshot sebelum:
- Upgrade OS
- Update kernel
- Perubahan konfigurasi besar
Contoh:
btrfs subvolume snapshot -r /mnt/@ /.snapshots/pre-upgrade_$(date -I)
Snapshot memungkinkan rollback cepat jika terjadi kegagalan.
6. Tetap Gunakan Backup Eksternal #
Snapshot bukan pengganti backup.
Gunakan:
- Disk eksternal
- Server backup
- Cloud storage
Contoh backup dengan send / receive:
btrfs send /.snapshots/pre-upgrade_2026-01-11 | btrfs receive /backup/btrfs
Perintah Dasar dan Manajemen Sistem File Btrfs #
Perintah Dasar Btrfs #
| Fungsi | Perintah |
|---|---|
| Melihat filesystem Btrfs | sudo btrfs filesystem show |
| Melihat penggunaan ruang | sudo btrfs filesystem usage / |
| Scrub (cek integritas) | sudo btrfs scrub start -Bd / |
| Balance (optimasi selektif) | sudo btrfs balance start -musage=50 -dusage=50 / |
| List subvolume | sudo btrfs subvolume list /home |
| Membuat subvolume | sudo btrfs subvolume create /mnt/subvolume1 |
| Membuat snapshot | sudo btrfs subvolume snapshot /mnt/sv1 /mnt/snap1 |
| Menghapus subvolume | sudo btrfs subvolume delete /mnt/snapshots/sv1 |
Otomatisasi Snapshot Btrfs #
Script berikut dirancang untuk snapshot harian yang aman, dengan:
- Snapshot berbasis tanggal
- Retensi snapshot (hapus > 7 hari)
- Fungsi rollback manual & eksplisit
- Menghindari operasi berbahaya tanpa konfirmasi
Contoh Script: btrfs-backup.sh
#!/bin/bash
set -e
# Konfigurasi
SUBVOL="/mnt/apps/mydata"
SNAPDIR="/mnt/apps/snapshots"
DEVICE="/dev/sdX2"
MOUNTPOINT="/mnt/apps"
# Pastikan direktori snapshot ada
mkdir -p "$SNAPDIR"
DATE=$(date +%Y-%m-%d)
SNAPNAME="$SNAPDIR/snap-$DATE"
create_snapshot() {
echo "[INFO] Membuat snapshot: $SNAPNAME"
btrfs subvolume snapshot -r "$SUBVOL" "$SNAPNAME"
}
cleanup_snapshots() {
echo "[INFO] Menghapus snapshot lebih dari 7 hari"
find "$SNAPDIR" -maxdepth 1 -type d -name "snap-*" -mtime +7 \
-exec btrfs subvolume delete {} \;
}
rollback_snapshot() {
TARGET="$SNAPDIR/snap-$1"
if [ ! -d "$TARGET" ]; then
echo "[ERROR] Snapshot $TARGET tidak ditemukan"
exit 1
fi
echo "[WARNING] Rollback ke snapshot $TARGET"
read -p "Lanjutkan? (yes/no): " CONFIRM
[ "$CONFIRM" != "yes" ] && exit 1
umount "$SUBVOL"
btrfs subvolume delete "$SUBVOL"
btrfs subvolume snapshot "$TARGET" "$SUBVOL"
mount "$DEVICE" "$MOUNTPOINT"
echo "[INFO] Rollback selesai"
}
case "$1" in
rollback)
rollback_snapshot "$2"
;;
*)
create_snapshot
cleanup_snapshots
;;
esac
Set permission.
chmod +x btrfs-backup.sh
Jalankan snapshot setiap hari jam 02:00 pagi dengan cron job.
0 2 * * * /path/to/btrfs-backup.sh >> /var/log/btrfs-snapshot.log 2>&1
Rollback manual ke snapshot tertentu.
sudo ./btrfs-backup.sh rollback 2026-01-11
⚠️ Rollback sebaiknya dilakukan dalam kondisi maintenance (service dimatikan atau dari rescue mode untuk root filesystem).