Tulisan kali ini lagi-lagi berhubungan dengan Linux. Tepatnya mengenai generasi File System yang digadang-gadang bakal jadi penerus generasi EXT yang saat ini pupoler digunakan di distro-distro Linux terbaru, EXT4. Tulisan ini dibuat tujuan utamanya agar saya tidak lupa dengan tulisan-tulisan dan artikel yang baru saya baca, sehingga ilmu bertambah, dan bisa ikut berbagi dengan pembaca blog saya.
Apakah B-Tree File System Itu?
B-Tree File System (BTRFS, kadang singkatan ini juga diucapkan BuTteR FS atau BeTteR FS) merupakan sebuah file system di bawah lisensi General Public License (GPL). Chris Mason, Direktur Linux Kernel Engineering di Oracle, merupakan “bapak” dari BTRFS yang pertama kali memulai pembuatan file system yang salah satu fiturnya adalah memaintain checksum dari seluruh file data dan metadata ini.
File system sendiri adalah sebuah mekanisme penyimpanan dan pengaturan file atau data pada sebuah komputer. Ada banyak jenis file system yang telah kita gunakan, seperti NTFS yang digunakan di Windows, ext2, ext3, ext4, dan lain-lain. Mengapa pemilihan file system menjadi penting? Dewasa ini, ukuran hard drive semakin besar. Namun demikian, kenaikan kecepatan akses ke memori tidak setara dengan kenaikan ukuran hard drive. Karenanya, dibutuhkan file system yang dapat mengatur mekanisme penyimpanan maupun pencarian data dari hard drive agar storage semakin reliable, dapat diakses dalam waktu yang cepat, serta efisien.
B-Tree File System ini membuat Linux dapat lebih “mengatur” storage atau tempat penyimpanan yang ada. “Mengatur” dalam hal ini bukan berarti hanya mengatur dalam hal pengalamatan saja, namun juga dapat melakukan administrasi dan pengelolaan tempat penyimpanan tersebut dengan interface yang lebih bersih sehingga pengguna dapat melihat apa yang sedang dipakai dan dikerjakan dan juga membuatnya menjadi lebih “terpercaya”.
Untuk melihat perbandingan secara singkat antara btrfs dengan file system lainnya silahkan kunjungi link berikut :http://en.wikipedia.org/wiki/Comparison_of_file_systems
Sejarah Singkat BTRFS
Struktur data Copy on Write B+Tree diperkenalkan pertama kali oleh peneliti IBM bernama Ohad Rodeh dalam sebuah presentasi pada USENIX 2007. Rodeh menyarankan penambahan perhitungan reference dan relaksasi tertentu pada algoritma balancing dari standard B-tree yang membuatnya cocok untuk penyimpanan objek secara high-performance dengan copy-on-write snapshot sekaligus tetap menjaga konkurensi dengan baik.
Chris Mason, seorang engineer yang bekerja pada pengembangan ReiserFS untuk SUSE pada saat itu, kemudian bergabung dengan Oracle pada tahun yang sama dan memulai pengerjaan sebuah file system baru menggunakan B-Tree yang diperkenalkan oleh Ohad Rodeh hampir secara keseluruhan, bukan hanya untuk metadata dan file data, tetapi juga secara rekursif melakukan tracking terhadap alokasi space dari tree itu sendiri. Hal ini memungkinkan semua penelusuran dan modifikasi untuk dilakukan melalui single code path,sehingga fitur-fitur yang ada seperti copy-on-write, checksumming, dan mirrorring hanya butuh diimplementasikan sekali untuk keseluruhan file system.
BTRFS digabung ke dalam kernel Linux versi 2.6.29 pada bulan Januari 2009.
Motivasi
Struktur data inti dari btrfs adalah B+tree. B+tree ini sendiri merupakan varian dari B-tree di mana seluruh key berada pada internal node (node yang memiliki anak) dan seluruh data yang berasosiasi dengan key tersebut berada pada leave node (node yang tidak memiliki anak). Semua metadata dari filesystem ini disimpan dalam stuktur tree ini.
Modifikasi yang terjadi pada tree, dilakukan berdasarkan prinsip copy-on-write, yaitu ketika sebuah block data hendak mengalami perubahan, perubahan tidak dilakukan pada block tersebut, tetapi block tersebut akan dibuatkan salinannya dan perubahan dilakukan pada salinan tersebut ( salinan tidak akan dibuat sebelum adanya permintaan modifikasi dari pengguna data. ). Copy-on-write ini sendiri menjadi tidak berguna jika dilakukan pada stuktur data b+tree yang sebenarnya (b+tree klasik) di mana setiap leaf nodenya memiliki pointer ke leaf node tetangganya. Perubahan yang terjadi pada salah satu leaf node akan menyebabkan pembuatan salinan tree yang menyebabkan penggunaan memory yang berlebihan / sia-sia. Oleh karena itu, pada btrfs, struktur data b+tree yang digunakan dimodifikasi sehingga menjadi b+tree di mana pointer pada setiap leaf node yang menunjuk ke leaf node yang lain dihilangkan. Inilah yang menjadi alasan mengapa btrfs menjadi filesystem yang mudah untuk di-recover jika terjadi crash dan filesystem dengan cara kerja yang efisien baik dari segi waktu maupun memori.
Fitur-fitur dari BTRFS
Btrfs adalah Copy-On-Write file system yang ditujukan untuk mengimplementasikan fitur yang canggih dan juga terfokus pada fault tolerance, perbaikan, dan kemudahan administrasi. Fitur-fitur utama yang ada pada btrfs sekarang ini yaitu:
- Extent based file storage (2^64 max file size, sekitar 18 juta TB): sistem penyimpanan filenya berbasis extent sehingga meminimalisir fragmentasi dan penyebaran bagian file. Untuk keterangan lebih lanjut :http://en.wikipedia.org/wiki/Extent_(file_systems)
- Space efficient packing of small files: Tidak menghabiskan waktu untuk sub-block file
- Space efficient indexed directories: Indexing pada directory yang hemat space sehingga membuat akses menjadi cepat dan ukuran directory yang relatif kecil.
- Dynamic inode allocation: Alokasi yang dinamis terhadap inode(struktur data yang menyimpan informasi dasar dari suatu objek file system) sehingga tidak ada batasan tertentu terhadap jumlah inode.
- Writable snapshots (Efficient incremental backup and FS mirroring): snapshot untuk backup dan duplikasi
- Subvolumes (separate internal filesystem roots): FSCK small chunk bs secara paralel
Ini yang merupakan salah satu alasan kenapa Btrfs menjadi salah satu FS yang cocok untuk backup (karena ada fitur snapshot juga subvolume, kedua fitur tersebut hampir identik)
- Object level mirroring and striping : konsep RAID yang diterapkan pada FS
- Checksums on data and metadata (multiple algorithms available): No surprises!!!
Checksum adalah suatu fungsi hash yang mengecek apakah data yang dikirim atau disimpan corrupt apa tidak.
- Compression : efisiensi dari segi tempat dan kinerja
Memanfaatkan library zlib dari kernel Linux
- Integrated multiple device support, with several RAID algorithms
RAID : Redundant Array of Independent Disks merupakan media penyimpanan pada beberapa disk.
Raid Algorithm : jenis – jenis RAID; RAID 0,RAID 1, RAID 10(Raid 1 & RAID 0), dsb untuk lebih lengkap silahkan dicek linkhttp://www.webopedia.com/TERM/R/RAID.html
- Online filesystem check and defragmentation : Performance is slowed, but data is still accessible
- Very fast offline filesystem check
- Efficient incremental backup and FS mirroring : salah satunya dikarenakan fitur snapshot dan juga konsep RAID yang diimplementasikan
- In-place conversion (with rollback) from ext3/4 to Btrfs: Btrfs dapat dikonversikan kembali ke file system ext3/4
- User-defined transactions
Apa Itu Subvolume dan Snapshot?
Subvolume adalah sebuah mekanisme yang secara efektif memperbolehkan sebuah instance atau sebuah file system dari Btrfs untuk memiliki banyak direktori root (atau direktori utama), yang semuanya menggunakan satu file system tersebut sebagai tempat penyimpanan. Root-root ini diberi label dan bisa di-mount secara terpisah dengan label tersebut (akan selalu ada sebuah root “default” yang secara default akan di-mount). Subvolume juga dapat dibuat di dalam subvolume lain (nested) dimana akan muncul sebagai subdirektori. Nested subvolume ini menjadikan BTRFS sebagai “Logical Volume Manager”. Subvolume yang baru dibuat akan selalu kosong. Subvolume kosong inilah sama seperti snapshot. Tapi bila subvolume sudah terisi dengan subvolume lain maka tidak seperti snapshot. Ext4 FS juga memiliki fitur subvolume. Tapi bedanya pada Ext4 FS, setiap pembuatan subvolume perlu melakukan partisi (partisi dapat dilakukan dengan perintah cfdisk*). Sedangkan pembuatan subvolume Btrfs tidak perlu melakukan partisi.
Snapshot atau clone adalah sebuah writeable copy-on-write clone dari keseluruhan subvolume; snapshotting itu sendiri merupakan sebuah operasi atomik. Snapshot tidak bisa dilakukan pada sebuah subdirektori individual. Writeable disini maksudnya dapat dimodifikasi, cocok untuk rollback.
Snapshot dan subvolume hampir identik, hanya bedanya pada snapshot root direktorinya merupakan subvolume yang disubvolume lagi (subvolume yang di_share_).
Untuk lebih jelasnya misalkan : direktori root (‘/’) merupakan subvolume dan terdapat direktori /home yang merupakan subvolume dari subvolume si root tadi. Saat disnapshot pada root maka snapshot tidak akan memiliki subvolume dari /home. Memiliki disini maksudnya bahwa saat dirollback atau restore tidak akan mengubah content direktori home tadi.
*Perlu diingat bahwa pembuatan partisi belum menentukan jenis FS pada partisi tersebut (hanya mendefinisikan 1)ukuran partisi salah satunya lokasi sektor 2)jenis partisi)
Bagaimana caranya melakukan “In Place Conversion / Migration” ke Btrfs?
Bagaimana Btrf bisa dikonversi ke FS lain dan sebaliknya (untuk FS ext3/4)?
Hal ini disebabkan oleh metadata Btrfs dibentuk didlm lokasi kosong FS ext3 dan memungkinkan konversi secara permanen (mengklain space yang dipakai oleh FS Ext3) atau dapat dilakukan roll back ke konversi FS Ext3 sebelumnya. Program konversi ditempat ini ditulis oleh Yan Zheng.
Untuk cara konversinya silahkan dicek link :http://oss.oracle.com/projects/btrfs/dist/documentation/btrfs-converter.html
BTRFS Design
- Segala sesuatu dalam FS ; baik itu inode,data file, entry directory, bitmap, – merupakan item dalam Copy On Write (COW) pada B+ Tree
- B+ Tree : variasi dari data struktur BTree, efisien n-ary dalam pencarian data, diciptakan oleh Richard Bayer di Boeing pada tahun 1971 (B adalah untuk ‘bushy’ atau Boeing atau Bayer)
- COW : cara malas untuk mengubah data, dengan menunda membaca / menulis sampai menit-menit terakhir (sangat bermanfaat untuk data yang sering dimodifikasi)
Untuk lebih jelasnya silahkan dicek link :http://kambing.ui.ac.id/bebas/v06/Kuliah/SistemOperasi/BUKU/SistemOperasi-4.X-2/ch05s05.html atau pada bagian “Motivasi”
- Tidak melakukan penulisan ulang di tempat tapi di salinan — bukankah terlihat lebih aman?
Perbandingan struktur pada FS umumnya dengan BTRFS