Setup BTRFS v0.20-rc1 di Ubuntu 13.04

Ada berbagai macam filesystem di dunia ini, masing-masing dengan keunggulannya, seperti FAT32, NTFS, EXT2, EXT3, EXT4, dan sebagainya. Namun dari semua filesystem itu ada satu yang menonjol bahkan disebut-sebut sebagai Filesystem terbaik yang pernah diciptakan yaitu ZFS dari Sun (kini Oracle).

Mengapa disebut sebagai yang terbaik? Karena ZFS mempunyai kemampuan yang tidak dimiliki oleh filesystem lainnya seperti:

  • Pooling
  • Compression
  • Snapshot
  • Deduplication

Karena keunggulan inilah ada proyek Open Souce yang membawa ZFS ke dalam Linux, dikenal sebagai zfsonlinux.org. Bagus sekali bukan? Memang, tapi perlu diketahui ZFS bukanlah filesystem native (asli) Linux, jadi ada beberapa fitur lain yang sebenarnya tidak kompatible dengan Linux seperti sharing NFSnya. Dan juga ZFS yang ada di Linux merupakan versi yang agak tua karena masalah lisensinya.

Disinilah kemudian dicetuskan untuk membuat sebuah filesystem baru untuk Linux yang disebut BTRFS. Memang saat tulisan ini dibuat Linux sudah memiliki filesystem terbaru yaitu EXT4, namun sang penciptanya Theodore Ts’o berkata bahwa walaupun EXT4 memiliki fitur-fitur baru namun hal itu bukanlah kemajuan yang besar karena sebenarnya EXT4 dibuat berdasarkan teknologi lama. Untuk sejarah lebih lengkapnya bisa dibaca di http://en.wikipedia.org/wiki/Btrfs

Untuk artikel ini kita membutuhkan:

  • Ubuntu 13.04
  • 5 buah harddisk

Step 1: Install Ubuntu seperti biasa di harddisk pertama (sda). Lakukan update full. Hal ini penting agar kita mendapatkan Kernel versi terbaru yang tersedia.

Step 2: Install btrfst-tools

root@ubuntu:~# apt-get install btrfs-tools
update-initramfs: Generating /boot/initrd.img-3.8.0-30-generic

Step 3: Buat BTRFS fileystem

root@ubuntu:~# mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd
 
WARNING! - Btrfs v0.20-rc1 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using
 
adding device /dev/sdc id 2
adding device /dev/sdd id 3
fs created label (null) on /dev/sdb
nodesize 4096 leafsize 4096 sectorsize 4096 size 30.00GB
Btrfs v0.20-rc1

Step 4: Lihat informasi filesystem

root@ubuntu:~# btrfs filesystem show /dev/sdb
failed to read /dev/sr0
Label: none  uuid: c1d63661-ecc8-40b6-a5b7-5dd6f9dab3eb
Total devices 3 FS bytes used 28.00KB
devid    3 size 10.00GB used 2.01GB path /dev/sdd
devid    2 size 10.00GB used 1.01GB path /dev/sdc
devid    1 size 10.00GB used 2.02GB path /dev/sdb
 
Btrfs v0.20-rc1
 
root@ubuntu:~# btrfs filesystem show /dev/sdc
failed to read /dev/sr0
Label: none  uuid: c1d63661-ecc8-40b6-a5b7-5dd6f9dab3eb
Total devices 3 FS bytes used 28.00KB
devid    3 size 10.00GB used 2.01GB path /dev/sdd
devid    2 size 10.00GB used 1.01GB path /dev/sdc
devid    1 size 10.00GB used 2.02GB path /dev/sdb
 
Btrfs v0.20-rc1
 
root@ubuntu:~# btrfs filesystem show /dev/sdd
failed to read /dev/sr0
Label: none  uuid: c1d63661-ecc8-40b6-a5b7-5dd6f9dab3eb
Total devices 3 FS bytes used 28.00KB
devid    3 size 10.00GB used 2.01GB path /dev/sdd
devid    2 size 10.00GB used 1.01GB path /dev/sdc
devid    1 size 10.00GB used 2.02GB path /dev/sdb
 
Btrfs v0.20-rc1

Dapat juga tanpa menyebutkan devicenya:

