"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:
- 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.
- 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.
- 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.
- 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.
- 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.
-
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
-
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.
- Buat file baru di /data/home1 sebesar 50GB dengan perintah fallocate -l 50g /data/home1.
- Tambahkan file home1 ke dalam pool home dengan perintah zpool add home /data/home1.
- 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.
- Hapus pool home menggunakan perintah zpool destroy home.
- Membuat pool home yang baru dengan perintah zpool create home /data/home0 yang berukuran 150GB.
- 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.
- Tambahkan file baru ke dalam pool home sebagai mirror-nya dengan perintah zpool attach home /data/home0 /cadangan/home0.
- 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.