Skip to main content
  1. Posts/

Cara Menggunakan Btrfs di Linux

·7 mins·
Table of Contents

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
Disarankan menggunakan UUID daripada nama device (/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:

  • noatime Menonaktifkan pencatatan access time untuk setiap file → mengurangi write yang tidak perlu.

  • ssd Mengoptimalkan perilaku I/O untuk media SSD.

  • compress=zstd Mengaktifkan kompresi transparan dengan algoritma zstd (direkomendasikan).

  • space_cache=v2 Mempercepat proses mount dan meningkatkan efisiensi manajemen ruang kosong.

  • discard=async Mengaktifkan TRIM secara asinkron (lebih aman dan efisien dibanding discard sinkron).

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)
Snapshot read-only lebih aman untuk backup karena tidak bisa diubah secara tidak sengaja.

Restore / Rollback Snapshot
#

Untuk mengembalikan kondisi sistem dari snapshot:

  1. Unmount subvolume (jika sedang digunakan).
umount /mnt/subvolume1
  1. Hapus subvolume lama.
btrfs subvolume delete /mnt/subvolume1
  1. Restore dari snapshot.
btrfs subvolume snapshot /mnt/snapshots/subvolume1_2026-01-11 /mnt/subvolume1
  1. 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
Pastikan data telah diredundansi atau dibalance sebelum menghapus disk dari filesystem RAID.

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
RAID 5 dan RAID 6 pada Btrfs masih dianggap tidak stabil dan tidak direkomendasikan untuk 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:

  • -rread-only mode untuk device yang hilang
  • 3device 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
Balance dapat memakan waktu lama tergantung ukuran data dan jumlah disk.

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 [email protected]

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 start tanpa 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:

  1. Snapshot berbasis tanggal
  2. Retensi snapshot (hapus > 7 hari)
  3. Fungsi rollback manual & eksplisit
  4. 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).

Related