System File

1. Jika kita jelaskan file system dari segi bahasa kita akan mendapatkan 2 buah kata dan pengertian:

a. File :  kumpulan informasi yang berhubungan dan  tersimpan di dalam secondary storage, secara konsep file mempunyai beberapa tipe ada yang bertipe Data terdiri dari character, numeric, dan binary ada juga file yang bertipe program.

System :  Suatu jaringan kerja dari prosedur-prosedur yang saling berhubungan, berkumpul bersama-sama untuk melakukan suatu kegiatan atau untuk menyelesaikan suatu sasaran tertentu.

b. Esensinya sistem terdiri dari:
1. komponen-komponen dalam sistem tersebut, mencakupRead More...Read More...
– perangkat keras/hardware,
– perangkat lunak/software,
– prosedur-prosedur/procedure,
– perangkat manusia/brainware, dan
– informasi/information itu sendiri;
2.serta fungsi-fungsi teknologi di dalamnya yaitu:
input,
– proses/process,
output,
– penyimpanan/storage dan
– komunikasi/communication.

Secara garis besar dan secara umum yang dimaksud dengan file system adalah sebuah metode pemberian nama pada file dan merupakan cara untuk menempatkannya ke dalam sebuah media penyimpan, termasuk juga penempatan file pada struktur direktori. Setiap sistem operasi memiliki metode yang berbeda-beda untuk menempatkan file dalam struktur hirarki (File System hirarkis merupakan minat riset awal dari Dennis Ritchie. Implementasi sebelumnya terbatas pada beberapa level, terutama IBM, bahkan pada database awal mereka seperti IMS. Setelah suksesnya Unix, Ritchie memperluas konsep file system ini ke dalam setiap objek dalam pengembangan Sistem Operasi berikutnya yang

dikembangkannya, seperti Plan 9 dan Inferno). Dengan adanya metode ini maka data-data yang tersimpan didalamnya untuk membuatnya mudah ditemukan dan diakses. File Systemdapat menggunakan media penyimpan data seperti HardDisk atau CD Rom.

Ada beberapa jenis tipe file system :

a.       File system Disk

b.       File System Flash

c.       File System Database

d.       File System Transaksional

e.       File System Jaringan

f.        File System untuk Tujuan khusus

g.       File System Journaling

Contoh beberapa filesytem :

a.       FAT : FAT merupakan File System yang digunakan dalam Sistem Operasi Windows.

b.       NTFS : NTFS merupakan file system standar untuk Windows NT termasuk windows 200, XP, Server 2003, Windows Server 2008 dan Wondows Vista. NTFS menggantikan file system FAT sebagai file system yang dipakai untuk Sistem Operasi Windows.

c.       ext2 : Ext2 atau second extended file system adalah file system untuk kernel Linux. Meskipun bukan termasuk file system journaling, tapi penerusnya yaitu ext3 menyediakan fitur journaling dan hampir sepenuhnya kompatibel dengan ext2.

d.       ext3 : Ext3 atau third extended file system adalah file system journaling yang umum digunakan dalam Sistem Operasi Linux. Ext3 merupakan pengembangan versi journaling dari file system ext2 yang hampir kompatibel secara keseluruhan dengan ext2.

2. Virtual file system adalah suatu lapisan perangkat lunak dalam kernel yang menyediakan interface sistem berkas untuk program userspace. VFS juga menyediakan suatu abstraksi dalam kernel yang mengijinkan implementasi sistem berkas yang berbeda untuk muncul. Ide dari VFS adalah meletakkan informasi di kernel untuk merepresentasikan keseluruhan tipe sistem berkas, dan juga terdapat sebuah fungsi untuk setiap operasi yang dimiliki sistem berkas. Sehingga, untuk setiap system call seperti fungsi read(), write(), open(), dan lainnya, kernel akan mensubstitusikannya menjadi actual function yang dimiliki oleh setiap sitem berkas dengan berbagai tipe

