"Jika sebelumnya sempat dibahas benefit dari pemakaian JFS selaku filesystem alternatif, maka kali ini saya coba kupas sedikit tentang ZFS [Zettabyte File System] terkait optimasi penggunaan disk."--dit

Intro

Manajemen data dalam komputasi tentunya sudah menjadi hal biasa bagi Anda yang menggunakan komputer sebagai media bekerja. Ragam data yang lazim digunakan saat ini juga sudah sangat beragam, baik fungsi mau pun ukurannya. Sejalan dengan perkembangan teknologi komputer juga tersedia beragam media penyimpanan data yang dapat menampung data super besar.

Adalah hard disk drive [HDD], sebagai salah satu media penyimpanan yang paling umum digunakan di komputer masa kini dengan daya tampung yang telah mencapai satuan tera byte. Ketersediaan HDD berkapasitas besar seringkali menimbulkan ketidak efisienan penggunaannya, sebut saja dalam hal pengalokasian ukuran partisi.

Hal tersebut terjadi karena pembagian partisi dilakukan di awal, sehingga HDD telah terbagi-bagi menjadi beberapa bagian dengan tujuan tertentu. Sebut saja untuk partisi /home yang diperuntukan menyimpan data berupa skrip situs, mail, konfigurasi serta lainnya. Karena data yang disimpan dinamis, maka pengelola server mengalokasikan space cukup besar untuk partisi ini, bahkan tidak jarang sebuah HDD tersendiri.

Media Penyimpanan & Permasalahannya

Padahal jika dirunut secara detil, mayoritas penggunaan ruang untuk kebutuhan /home tidak pernah mencapai atau bahkan mendekati limitasi yang telah diberikan. Dengan kata lain, telah terjadi pengalokasikan resource ruang di HDD yang tidak efisien. Memudahkan Anda dalam mencerna, saya berikan contoh sebuah server dengan komposisi sebagai berikut :

  • SDA [500GB] digunakan sebagai operasional sistem [/boot, /, swap, /var, /usr, /tmp]
  • SDB [500GB] digunakan sebagai operasional data klien [/home]
  • SDC [2TB] digunakan sebagai operasional data cadangan [/data]

Berikut ini beberapa kendala umum yang dapat terjadi dalam kondisi di atas:

  1. SDA selaku drive utama yang menyokong jalannya sistem memuat semua fungsi penting sistem operasi. Padahal bukan tidak mungkin [alias sering terjadi] terdapat kendala teknikal di salah satu partisinya, sehingga sistem menjadi lumpuh. Itu masalah pertama.
  2. Pada contoh kasus di bagian analisa di atas dan implementasinya di mayoritas server operasional konvensional, SDB dialokasikan penuh hanya untuk partisi /home saja. Padahal pada kenyataannya tidak pernah menyentuh limitasinya, bahkan mendekati pun tidak. Itu masalah kedua.
  3. Masih berbekalkan kasus yang sama, SDB bertindak sebagai media penyimpanan data klien tunggal dengan data dinamis yang senantiasa terjadi perubahan. Ini artinya saat terjadi kendala teknikal atau logikal di SDB, operasional server tidak dapat berjalan. Itu masalah ketiga.
  4. SDC selaku tetangga SDB dipercaya sebagai media tunggal penyimpanan data cadangan yang merupakan rangkuman dari konfigurasi maupun data klien. Tidak ada yang salah dengan hal tersebut, bahkan bagus. Tetapi, mari kita tilik dari kapasitas yang tersedia dan dapat kita bayangkan berapa banyak ruang kosong terbuang percuma tanpa terpakai. Itu masalah keempat.
  5. Mayoritas pengelola server pada umumnya menerapkan duplikasi fungsi HDD. Tidak ada yang salah dengan itu, tetapi perlu diingat bahwa tidak semua server memuat fitur tersebut dan konsep yang biasa dikenali dengan RAID bersifat konvensional itu lagi-lagi harus dibuat di awal. Keadaan akan makin buruk dan tidak efisien saat server juga tidak memiliki fitur hotswap, karena penerapan penggantian HDD tetap membutuhkan proses shutdown [downtime]. Itu masalah kelima.