root@ubuntu:~# btrfs filesystem show
failed to read /dev/sr0
Label: none  uuid: c1d63661-ecc8-40b6-a5b7-5dd6f9dab3eb
Total devices 3 FS bytes used 28.00KB
devid    3 size 10.00GB used 2.01GB path /dev/sdd
devid    2 size 10.00GB used 1.01GB path /dev/sdc
devid    1 size 10.00GB used 2.02GB path /dev/sdb
 
Btrfs v0.20-rc1

Step 4: Mount filesystemnya. Bisa menggunakan device yang mana saja.

root@ubuntu:~# mount /dev/sdb /mnt

Di syslog terlihat:

Sep 21 07:24:00 ubuntu kernel: [  638.249577] device fsid c1d63661-ecc8-40b6-a5b7-5dd6f9dab3eb devid 1 transid 4 /dev/sdb
Sep 21 07:24:00 ubuntu kernel: [  638.251726] btrfs: disk space caching is enabled
root@ubuntu:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       3.9G  1.6G  2.2G  43% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            2.0G  4.0K  2.0G   1% /dev
tmpfs           395M  284K  395M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            2.0G     0  2.0G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/sdb         30G   56K   27G   1% /mnt
 
root@ubuntu:~# btrfs filesystem df /mnt
Data, RAID0: total=3.00GB, used=1.00MB
Data: total=8.00MB, used=0.00
System, RAID1: total=8.00MB, used=4.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=1.00GB, used=24.00KB
Metadata: total=8.00MB, used=0.00

Step 5: Mengaktifkan compression

root@ubuntu:~# umount /mnt
root@ubuntu:~# mount -o compress=zlib /dev/sdb /mnt
root@ubuntu:~# mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/cgroup type tmpfs (rw)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755)
vmware-vmblock on /run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,default_permissions,allow_other)
/dev/sdb on /mnt type btrfs (rw,compress=zlib)

Di syslog:

Sep 21 07:31:06 ubuntu kernel: [ 1063.799480] device fsid c1d63661-ecc8-40b6-a5b7-5dd6f9dab3eb devid 1 transid 6 /dev/sdb
Sep 21 07:31:21 ubuntu kernel: [ 1078.434985] device fsid c1d63661-ecc8-40b6-a5b7-5dd6f9dab3eb devid 1 transid 8 /dev/sdb
Sep 21 07:31:21 ubuntu kernel: [ 1078.436190] btrfs: use zlib compression
Sep 21 07:31:21 ubuntu kernel: [ 1078.436195] btrfs: disk space caching is enabled

Untuk membuatnya permanent setiap reboot: edit /etc/fstab

#BTRFS
/dev/sdb        /mnt    btrfs   defaults,compress=zlib        0       1

Step 6: Online filesystem resize

root@ubuntu:~# btrfs filesystem resize -5g /mnt
Resize '/mnt' of '-5g'

Di syslog:

Sep 21 07:37:33 ubuntu kernel: [ 1450.608071] btrfs: new size for /dev/sdb is 5368709120
root@ubuntu:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       3.9G  1.6G  2.1G  44% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            2.0G  4.0K  2.0G   1% /dev
tmpfs           395M  284K  395M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            2.0G     0  2.0G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/sdb         25G  1.1M   22G   1% /mnt

Untuk meresize ke maksimum space:

root@ubuntu:~# btrfs filesystem resize max /mnt
Resize '/mnt' of 'max'

Di syslog:

Sep 21 07:39:29 ubuntu kernel: [ 1566.630386] btrfs: new size for /dev/sdb is 10737418240
root@ubuntu:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       3.9G  1.6G  2.1G  44% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            2.0G  4.0K  2.0G   1% /dev
tmpfs           395M  284K  395M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            2.0G     0  2.0G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/sdb         30G  1.1M   27G   1% /mnt

Step 7: Menambahkan harddisk baru ke dalam volume

root@ubuntu:~# btrfs device add /dev/sde /mnt

Di syslog tidak terlihat apa-apa.

Dengan df bisa terlihat spacenya telah meningkat:

root@ubuntu:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       3.9G  1.6G  2.1G  44% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            2.0G  4.0K  2.0G   1% /dev
tmpfs           395M  284K  395M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            2.0G     0  2.0G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/sdb         40G  1.1M   37G   1% /mnt
 