Dalam sebuah system file modern haruslah mampu mengimplementasikan berbagai berkas system yangm berbeda dalam wktu yang bersamaan. Salah satu teknik untuk mengantisifasi hal tersebut adalah dengan menggunakan Virtual File System ini.  Karena efesiensiya maka VSF ini telah banyaj digunakan dalam beberapa system operasi. VFS menggunakan konsep object oriented dalam mengimplementasikan sistem berkas. Di dalam VFS terdapat sebuah berkas yang merepresentasikan seluruh tipe sistem berkas yang ada, berkas ini dinamakan common file model. Berkas inilah yang menggunakan konsep object oriented, yang di dalamnya terdapat struktur data dan method yang diimplementasikan.

Contoh dari virtual file system :

3. Ada beberapa alasan kenapa harus menggunakan visrtual file system :

Ø  Dalam sebuah system file modern haruslah mampu mengimplementasikan berbagai berkas system yang berbeda dalam waktu yang bersamaan. Salah satu teknik untuk mengantisipasi hal tersebut adalah dengan menggunakan Virtual File System.

Ø   VFS (Virtual File System) juga dapat mengenali data yang menggunakan File Sistem lain.

Ø  Supaya berbagai system berkas yang berbeda bisa di akses oleh aplikasi computer dengan cara yang seragam.

4.

VFS Dentry

Dentry atau Directory Entry merupakan suatu struktur data yang bertugas sebagai penerjemah dari suatu nama berkas ke inode-nya. Dentry disimpan dalam chace di VFS (dchace). Beberapa informasi yang disimpan dalam dentry adalah name, pointer to inode, pointer to parent dentry, list head of children, chains for lots of lists, dan use count. Beberapa operasi dalam VFS dentry antara lain D_compare, D_delete, dan D_release.

Gambar Ilustrasi VFS Dentry

VFS Inode

VFS inode adalah abstraksi VFS untuk berkas. Setiap berkas, directory, dan data lainnya pada VFS direpresentasikan oleh satu dan hanya satu VFS inode. VFS inode hanya terdapat di memori kernel dan disimpan di inode chace selama masih dibutuhkan oleh sistem. Beberapa informasi yang disimpan oleh VFS inode yaitu:

  • Device. Menunjukan device identifier dari suatu device yang menyimpan berkas, ataupun directory.
  • Inode Number. Merupakan nomor inode yang unik dalam sistem berkas.
  • Mode. Menggambarkan apa yang direpresentasikan oleh VFS inode.
  • User ID. Merupakan identifier bagi pemilik berkas.
  • Time. Menunjukkan kapan pembuatan, modifikasi, dan penulisan suatu berkas.
  • Blocksize. Menunjukkan ukuran dari block yang digunakan oleh berkas.
  • Inode operations. Merupakan pointer ke suatu routine yang melakukan berbagai operasi pada inode.
  • Count. Menunjukkan berapa kali suatu sistem telah menggunakan suatu inode.
  • Lock. Digunakan untuk mengunci VFS inode.
  • Dirty. Mengindikasikan bahwa telah terjadi penulisan pada VFS inode, sehingga perubahan yang terjadi juga harus dituliskan ke sistem berkas yang sesungguhnya.
  • File system specific information . Menunjukkan informasi khusus yang dibutuhkan oleh suatu inode.

VFS Superblock

Setiap sistem berkas yang di-mount akan direpresentasikan oleh sebuah VFS Superblock. Superblock digunakan untuk menyimpan informasi mengenai partisi tersebut. Pada dasarnya superblock merupakan suatu struktur data yang menyimpan beberapa informasi sebagai berikut:

  • Device. Merupakan suatu device identifier, contohnya /dev/hda1 adalah harddisk pertama yang terdapat pada sistem memiliki device identifier 0x300.
  • Inode Pointer. Merupakan suatu pointer yang menunjuk ke inode pertama pada sistem berkas.
  • Blocksize. Menunjukkan ukuran suatu block dari sistem berkas, contohnya 1024 bytes.
  • Superblock operation. Merupakan suatu pointer ke sekumpulan superblock routine (fungsi) dari sistem berkas, contohnya read, write, dan sebagainya.
  • File System type. Menunjukkan tipe dari sistem berkas, contohnya EXT2, FAT, NTFS.
  • File System specific . Merupakan suatu pointer ke informasi yang dibutuhkan oleh sistem berkas.