“Sampai di sini dapat disimpulkan bahwa mayoritas kendala penggunaan media penyimpanan adalah tidak efisiennya dalam pemakaian space serta kendala teknikal pada hard disk drive itu sendiri.” —dit

The Light That Ready To Fight

Tersebutlah ZFS (Zetta File System) yang merupakan besutan Sun Microsystem sebagai filesystem alternatif yang kini juga telah tersedia di lingkungan Linux CentOS sebagai pencerah kendala di atas. ZFS menawarkan fitur unggulan untuk manajemen penggunaan disk secara dinamis kepada pengelola server.

Anda tidak perlu lagi bingung dalam pengalokasian besaran ruang partisi dalam sebuah HDD karena segala sesuatunya dapat dilakukan sewaktu-waktu, tidak lagi statis seperti era konvensional sebelumnya. ZFS hadir dan siap menjawab kendala pada contoh kasus di atas dengan beberapa jurus andalan berikut :

  • Alokasi ruang berbasiskan file dengan ukuran sesuai kebutuhan
  • RAID dinamis
  • Lisensi gratis

Dengan tiga serangkai fitur tersebut, semua kendala dapat teratasi dengan mudah dan cepat. Anda dapat membuat sebuah partisi virtual layaknya menggunakan fdisk dengan ukuran yang dapat ditambah sewaktu-waktu sesuai kebutuhannya. Dengan begitu penggunaan disk menjadi efektif dan efisien.

Pengalokasikan ruang tidak lagi berupa partisi statis seperti konsep konvensional, melainkan bisa berbasiskan file dengan besaran yang disesuaikan dengan kebutuhan Anda. Sebut saja Anda membuat file berukuran 100GB di SDB, lalu menyulapnya menjadi partisi siap pakai bernama /home. Dalam sekejap semuanya tersaji dengan fungsi yang sama.

Sebut saja telah terjadi kendala teknikal di SDB atau Anda ingin upgrade kapasitas HDD SDB menjadi lebih besar. Cukup membuat file baru seukuran kebutuhan /home terkini di SDC, lalu salinlah datanya. Selanjutnya Anda bebas melepas SDB dan menggantinya dengan HDD yang baru. Hal ini tentunya tidak akan menimbulkan efek downtime yang terlalu lama, karena penggantian HDD umumnya dapat dilakukan kurang dari 15 menit saja.

Sebagai langkah preventif, Anda telah mengelus kening sekian lamanya dan sampai pada keputusan bahwa partisi /var dan /home perlu dibuat duplikasi karena lalu-lalang data di kedua partisi tersebut sangatlah tinggi. Dengan duplikasi, maka jika kelak terjadi kendala di HDD, Anda masih memiliki salinan terkini dan sistem dapat tetap berjalan tanpa harus melakukan menonaktifkan fungsi sistem.

Yang perlu Anda lakukan hanya membuat 2 buah file berukuran sama dan diposisikan di HDD yang berbeda. Sebut saja untuk duplikasi /home Anda membuat file bertajuk home0 di partisi /home [SDB] dan /data [SDC]. Dengan ZFS Anda dapat membuat sebuah partisi dengan konsep RAID 1 [mirroring] dengan anggota /home/home0 dan /data/home0. Jika terjadi kendala teknikal di SDC misalnya, Anda cukup melepas keanggotaan /data/home0 dari array RAID. Semuanya berlangsung secara cepat dan tanpa downtime.

Juga tidak ketinggalan keuntungan pamungkas yang digemari kawula muda sampai tua adalah lisensi gratis, sehingga Anda tidak perlu khawatir akan terjerat pasal-pasal hukum tertentu saat menggunakan ZFS.

Instalasi ZFS

Sampai pada artikel ini kelar saya tulis, ZFS masih belum tersedia secara default di Linux CentOS 6.4, tetapi hal tersebut bukan kendala berarti karena dapat diatasi dengan cara penambahan repositori saja dan instalasi dapat dilakukan dengan mudah. Angin segar ini berkat adanya porting yang dilakukan oleh pihak ZFSonLinux yang memungkinkan pengguna Linux menggunakan ZFS.

  1. Login ke dalam shell setara root, lalu eksekusi perintah di bawah ini untuk menambahkan repositori epel yang memuat ZFS.

    root@jangkrik [/]# yum localinstall --nogpgcheck http://archive.zfsonlinux.org/epel/zfs-release-1-2.el6.noarch.rpm
    Picu instalasi ZFS dengan perintah yum -y install zfs dan tunggu sampai selesai.
    root@jangkrik [/]# yum -y install zfs
  2. Selesai dengan instalasi dapat diperiksa dengan perintah zfs atau zpool dan akan menampilkan beragam parameter yang dapat digunakan.