root@ubuntu:~# btrfs filesystem show
failed to read /dev/sr0
Label: none  uuid: c1d63661-ecc8-40b6-a5b7-5dd6f9dab3eb
Total devices 4 FS bytes used 1.03MB
devid    4 size 10.00GB used 0.00 path /dev/sde
devid    3 size 10.00GB used 2.01GB path /dev/sdd
devid    2 size 10.00GB used 1.01GB path /dev/sdc
devid    1 size 10.00GB used 2.02GB path /dev/sdb
 
Btrfs v0.20-rc1

Seperti yang kamu lihat, harddisk sde belum digunakan sama sekali. Kita harus membalance metadata dan data ke semua harddisk.

root@ubuntu:~# btrfs filesystem balance /mnt
Done, had to relocate 5 out of 5 chunks

Di syslog:

Sep 21 07:45:09 ubuntu kernel: [ 1906.472638] btrfs: relocating block group 1103101952 flags 9
Sep 21 07:45:09 ubuntu kernel: [ 1906.508199] btrfs: relocating block group 29360128 flags 20
Sep 21 07:45:09 ubuntu kernel: [ 1906.547177] btrfs: found 5 extents
Sep 21 07:45:09 ubuntu kernel: [ 1906.570994] btrfs: relocating block group 20971520 flags 18
Sep 21 07:45:09 ubuntu kernel: [ 1906.599707] btrfs: found 1 extents
Sep 21 07:45:09 ubuntu kernel: [ 1906.621463] btrfs: relocating block group 12582912 flags 1
Sep 21 07:45:09 ubuntu kernel: [ 1906.641201] btrfs: relocating block group 4194304 flags 4

Bisa juga menggunakan perintah ini:

btrfs balance start /mnt

Kita sekarang bisa lihat harddisk sde telah digunakan:

root@ubuntu:~# btrfs filesystem show
failed to read /dev/sr0
Label: none  uuid: c1d63661-ecc8-40b6-a5b7-5dd6f9dab3eb
Total devices 4 FS bytes used 28.00KB
devid    4 size 10.00GB used 256.00MB path /dev/sde
devid    3 size 10.00GB used 32.00MB path /dev/sdd
devid    2 size 10.00GB used 256.00MB path /dev/sdc
devid    1 size 10.00GB used 36.00MB path /dev/sdb
 
Btrfs v0.20-rc1

Step 8: Membuat subvolume

root@ubuntu:~# btrfs subvolume create /mnt/dir1
Create subvolume '/mnt/dir1'

Subvolume terlihat seperti direktori biasa:

root@ubuntu:~# ls -l /mnt
total 0
drwxr-xr-x 1 root root 0 Sep 21 07:53 dir1
 
root@ubuntu:~# btrfs subvolume list /mnt
ID 259 gen 35 top level 5 path dir1

Kita bisa juga membuat subvolume dari subvolume (nested):

root@ubuntu:~# btrfs subvolume create /mnt/dir1/dir1a
Create subvolume '/mnt/dir1/dir1a'
 
root@ubuntu:~# btrfs subvolume list /mnt
ID 259 gen 36 top level 5 path dir1
ID 260 gen 36 top level 5 path dir1/dir1a

Step 9: Membuat snapshot
Buat sebuah file dahulu sebagai test.

root@ubuntu:~# touch /mnt/dir1/file2.txt
 
root@ubuntu:~# ll /mnt/dir1/
total 4
drwxr-xr-x 1 root root 28 Sep 21 08:03 ./
drwxr-xr-x 1 root root 24 Sep 21 08:02 ../
drwxr-xr-x 1 root root  0 Sep 21 07:56 dir1a/
-rw-r--r-- 1 root root  0 Sep 21 08:06 file2.txt
 
root@ubuntu:~# btrfs subvolume snapshot /mnt/dir1 /mnt/dir1-snap_201309212307
Create a snapshot of '/mnt/dir1' in '/mnt/dir1-snap_201309212307'

Kita bisa melihat snapshotnya:

root@ubuntu:~# ls -l /mnt/
total 0
drwxr-xr-x 1 root root 28 Sep 21 08:03 dir1
drwxr-xr-x 1 root root 28 Sep 21 08:03 dir1-snap_201309212307
 
