Skip to main content
  1. Posts/

Cara Menggunakan Btrfs di Linux

·7 mins·
btrfs btrfs linux
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

Geoblocking Using nftables
·6 mins
nftables linux nftables
Geoblocking Using IPTables and IPset
·5 mins
iptables iptables linux
Cara Menampilkan Timestamp di History Linux
·1 min
linux linux
Mengubah Tanggal Modifikasi File di Linux
·1 min
linux linux
Create Simple Systemd Service in Linux
·2 mins
linux linux
How to Copy Text in Tmux to System Clipboard
·3 mins
tmux linux tmux