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