Gambar Ilustrasi VFS Superblock

 

Beberapa operasi yang terdapat dalam VFS Superblock adalah alloc_inode, read_inode, write_inode, put_inode, delete_inode, dan sebagainya.

5. Secara ringkas dapat kisa jelaskan bahwa FUSE adalah modul yang mengijinkan pengguna untuk membuat  file  system tanpa perlu memodifikasi kode pada kernel. Fuse yaitu  file system in User Space.

Fuse merupakan sebuah kerangka sistem berkas pada area pengguna. terdiri dari sebuah modul kernel (fuse.ko), sebuah pustaka pada area pengguna, dan sebuah utilitas untuk melakukan proses mount (fusermount). 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. salah satu contoh adalah sshfs, sebuah sistem berkas yang beroperasi pada tingkatan jaringan yang menggunakan protokol sftp. Semenjak proses mount() merupakan operasi yang membutuhkan pengguna yang memiliki hak khusus, sebuah program pembantu (fusermount) dibutuhkan untuk melakukannya yang terpasang dengan tingkatan pengguna root. Implikasi dengan menyediakan operasi mount untuk pengguna biasa adalah pemilik operasi mount tidak dapat menggunakan kemampuannya untuk melakukan hal-hal yang dapat membahayakan sistem. Syarat-syarat yang harus dipenuhi seiring dengan adanya keadaan tersebut adalah sebagai berikut :

  • Pemilik proses mount seharusnya tidak dapat melakukan operasi untuk meninggkatkan hak aksesnya dengan bantuan sistem berkas yang dimount
  • Pemilik proses mount seharusnya tidak dapat melakukan akses yang terlarang untuk mendapatkan informasi dari pengguna lainnya dan proses-proses yang dimiliki oleh pengguna super (root)
  • Pemilik proses mount seharusnya tidak dapat mengakibatkan perbuatan yang tidak diinginkan proses pengguna lain ataupun proses-proses yang dimiliki oleh pengguna super.

Meskipun demikian keadaan yang tidak diinginkan berkenaan dengan keistimewaan yang dimiliki oleh FUSE masih dapat terjadi dengan cara sebagai berikut:

  • Pemilik proses mount dapat meningkatkan hak aksesnya dengan cara :
  • Membuat sebuah sistem berkas yang berisikan sebuah berkas alat, yang kemudian membukanya.
  • Membuat sebuah sistem berkas yang berisikan sebuah aplikasi suid ataupu sgid, yang kemudian mengeksekusinya.

7.

  • MOUNTLO  : merupakan Loopback mount filesystem-atau disk-gambar tanpa menggunakan akses root. Semua sistem file yang ada didukung dan ada pada kernel LINUX.  Ia bekerja dengan me-mount image. Contoh User Mode Linux dan exporing dengan FUSE : Meskipun pendekatan kasar, tapi cukup pas,  Dengan menggunakan BloggerFS seseorang dapat memanipulasi posting di blog-nya seolah-olah mereka file. Pengguna hanya perlu melewati titik mounting, alamat blog anda (contoh Blogger) dan username/ password.
  • clamFS : adalah file system user space untuk antivirus Linux file analisis real-time melalui daemon clamd. Menggunakan lib Fuse dan modul kernel Linux untuk menyediakan sistem file. Biasanya, program atau librarynya menggunakan glibcopen() untuk mendapatkan file descriptor. Glibc memanggil kernel untukmembuka file daripada yang digunakan oleh file system. Jika file tersebut ada pada file system call buka dari VFS ClamFS diarahkan ke user-space oleh FUSE. Panggilan libFuse ClamFS untuk berkomunikasi dengan FUSE dan melalui VFS.
  • MP3FS : merupakan read-only FUSE yang meng-encode audio format (saatini FLAC) ke mp3 saat membuka dan membacanya. Sehingga memungkunkan unutk membuka file flac pada perangkat lunak yang hanya bias membaca mp3.

