Kamis, 02 April 2009

File Sistem

File Sistem di Linux

Linux virtual file sistem

Objek dasar dalam layer-layer virtual file system

1. File

File adalah sesuatu yang dapat dibaca dan ditulis. File ditempatkan pada memori. Penempatan pada memori tersebut sesuai dengan konsep file deskriptor yang dimiliki unix.

2. Inode

Inode merepresentasikan objek dasar dalam file sistem. Inode bisa saja file biasa, direktori, simbolik link dan lain sebagainya. Virtual file sistem tidak memiliki perbedaan yang jelas di antara objek, tetapi mengacu kepada implementasi file sistem yang menyediakan perilaku yang sesuai. Kernel tingkat tinggi menangani objek yang berbeda secara tidak sama.

File dan inode hampir mirip diantara keduanya. Tetapi terdapat perbedaan yang penting diantara keduanya. Ada sesuatu yang memiliki inode tetapi tidak memiliki file, contohnya adalah simbolik link. Ada juga file yang tidak memiliki inode seperti pipes dan socket.

3. File sistem

File system adalah kumpulan dari inode-inode dengan satu inode pembeda yaitu root. Inode lainnya diakses mulai dari root inode dan pencarian nama file untuk menuju ke inode lainnya.

File sistem mempunyai beberapa karakteristik yang mencakup seluruh inode dalam file sistem. Salah satu yang terpenting adalah blocksize.

4. Nama inode

Semua inode dalam file sistem diakses melalui namanya. Walaupun pencarian nama inode bisa menjadi terlalu berat untuk beberapa sistem, virtual file sistem pada linux tetap memantau cache dan nama inode yang baru saja terpakai agar kinerja meningkat. Cache terdapat di memori sebagai tree, ini berarti jika sembarang inode dari file terdapat di dalam cache, maka parent dari inode tersebut juga terdapat di dalam cache.

Virtual file system layer menangani semua pengaturan nama path dari file dan mengubahnya menjadi masukan di dalam cache sebelum mengijinkan file sistem untuk mengaksesnya. Ada pengecualian pada target dari simbolik link, akan diakses file sistem secara langsung. File sistem diharapkan untuk menginterpretasikannya.

Operasi-operasi dalam inode

Linux menyimpan cache dari inode aktif maupun dari inode yang telah terakses sebelumnya. Ada 2 path dimana inode ini dapat diakses. Yang pertama telah disebutkan sebelumnya, setiap entri dalam cache menunjuk pada suatu inode dan menjaga inode tetap dalam cache. Yang kedua melalui inode hash table. Setiap inode mempunyai alamat 8 bit sesuai dengan alamat dari file sistem superblok dan nomor inode. Inode dengan nilai hash yang sama kemudian dirangkai di doubly linked list.

Perubahan pada cache melibatkan penambahan dan penghapusan entri-entri dari cache itu sendiri. Entri-entri yang tidak dibutuhkan lagi akan di unhash sehingga tidak akan tampak dalam pencarian berikutnya.

Operasi diperkirakan akan mengubah struktur cache harus dikunci selama melakukan perubahan. Unhash tidak memerlukan semaphore karena ini bisa dilakukan secara atomik dalam kernel lock. Banyak operasi file memerlukan 2 langkah proses. Yang pertama adalah melakukan pencarian nama di dalam direktori. Langkah kedua adalah melakukan operasi pada file yang telah ditemukan. Untuk menjamin tidak terdapatnya proses yang tidak kompatibel diantara kedua proses itu, setelah proses kedua, virtual file sistem protokol harus memeriksa bahwa parent entry tetap menjadi parent dari entri childnya. Yang menarik dari cache locking adalah proses rename, karena mengubah 2 entri dalam sekali operasi.

Jenis-jenis file sistem di linux

EXT2 file sistem

a. Keterangan

EXT2 adalah file sistem yang ampuh di linux. EXT2 juga merupakan salah satu file sistem yang paling ampuh dan menjadi dasar dari segala distribusi linux. Pada EXT2 file sistem, file data disimpan sebagai data blok. Data blok ini mempunyai panjang yang sama dan meskipun panjangnya bervariasi diantara EXT2 file sistem, besar blok tersebut ditentukan pada saat file sistem dibuat dengan perintah mk2fs. Jika besar blok adalah 1024 bytes, maka file dengan besar 1025 bytes akan memakai 2 blok. Ini berarti kita membuang setengah blok per file.