“Sampai di tahap ini Anda telah berhasil melakukan instalasi ZFS [heem, gitu doang...] dan berikutnya dapat mengimplementasikan optimasi penggunaan disk.” —dit

Mainkan!

Di bagian ini akan dibahas beberapa hal dasar penggunaan ZFS berdasarkan fungsinya. Sebagai rujukan tersedia sebuah server dengan alokasi HDD dan partisi sebagai berikut :

Pratinjau : 
/dev/sda3 on / type ext4 (rw,usrjquota=quota.user,jqfmt=vfsv0)  
/dev/sda1 on /boot type ext4 (rw)  
/dev/sda8 on /terserah type ext4 (rw,usrjquota=quota.user,jqfmt=vfsv0)  
/dev/sda6 on /tmp type ext4 (rw,noexec,nosuid)  
/dev/sda5 on /usr type ext4 (rw,usrjquota=quota.user,jqfmt=vfsv0)  
/dev/sda2 on /var type ext4 (rw,usrjquota=quota.user,jqfmt=vfsv0)  
/dev/sdb1 on /data type ext4 (rw,usrquota) [/data]  
/dev/sdc1 on /cadangan type jfs (rw) [/cadangan]  

Filesystem Size Used Avail Use% Mounted on  
/dev/sda3 20G 1.2G 18G 7% /  
/dev/sda1 194M 97M 88M 53% /boot  
/dev/sda8 326G 195M 309G 1% /terserah  
/dev/sda6 9.7G 150M 9.0G 2% /tmp  
/dev/sda5 49G 3.5G 43G 8% /usr  
/dev/sda2 49G 565M 46G 2% /var  
/dev/sdb1 917G 151G 720G 18% /data  
/dev/sdc1 1.9T 1.3G 1.9T 1% /cadangan

Membuat Pool

Berkenalanlah dengan pool dalam ZFS yang merupakan nama dari sebuah partisi atau drive yang akan Anda buat. Sebut saja kita membutuhkan partisi /home berukuran 150GB untuk kebutuhan penyimpanan data situs dan mail klien. Buatlah sebuah file berukuran 150GB di /data [SDB] dengan nama home0. Untuk memudahkan prosesnya Anda dapat menggunakan perintah fallocate -l 150g /data/home0.

Lanjutkan dengan membuat pool bernama home menggunakan file home0 dengan perintah zpool create home /home/home0. Tidak berselang lama Anda sudah disajikan dengan partisi /home yang siap pakai dan dapat diperiksa dengan perintah df -h.

Pratinjau :  
root@jangkrik [~]# cd /data  
root@jangkrik [/data]# fallocate -l 150g home0  
root@jangkrik [/data]# zpool create home /data/home0  
root@jangkrik [/data]# df -h  
Filesystem Size Used Avail Use% Mounted on  
/dev/sda3 20G 612M 18G 4% /  
tmpfs 2.9G 0 2.9G 0% /dev/shm  
/dev/sda1 194M 97M 88M 53% /boot  
/dev/sda8 326G 195M 309G 1% /terserah  
/dev/sda6 9.7G 150M 9.0G 2% /tmp  
/dev/sda5 49G 3.5G 43G 8% /usr  
/dev/sda2 49G 564M 46G 2% /var  
/dev/sdb1 917G 151G 720G 18% /data  
home 147G 0 147G 0% /home

Status Pool

Untuk kebutuhan pemeriksaan atau monitoring pool yang telah dibuat, gunakanlah perintah zfs list atau zpool list. Sedangkan untuk mengetahui statistik semua pool yang ada menggunakan perintah zpool iostat -v.

Pratinjau :  
root@jangkrik [/data]# zfs list  
NAME USED AVAIL REFER MOUNTPOINT  
home 108K 147G 30K /home  