Cara menggunakannya adalah :

mp3fs [-b bitrate]  musicdir mountpoint  [-o fuse_optons]

  • filterFSFilterFS (Filter File System) : adalah file system berbasis FUSE virtual yang memungkinkan penyaringan systemfile yang ada. Filter terdiri dari include atau  mengecualikan aturan yang disimpan dalam rantai filter, mirip dengan cara IPtables. Virtual file sistem yang dapat diakses melalui titik mount tertentu, dimana semua file yang disertakan dan dikecualikan menurut aturan yang ditemukan dalam rantai filter. Aturan dapat diberikan dengan parameter baris perintah atau opsi dalam sistem file fstab.
  • Gcfuse : adalah sebuah program yang memungkinkan  untuk me-mount Nintendo GameCube DVD disk image sebagai bagian read-only dari systemfile Linux. Hal ini memungkinkan pengguna untuk menelusuri struktur direktori dan membaca file masuk. Selanjutnya, gcfus akan membuat file khusus yang disebut metadata dalam direktori root dari filesystem mount berisi hal-hal menarik lainnya seperti judul dan penerbit game.

Shift

//Mendeklarasikan versi interface yang digunakan

#define FUSE_USE_VERSION 28

Include header :

#include <stdlib.h>

#include <fuse.h> /* berisi definisi fungsi dasar untuk implementasi filesystem */

#include <stdio.h>

#include <string.h>

#include <errno.h> /* berisi definisi dari error number */

#include <fcntl.h> /* berisi definisi dari file option */

Mendefinisikan variabel global yang terdiri dari path dan data dari file /hello

static const char *hello_str = “Hello World!\n”;

static const char *hello_path = “/hello”;

Fungsi ini mengembalikan metadata dari sebuah file tertentu yang didefinisikan oleh path dalam struktur stat.

static int hello_getattr(const char *path, struct stat *stbuf)

{

int res = 0; /* temporary result */

Reset penyimpanan untuk struktur stat

memset(stbuf, 0, sizeof(struct stat));

Cek file atribut yang akan dikembalikan, file sistem yang akan dibuat hanya memiliki 2 file (1 file regular dan 1 directory)

if(strcmp(path, “/”) == 0) {

st_mode berisi file atribut, S_IFDIR, menandai bahwa suatu file merupakan sebuah directory, dan file permission diubah menjadi 0755

stbuf->st_mode = S_IFDIR | 0755;

st_nlink berisi jumlah dari hardlink, file ini akan menjadi sebuah directory dan tidak akan memiliki directory lain dan akan memiliki 2 link (directory tersebut dan “.”).

stbuf->st_nlink = 2;

}

Jika user meminta permission dari file /hello

else if(strcmp(path, hello_path) == 0) {

Set file atribut menjadi sebuah file regular (S_IFREG) dan permission 0444

stbuf->st_mode = S_IFREG | 0444;

file /hello adalah satu dari 2 file di dalam file sistem ini, sehingga hanya akan memiliki 1 hard link menunjuk ke file tersebut

stbuf ->stnlink = 1;

Ukuran file sama dengan ukuran dari hello_str

stbuf->st_size = strlen(hello_str);

}

Jika user meminta permission dari file lain, kembalikan nilai negatif ENOENT, dimana terdefinisi pada errno.h, yang artinya “Sebuah komponen dari path path tidak ada, atau path adalah empty string.”

else

res = -ENOENT;

return res;

}