EXT2 mendefinisikan topologi file sistem dengan memberikan arti bahwa setiap file pada sistem diasosiasiakan dengan struktur data inode. Sebuah inode menunjukkan blok mana dalam suatu file tentang hak akses setiap file, waktu modifikasi file, dan tipe file. Setiap file dalam EXT2 file sistem terdiri dari inode tunggal dan setiap inode mempunyai nomor identifikasi yang unik. Inode-inode file sistem disimpan dalam tabel inode. Direktori dalam EXT2 file sistem adalah file khusus yang mengandung pointer ke inode masing-masing isi direktori tersebut.

gambar struktur ext2 file sistem

b. Inode dalam EXT2

Inode adalah kerangka dasar yang membangun EXT2. Inode dari setiap kumpulan blok disimpan dalam tabel inode bersama dengan peta bit yang menyebabkan sistem dapat mengetahui inode mana yang telah teralokasi dana inode mana yang belum. MODE: mengandung 2 informasi, inode apa dan ijin akses yang dimiliki user. OWNER INFO: user atau grop yang memiliki file atau direktori SIZE: besar file dalam bytes TIMESTAMPS: kapan waktu pembuatan inode dan waktu terakhir dimodifikasi. DATABLOKS: pointer ke blok yang mengandung data.

EXT2 inode juga dapat menunjuk pada device khusus, yang mana device khusus ini bukan merupakan file, tatapi dapat menangani program sehingga program dapat mengakses ke device. Semua file device di dalam drektori /dev dapat membantu program mengakses device.

c. Superblok dalam EXT2

Superblok mengandung informasi tentang ukuran dasar dan bentuk file sistem. Informasi di dalamnya memungkinkan file sistem manager untuk menggunakan dan merawat file sistem. Biasanya, hanya superblok di blok group 0 saat file sistem di-mount tetapi setiap blok grup mengandung duplikatnya untuk menjaga jika file sistem menjadi rusak. Informasi yang dikandung adalah:

a. Magic Number

meyakinkan software bahwa ini adalah superblok dari EXT2 file sistem.

b. Revision Level

menunjukkan revisi mayor dan minor dari file sistem.

c. Mount Count dan Maksimum Mount Count

menunjukkan pada sistem jika harus dilakukan pengecekan dan maksimum mount yang diijikan sebelum e2fsck dijalankan.

d. Blocks per Size

besar blok dalam file sistem, contohnya 1024 bytes.

e. Blocks per Group

benyaknya blok per group.

f. Block Group Number

nomor blok group yang mengadung copy dari superblok.

g. Free Blocks

banyaknya blok yang kosong dalam file sistem.

h. Free Inode

banyak inode kosong dalam file sistem.

i. First Inode

nomor inode dalam inode pertama dalam file sistem, inode pertama dalam EXT2 root file sistem adalah direktori "/".

EXT3 file sistem

EXT3 adalah peningkatan dari EXT2 file sistem. Peningkatan ini memiliki beberapa keuntungan, diantaranya:

a. Setelah kegagalan sumber daya, "unclean shutdown", atau kerusakan sistem, EXT2 file sistem harus melalui proses pengecekan dengan program e2fsck. Proses ini dapat membuang waktu sehingga proses booting menjadi sangat lama, khususnya untuk disk besar yang mengandung banyak sekali data. Dalam proses ini, semua data tidak dapat diakses.

Jurnal yang disediakan oleh EXT3 menyebabkan tidak perlu lagi dilakukan pengecekan data setelah kegagalan sistem. EXT3 hanya dicek bila ada kerusakan hardware seperti kerusakan hard disk, tetapi kejadian ini sangat jarang. Waktu yang diperlukan EXT3 file sistem setelah terjadi "unclean shutdown" tidak tergantung dari ukuran file sistem atau banyaknya file, tetapi tergantung dari besarnya jurnal yang digunakan untuk menjaga konsistensi. Besar jurnal default memerlukan waktu kira-kira sedetik untuk pulih, tergantung kecepatan hardware.

b. Integritas data

EXT3 menjamin adanya integritas data setelah terjadi kerusakan atau "unclean shutdown". EXT3 memungkinkan kita memilih jenis dan tipe proteksi dari data.

c. Kecepatan

Daripada menulis data lebih dari sekali, EXT3 mempunyai throughput yang lebih besar daripada EXT2 karena EXT3 memaksimalkan pergerakan head hard disk. Kita bisa memilih tiga jurnal mode untuk memaksimalkan kecepatan, tetapi integritas data tidak terjamin.

d. Mudah dilakukan migrasi

Kita dapat berpindah dari EXT2 ke sistem EXT3 tanpa melakukan format ulang.

