Selasa, 06 September 2016

[Tutorial] FUSE (Filesystem In Userspace)

Nah, sebelum kita berbicara tentang FUSE, kita harus tahu dulu apa itu File System, File System adalah struktur logika yang digunakan untuk mengendalikan akses terhadap data yang ada pada harddisk. File sytem sendiri terdiri dari beberapa jenis dengan penggunaan algoritma yang berbeda-beda. Semakin baru jenis dari sebuah File System, maka semakin bagus pula kualitas dari File System tersebut.
IC69304
Gambar 1. Contoh File System
Sekarang kembali ke tema awal, apa itu FUSE?
Fuse adalah sebuah kerangka file system (sistem berkas)  pada area pengguna, yang mana terdiri dari sebuah modul kernel, pustaka pada area pengguna, dan sebuah utilitas untuk melakukan proses mount. Salah satu keistimewaan FUSE yang paling utama adalah diizikannya proses mount oleh pengguna biasa yang aman. Hal ini memberikan kemungkinan baru untuk menggunakan sistem berkas.
280px-FUSE_structure.svg
Gambar 2. Diagram Cara Kerja FUSE
Sebelum menggunakan FUSE, kita harus menginstallnya terlebih dahulu, caranya sebagai berikut :
  • Download fuse dari http://fuse.sourceforge.net/ pada bagian Download stable release
  • Extract file tar.gz dan masuk ke direktori FUSE. (tar –xvzf fuse-2.9.4.tar.gz)
  • Lakukan installasi FUSE dengan menggunakan hak akses super sudo, lalu ketikkan perintah-perintah berikut :
                        1. ./configure
                        2. make
                        3. make install
Nah,installasi selesai, dan fuse siap digunakan. Sekarang saya akan memberikan source code fuse sederhana, untuk selanjutnya, anda bisa memodifikasinya sesuai keinginan anda. Berikut source code nya :
#include <fuse.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
#include <sys/statfs.h>

static const char *dirpath = “/home/[User]/Documents”;

static int xmp_getattr(const char *path, struct stat *stbuf)
{
int res;
char fpath[1000];
sprintf(fpath,“%s%s”,dirpath,path);
res = lstat(fpath, stbuf);

if(res == 1)
{
return errno;
}
return 0;
}

static int xmp_getdir(const char *path, fuse_dirh_t h, fuse_dirfil_t filler)
{
char fpath[1000];
if(strcmp(path,“/”) == 0)
{
path=dirpath;
sprintf(fpath,“%s”,path);
}
else sprintf(fpath, “%s%s”,dirpath,path);
int res = 0;
DIR *dp;
struct dirent *de;
dp = opendir(fpath);
if(dp==NULL)
{
return errno;
}
while((de = readdir(dp))!=NULL)
{
res = filler(h, de->d_name, de->d_type);
if(res!=0) break;
}
closedir(dp);
return res;
}

static struct fuse_operations xmp_oper =
{
.getattr = xmp_getattr,

.getdir = xmp_getdir,
};

int main(int argc, char *argv[])
{
return fuse_main(argc, argv, &xmp_oper);
}
Untuk mengeksekusi program fuse tersebut, anda bisa menggunakan perintah gcc -Wall [nama file].c `pkg-config fuse –cflags –libs` -o [nama file], kemudian dijalankan dengan mengetikkan ./[nama file]/tmp/fuse.
Nah selanjutnya, anda bisa mengecek di /tmp/fuse, jika semua isi dari direktori ada, baik itu file maupun folder, itu tandanya anda berhasil. Selanjutnya anda bisa mengkreasikan lagi templete diatas.
Terakhir, untuk menghentikan FUSE, anda bisa menggunakan perintah fusermount -u /tmp/fuse.
Sekian Tutorial kali ini, semoga bermanfaat…

Tidak ada komentar:

Posting Komentar