path adalah path dari directory dimana kita akan membaca konten.

buf akan menampung hasil pembacaan konten.

filler adalah fungsi fuse_fill_dir_t yang mana digunakan untuk menambahkan konten pada directory.

static int hello_readdir(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi) {

(void) offset;

(void) fi;

Cek jika user meminta konten dari directory root, dan jika tidak ada kembalikan berupa error number

if(strcmp(path, “/”) != 0)

return –ENOENT;

Tambahkan directory entry “.” dan “..”

filler(buf, “.”, NULL, 0);

filler(buf, “..”, NULL, 0);

Tambahkan file hello

filler(buf, hello_path + 1, NULL, 0);

return 0;

}

Fungsi ini untuk mengecek user apa pun yang diizinkan untuk membuka file /hello dengan flag yang diberikan dari struktur fuse_file_info

static int hello_open(const char *path, struct fuse_file_info *fi) {

Jika user meminta file lain selain /hello, beritahu bahwa file tidak ada

if(strcmp(path, hello_path) != 0)

return –ENOENT;

Jika user membuka file lebih dari hanya membaca file, maka beritahukan bahwa user tidak memiliki permission untuk itu

if((fi->flags & 3) != O_RDONLY)

return –EACCES;

Jika selain kemungkinan kondisi yang sudah dijabarkan, beritahukan kpd user bahwa file dpt dibuka.

return 0;

}

path adalah path dari file yang akan dibaca.

buf adalah buffer untuk menyalin informasi dari file.

size adalah ukuran dari buffer, jumlah data yang akan dibaca.

offset adalah tempat dimana kita memulai pertama kali membaca.

fi berisi informasi tambahan tentang tipe akses.

static int hello_read(const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fi) {

(void) fi;

len akan berisi jumlah byte yang akan dibaca

size_t len;

User tidak dapat membuka file selain /hello

if(strcmp(path, hello_path) != 0)

return –ENOENT;

Set jumlah karakter yang akan dibaca sebagai panjang dari hello_str

len = strlen(hello_str);

Cek jika jumlah data yang dibaca tidak melebihi panjang data, jika ya, kembalikan dgn ukuran yang lebih kecil, kemudian salin data ke hello_str

if(offset < len) {

if(offset + size > len)

size = len – offset;

memcpy(buf, hello_str + offset, size);

} else

size = 0;

return size;

}

Fungsi yang telah diimplementasikan harus terdeklarasi pada struktur fuse_operations

static struct fuse_operations hello_oper = {

.getattr = hello_getattr,

.readdir = hello_readdir,

.open = hello_open,

.read = hello_read,

};

main() hanya memiliki satu fungsi, fuse_main()

int main(int argc, char *argv[]) {

return fuse_main(argc, argv, &hello_oper, NULL);

}

Compile dengan gcc

gcc –Wall `pkg-config fuse –cflags –libs` hello.c hello

pkg-config fuse –cflags –libs, harus mengembalikan nilai sama seperti “-D_FILE_OFFSET_BITS64 –l/usr/include/fuse –pthread –lfuse –lrt=“

Jalankan dengan satu parameter berupa mount point

$ mkdir /tmp/fuse

$ ./hello /tmp/fuse

Setelah itu, seharusnya kita akan memiliki sebuah file dalam directory /tmp/fuse bernama hello, yang memiliki konten Hello World!

$ ls /tmp/fuse

$ ./hello /tmp/fuse

$ ls –l /tmp/fuse

$ cat /tmp/fuse/hello

Hello World!

$

10 thoughts on “System File

      1. Kakak, baru saya buka dan benar-benar membantu ToT Khususnya untuk menyiapkan diri demo modul terakhir sebelum FP (karena asdos pasti gak bakal terima alasan ‘hasil googling’ -_-) Makasih banyak, TC13 juga 🙂

        Like

Leave a comment