root@ubuntu:~# ll /mnt/dir1-snap_201309212307/
total 4
drwxr-xr-x 1 root root 28 Sep 21 08:03 ./
drwxr-xr-x 1 root root 52 Sep 21 08:08 ../
drwxr-xr-x 1 root root  0 Sep 21 08:09 dir1a/
-rw-r--r-- 1 root root  0 Sep 21 08:06 file2.txt

Direktori snapshot dir1-snap_201309212307 tidak akan terpengaruh. Test buat file di dir1:

root@ubuntu:~# touch /mnt/dir1/file3.txt
 
root@ubuntu:~# ll /mnt/dir1
total 4
drwxr-xr-x 1 root root 46 Sep 21 08:12 ./
drwxr-xr-x 1 root root 52 Sep 21 08:08 ../
drwxr-xr-x 1 root root  0 Sep 21 07:56 dir1a/
-rw-r--r-- 1 root root  0 Sep 21 08:06 file2.txt
-rw-r--r-- 1 root root  0 Sep 21 08:12 file3.txt
 
root@ubuntu:~# ll /mnt/dir1-snap_201309212307/
total 4
drwxr-xr-x 1 root root 28 Sep 21 08:03 ./
drwxr-xr-x 1 root root 52 Sep 21 08:08 ../
drwxr-xr-x 1 root root  0 Sep 21 08:12 dir1a/
-rw-r--r-- 1 root root  0 Sep 21 08:06 file2.txt

Step 10: Rollback snapshot
Untuk rollback (mengembalikan) snapshot caranya mudah sekali. Kita hanya merenam direktori snapshot ke direktori yang kita inginkan. Dalam hal ini kita ubah direktori asli ke nama lain dulu baru kemudian kita rename direktori snapshot ke direktori asli. Kita reboot sesudahnya.

root@ubuntu:~# mv /mnt/dir1 /mnt/dir1-bad
root@ubuntu:~# mv /mnt/dir1-snap_201309212307/ /mnt/dir1

Setelah reboot kita bisa cek /mnt:

root@ubuntu:~# btrfs subvolume list /mnt
ID 259 gen 49 top level 5 path dir1-bad
ID 260 gen 36 top level 5 path dir1-bad/dir1a
ID 261 gen 47 top level 5 path dir1

Catatan. Terjadi error ketika mencoba menghapus direktori asli yang telah kita rename.

root@ubuntu:~# btrfs subvolume delete /mnt/dir1-bad/
Delete subvolume '/mnt/dir1-bad'
ERROR: cannot delete '/mnt/dir1-bad' - Directory not empty

Sebabnya adalah di dalam direktori asli itu ada subvolume. Jadi kita harus delete subvolumenya dulu.

root@ubuntu:~# btrfs subvolume delete /mnt/dir1-bad/dir1a
Delete subvolume '/mnt/dir1-bad/dir1a'

Catatan: ada pesan error seperti ini, tapi sepertinya tidak apa-apa.

root@ubuntu:~# btrfs subvolume list /mnt
ERROR: Failed to lookup path for root 0 - No such file or directory
 
root@ubuntu:~# btrfs subvolume delete /mnt/dir1-bad/
Delete subvolume '/mnt/dir1-bad'
root@ubuntu:~# btrfs subvolume list /mnt
ID 261 gen 47 top level 5 path dir1

Kesimpulan
BTRFS ini sangat bermanfaat untuk diterapkan dalam Fileserver, terutama fitur kompresi dan snapshotnya. Saat tulisan ini dibuat, sudah ada 2 vendor Linux yang mendukung BTRFS sebagai production yaitu SuSE dan Oracle. Walaupun begitu penulis menyarankan agar sebaiknya kita menunggu sampai BTRFS benar-benar stabil. Kalaupun tetap mau dicoba sebaiknya disetel sebagai eksplorasi dan testing dahulu.
Selamat mencoba :)

Sumber-sumber:
https://help.ubuntu.com/community/btrfs
http://www.howtoforge.com/a-beginners-guide-to-btrfs
https://btrfs.wiki.kernel.org/index.php/Getting_started

Singapura, 22 September 2013
Fajar Priyanto
Seorang penulis yang sedang merantau

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>