Reiser file sistem

Reiser file sistem memiliki jurnal yang cepat. Ciri-cirinya mirip EXT3 file sistem. Reiser file sistem dibuat berdasarkan balance tree yang cepat. Balance tree unggul dalam hal kinerja, dengan algoritma yang lebih rumit tentunya.

Reiser file sistem lebih efisien dalam pemenfaatan ruang disk. Jika kita menulis file 100 bytes, hanya ditempatkan dalam satu blok. File sistem lain menempatkannya dalam 100 blok. Reiser file sistem tidak memiliki pengalokasian yang tetap untuk inode. Resier file sistem dapat menghemat disk sampai dengan 6 persen.

X file sistem

X file sistem juga merupakan jurnaling file sistem. X file sistem dibuat oleh SGI dan digunakan di sistem operasi SGI IRIX. X file sistem juga tersedia untuk linux dibawah lisensi GPL. X file sistem mengunakan B-tree untuk menangani file yang sangat banyak. X file sistem digunakan pada server-server besar.

Proc file sistem

proc file sistem menunjukkan bagaimana hebatnya virtual file sistem yang ada pada linux. Proc file sistem sebenarnya tidak ada secara fisik, baik subdirektorinya, maupun file-file yang ada di dalamnya. Proc file sistem diregister oleh linux virtual file sistem, jika virtual file sistem memanggilnya dan meminta inode-inode dan file-file, proc file sistem membuat file tersebut dengan informasi yang ada di dalam kernel. Contohnya, /proc/devices milik kernel dibuat dari data struktur kernel yang menjelaskan device tersebut.

Pembagian file sistem secara ortogonal

Shareable dan Unshareable

1. Shareable

Isinya dapat dishare (digunakan bersama) dengan sistem lain, gunanya untuk menghemat tempat.

2. Unshareable

Isinya tidak dapat dishare(digunakan bersama) dengan sistem lain, biasanya untuk alasan keamanan.

Variabel dan Static

1. Variabel

Isinya sering berubah-ubah.

2. Static

Sekali dibuat, kecil kemungkinan isinya akan berubah. Bisa berubah jika ada campur tangan sistem admin.

NETWORK FILE SYSTEM

Protokol NFS

Jika Anda menggunakan UNIX workstation, Anda akan memerlukan NFS untuk menghubungkan File system-files system yang ada. Sistem Solaris 2.5 mendukung dua versi protokol NFS. Versi 2 NFS di implementasikan pada tahun 1984 dan direlease pada SunOS 2.0. Versi 3 dibuat tahun 1992 ketika beberapa grup bergabung untuk membuatnya, dan diumumkan pada tahun 1994 pada konferensi USENIX di Boston.

Versi 3 ini masih baru untuk beberapa mesin, Jadi pilihannya tergantung pada pemakai, jika tidak dapat menggunakan Versi 3, maka sebagai default digunakan versi 2.

Ide dasar NFS cukup sederhana. Ketika kita menambahkan suatu disk pada sistem UNIX, maka kita menggabungkan disk itu pada file system yang sudah ada dengan menggunakanperintah mount. Disk yang baru membentuk cabang baru dari tiga struktur. Kita dapat berpindah ke dalamnya dengan perintah cd dan mengakses file-filenya. Dengan NFS Kita melakukan hal yang sama. Kita sebagai client, memberikan perintah mount yang dikirimkan ke remote server, dan bagian dari struktur file system menggabungkan lokal file system. Server sekarang mempunyai daftar mesin yang diijinkan mengakses file system tersebut.

Pada SunOS, daftar tersebut terdapat pada file yang bernama /etc/exports. Pada Solaris, daftar dikontrol oleh perintah share, yang dapat ditemukan pada /etc/dfs/dfstab. Ketika proses pada client mengakses remote file dengan membaca system, sebagai contoh, maka panggilan sistem tersebut akan dikembalikan ke network dengan menggunakna protokol NFS. Server mengecek validitas dari request, dan menampilkan operasi yang diinginkan.

Sekali kita telah me-mount remote file system pada satu struktur file, kapanpun kita menginginkan file pada tempat kita melakukan mount, sytem akan menerjemahkan perintah itu ke dalam NFS request dan mengirimkan ke network dari server. Server akan mengeksekusi permintaan tersebut dan akan mengembalikan kepada kernel. Sebagai balasannya, kernel akan memberikan resume ke proses jika permintaan itu dilayani oleh local disk.