root@jangkrik [/data]# zpool list  
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT  
home 149G 123K 149G 0% 1.00x ONLINE -  

root@jangkrik [/data]# zpool status  
pool: home 
state: ONLINE  
scan: none requested  
config:  
NAME STATE READ WRITE CKSUM  
home 
     ONLINE 0 0 0 /data/home0 
     ONLINE 0 0 0  
errors: No known data errors

Upgrade Pool Size

Sejalan dengan waktu rupanya limitasi pool /home hampir dicapai, sehingga Anda membutuhkan ruang lebih untuknya. Misal Anda akan menambahkan ukuran partisi /home sebesar 50GB.

  1. Buat file baru di /data/home1 sebesar 50GB dengan perintah fallocate -l 50g /data/home1.
  2. Tambahkan file home1 ke dalam pool home dengan perintah zpool add home /data/home1.
  3. Periksa kondisi pool home terkini dengan perintah zpool list dan zpool status. Anda akan mendapati ukuran partisi /home berubah dari 149GB menjadi 199GB dengan anggota pool baru /data/home1.
Pratinjau :  
root@jangkrik [/data]# fallocate -l 50g home1  
root@jangkrik [/data]# zpool add home /data/home1  
root@jangkrik [/data]# zpool list  
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT  
home 199G 208K 199G 0% 1.00x ONLINE -  

root@jangkrik [/data]# zpool status  
pool: home  
state: ONLINE  
scan: none requested  
config:  
NAME home 
STATE READ WRITE CKSUM  
ONLINE 0 0 0 /data/home0  
ONLINE 0 0 0 /data/home1  
ONLINE 0 0 0  
errors: No known data errors

“Penambahan space ke dalam pool hanya dapat dilakukan searah. Dengan kata lain Anda tidak bisa menghapus keanggotaan dari pool. Untuk itu perhatikan dengan baik sebelum melakukan penambahan ke dalam pool agar tidak terjadi inefisiensi ruang.” — dit

Mirroring Pool

Contoh penggunaan berikutnya adalah implementasi RAID 1 atau mirroring di pool. Untuk itu saya menghapus pool home yang sudah dibuat sebelumnya dan membuat ulang dengan langkah yang sama di atas.

  1. Hapus pool home menggunakan perintah zpool destroy home.
  2. Membuat pool home yang baru dengan perintah zpool create home /data/home0 yang berukuran 150GB.
  3. Buat file baru bernama home0 di /cadangan [SDC] sebesar 150GB. Sebagai contoh kasus pula, saya menggunakan JFS untuk /cadangan, sehingga fallocate tidak bisa digunakan dalam pembuatan file. Jadi alternatifnya adalah menggunakan perintah dd if=/dev/zero of=/cadangan/home0 bs=1 count=0 seek=150G.
  4. Tambahkan file baru ke dalam pool home sebagai mirror-nya dengan perintah zpool attach home /data/home0 /cadangan/home0.
  5. Periksa status pool home terkini dengan perintah zpool list dan zpool status. Anda akan mendapati ukuran pool tetap 149GB, tetapi keanggotaan pool home telah berubah menjadi mirroring yang ditandai dengan mirror-0. Angka 0 dalam mirror-0 tersebut merupakan indeks, bukan tipe RAID 0. Anda akan mendapati kata resilvered di status pool yang merupakan proses sinkronisasi data antara /data/home0 ke /cadangan/home0.
Pratinjau :  
root@jangkrik [/data]# zpool destroy home  
root@jangkrik [/data]# zpool create home /data/home0  
root@jangkrik [/data]# fallocate -l 150g /cadangan/home0  
fallocate: /cadangan/home0: fallocate failed: Operation not supported  
root@jangkrik [/data]# dd if=/dev/zero of=/cadangan/home0 bs=1 count=0 seek=150G  
0+0 records in 0+0 records out 0 bytes (0 B) copied, 6.281e-06 s, 0.0 kB/s  
root@jangkrik [/data]# zpool add home /data/home0 /cadangan/home0  
invalid vdev specification use '-f' to override the following errors: /data/home0 is part of active pool 'home'  
root@jangkrik [/data]# zpool attach home /data/home0 /cadangan/home0  
root@jangkrik [/data]# zpool list  
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT  
home 149G 230K 149G 0% 1.00x ONLINE -  
root@jangkrik [/data]# zpool status  
pool: home  
state: ONLINE  
scan: resilvered 
97.5K in 0h0m with 0 errors on Sun Sep 15 01:55:51 2013  
config:  
NAME home 
STATE READ WRITE CKSUM  
ONLINE 0 0 0 mirror-0  
ONLINE 0 0 0 /data/home0  
ONLINE 0 0 0 /cadangan/home0  
ONLINE 0 0 0  
errors: No known data errors  
root@jangkrik [/data]#