NFS protokol mengasumsikan bahwa server tidak menahan kondisi apapun dari client. Sebagai contoh, UNIX yang normal membaca panggilan sistem mengingan seberapa jauh proses yang berbeda harus membaca suatu file yang ditulis. Panggilan yang berurut dapat digunakan suatu file dari awal hingga akhir. NFS akan memberikan “ dimana kita sekarang “ pada satu client, dan ketika menscan suatu file, ini merupakan kerjaan client untuk mengirimkan perintah-perintah membaca dan masing-masingnya berisi posisi dan ukuran informasi.

Jadi dalam hal ini server tidak cerdas. Ia tidak tahu menahu tentang apa-apa ynag dilakukan user. Client melakukan beberapa hal untuk efisiensi, yaitu : mengingan posisi, dan menyimpan informasi sehingga tidak harus mengulang dengan menelusuri jaringan kembali.

Tujuan awal dari desain NFS serndiri adalah agar remote file system tidak harus terikat pada UNIX, sehingga tidak kaku untuk menggunakan UNIX file system. Maka tujuan untuk membuat suatu system yang dapat mensupport berbagai tipe file sisyem yang ada telah terlaksana.

NFS server stateless. Karena secara sedern\hana ia mengirimkan permintaan transaksi dan melakukan proses. Setiap permintaan adalah kejadian yang independent dan secara teori, pengapdate-an file dapat terjadi dalam berbagai cara. Statelessness merupakan criteria desain asli dari NFS yang dapat mencegah dari crash recovery. Ketika server crash, client cukup menunggu sampai server kembali jalan dan meneruskan operasi.

NFS versi 3

Masalah terbesar dari NFS versi 2 adalah kebutuhan server NFS untuk melakukan penulisan secara sinkron. Ketika satu client memberikan permintaan untuk menulis, ia mengirimkan satu RPC yang mengatakan “ Tulis data ini pada posisi ini dan ini pada file. Server tidak dapat membalas RPC ini dengan menjawab “dane” sampay data benar-benar telah tersimpan pada media penyimpanan yang aman, antara lain Hardisk ataupun magnetik disk. Jika dikatakan “OK” ketika ia masih ada di memory dan tiba-tiba sistem crash. sebelum sempat menulisnya ke dalam media penyimpanan, maka kemudian file berada dalam kondisi yang tidak konsisten karena client mengira bahwa ia menulis data yang sebenarnya tidak ada pada disk. Server harus melakukan penulisan dan tidak mengembalikan hasilnya sampai data benar-benar telah tertulis pada disk. Client harus menunggu sampai operasi write telah selesai.

Hal ini menghasilkan bottle neck untuk pengimplementasian NFS. Beberapa sistem memberikan kondisi tidak aman untuk mode menulis dimana data ditahan pada memori server dan harapan client untuk tidak sering terjadi crash.

Saat ini data ditulis pada disk. Sehingga jika sistem crash sistem akan menuliskan data yang belum senpat di save sebelum melakukan bootstraping.

Versi 3 meningkatkan performansi dengan mengijinkan client untuk memilih transaksi asyncronous dan kemudian mengirimkan perintah yang mengatakan “ ok dan tulis data pada disk”. Operasinya dipenuhi dengan “ write verifier” .

Versi 3 mengijinkan NFS menggunakan hubungan TCP/IP pada remote machine dibandingkan dengan menggunakan UDP. Penggunaan UDP justru kemunduran karena kelambatannya. Pemikiran bahwa TCP/IP menyebabkan terlalu banyak protokol yang tidak digunakna dan otomatis akan menurunkan kecepatan operasi NFS. dDisainer NFS kemudian menemukan bahwa ada kebutuhan untuk memberikan banyak layanan dari TCP/IP, seperti reliability, error recovery, congestion control, timeout dan seterusnya. Kode UDP menjadi dapat diimplementasikan pada aspek tertentu dari TCP/IP. Agar adil, kecepatan meningkat dengan meningkatnya kecepatan prosesor dimana disain NFS yang asli membuat protokol TCP semakin efisien.

Versi 3 memiliki tambahan performansi dengan mengurangi protokol yang menganggur ketika mengembalikan informasi direktori. Tujuannya adalah untuk mendukung pada kondisi yang sering terjadi.

Versi 3 menyediakan beberapa help untuk client untuk mempunyai cache informasi yang disimpan pada server.

Akhirnya Versi 3 support file 64-bit.

Oleh karena itu, gunakan versi 3 jika dapat, karena keuntungan diatas, dan tentu saja semampuan internetwork pada implementasi sebelumnya juga menjadi salah satu tujuan pendesainannya.

Tidak ada komentar:

Posting Komentar