“Jika sudah memiliki 2 file yang akan dibuat pool mirroring, maka dapat pula dilakukan dengan format perintah zpool create namapool mirror /source/file1 /source/file2.” — dit

Unmirroring Pool

Negasi dari proses sebelumnya Anda ingin mengubah pool home yang menerapkan duplikasi [mirroring] menjadi tanpa duplikasi. Untuk itu Anda cukup mengeksekusi perintah zpool detach home /cadangan/home0. Berikutnya periksa kondisi pool terkini dengan zpool status.

Pratinjau :  
root@jangkrik [/data]# zpool detach home /cadangan/home0  
root@jangkrik [/data]# zpool status  
pool: home  
state: ONLINE  
scan: resilvered 97.5K in 0h0m with 0 errors on Sun Sep 15 01:55:51 2013  
config:  
NAME home 
STATE READ WRITE CKSUM   
ONLINE 0 0 0 /data/home0  
ONLINE 0 0 0  
errors: No known data errors  
root@jangkrik [/data]#

“Di tahap ini pula dapat Anda bandingkan adanya perbedaan antara perintah zpool add dan zpool attach, yaitu keanggotaan yang dapat dihapus dari pool jika berupa RAID.” — dit

Raw ZFS Versus FreeNAS

Sebelum atau paska mengikuti artikel ini mungkin Anda membandingkan ZFS dengan salah satu aplikasi bernama FreeNAS yang beroperasi di lingkungan FreeBSD. Adalah benar FreeNAS juga mengimplementasikan ZFS dan sepintas yang membedakan hanya antarmuka grafis saja.

Di bagian ini tentunya bukan menuju kepada siapa yang terbaik, melainkan kapan Anda harus menggunakan ZFS. Berdasarkan infrastruktur yang telah ada, keamanan data [high availability backup], kemudahan proses restorasi serta aspek efisiensi, tentunya pengimplementasian sebaiknya dapat berbaur dengan infrastruktur yang telah ada atau berjalan.

Akan lebih mudah untuk dicerna jika diberikan contoh kasusnya. Sebut saja saat ini Anda telah mengelola beberapa server berbasis Linux dan ingin memperkuatnya dengan penerapan ZFS. Menyiapkan sebuah server baru yang selanjutnya difungsikan sebagai portal cadangan data menggunakan FreeNAS atau ZFS murni tentunya baik. Akan tetapi sentralisasi dapat menjadi masalah jika portal Anda sedang mengalami kendala teknikal [masalah jaringan, periferal rusak atau hal lainnya].

Untuk itu merujuk pada pemikiran tersebut serta pengalaman, saya pribadi masih tetap berpaut pada penerapan ZFS murni dan langsung di tiap server yang sudah ada. Adapun konsep pencadangan datanya dilakukan secara circular, dimana tiap server mencadangkan datanya ke server tetangganya. Dengan begitu Anda cukup menambahkan sebuah disk saja di tiap server sebagai media penyimpanan khusus yang dialokasikan untuk penempatan data cadangan.

Outro

Setelah mempelajari dan mengimplementasikan seluruh bahasan di atas, maka saat ini Anda telah berhasil menerapkan dan menggunakan ZFS dalam rangka manajemen ruang di HDD dengan beberapa contoh kasus serta kebutuhannya. Berbekalkan panduan sederhana di atas tentunya juga dapat memudahkan Anda dalam mengelola HDD dengan mudah dan cepat serta hasil akhir yang dapat diraih pula adalah zero downtime baik untuk kelangsungan sistem operasi maupun layanan server. Selamat mencoba.