linux file management

advertisement
TUGAS IF-3191 SISTEM OPERASI
LINUX FILE MANAGEMENT
(DRAFT RESUME)
Oleh :
Rahadian Bayu P.
:
13501003
A Ais Prayogi
:
13501035
Gede Serikastawan
:
13501063
Program Studi Informatika
Departemen Teknik Informatika
Institut Teknologi Bandung
2003
Linux File Management
1. File System
File System adalah suatu cara operating system untuk menyimpan dan membaca data dari
hard disk. Pada file system, disimpan beberapa macam objek. Objek yang tersimpan
dalam file system dan terlihat oleh user biasa adalah file. Objek yang tak terlihat antara
lain inode dan superblock.
File system ada bermacam macam antara lain FAT32, DOS, ext2, ext3, NTFS, dan OS / 2
HPFS.
Pada kernel Linux, telah dikembangkan cara untuk berinteraksi antar jenis file system ini.
Cara itu adalah Virtual File System (VFS). Dengan VFS, pengguna Linux dapat
menggunakan data pada format bermacam-macam file system. VFS menangani semua
system call yang ada pada file system. VFS menggunakan Common file tipe sebagai
representasi dari data file system. Common file tipe terdiri dari beberapa tipe objek, yaitu
:
1. Objek Super-Blok
Tipe ini menyimpan informasi yang berhubungan dengan file system yang
dimount. Bagi file system yang berbasis disk, objek ini biasanya sesuai dengan
filesystem control block yang tersimpan dalam disk. Struktur data super-blok
adalah sebagai berikut :
Field / Variabel
Type Field
Deskripsi
s_list
struct list_ahead
Pointer untuk list superblock
s_dev
kdev_t
identifier device
s_blocksize
unsigned long
ukuran block dalam byte
s_blocksize_bits
unsigned char
ukuran block dalam ukuran bit
s_lock
unsigned char
lock flag
s_rd_only
unsigned char
flag read-only
s_dirt
unsigned char
modified (dirty) flag
s_type
struct file_system_type *
tipe file system
1
s_op
struct super_operations *
metode superblock
dq_op
struct dquot_operations *
metode disk quota
s_flags
unsigned long
mount flags
s_magic
unsigned long
file system magic number
s_time
unsigned long
waktu terakhir superblock berubah
s_root
struct dentry *
objek dentry dari direktori yang ter-mount
s_wait
struct wait_queue *
mount wait queue
s_ibasket
struct inode *
masih dalam pengembangan
s_ibasket_ count
short int
masih dalam pengembangan
s_ibasket_ max
short int
masih dalam pengembangan
s_dirty
struct list_ahead
list inode yang dimodifikasi
u
union
informasi filesystem
2. Objek Inode
Tipe ini menyimpan informasi umum tentang file khusus. Bagi file system
berbasis disk, objek ini biasanya sesuai dengan file control block yang tersimpan
dalam disk. Masing – masing objek inode diasosiasikan dengan nomor inode,
yang secara unik mengidentifikasikan file didalam file system. Untuk struktur
datanya akan dijelaskan khusus dibagian inode.
3. Objek file
Tipe ini menyimpan informasi tentang interaksi antara file yang dibuka dengan
proses. Informasi ini eksis hanya di memori kernel selama masing – masing
proses mengakses sebuah file. Untuk struktur datanya akan dijelaskan khusus
dibagian file.
4. Objek dentry
Tipe ini menyimpan informasi tentang linking entri direktori yang sesuai dengan
file. Masing – masing file system menyimpan informasi ini dengan cara mereka
masing – masing dalam disk. Untuk struktur datanya akan dijelaskan khusus
dibagian direktori.
2
File system yang dikenali oleh VFS terbagi dalam 3 jenis yaitu :
1. Disk Based filesystem
Tipe file ini memanage space memori yang bisa digunakan pada partisi disk local.
Tipe file ini yang lumrah adalah Ext2. Tipe lain yang dikenal dengan baik oleh
VFS adalah :
1. File system bagi varian Unix seperti system V dan BSD.
2. Microsoft filesystem seperti MS-DOS, VFAT (Windows 98) dan NTFS
(Windows NT).
3. File system ISO96660 CD-ROM.
4. File system lain seperti HPFS (IBM’s, OS/2), HFS (Apple Machintosh),
FFS (Amiga’s Fast Filesystem) dan ADFS (Acorn’s machines).
2. Network Filesystem
Tipe ini memungkinkan akses yang mudah ke suatu file yang terdapat pada
jaringan komputer lain. Beberapa filesystem jenis ini yang dikenal dengan baik
oleh VFS adalah : NFS, Coda, AFS (Andrews Filesystem), SMB (Microsoft’s
Windows dan IBM’s OS/2 LAN Manager) dan NCP (Novell’s NetWare Core
Protocol).
3. Special Filesystem
Tipe ini tidak mengijinkan mengatur space disk. Pada direktori /proc
menyediakan interface yang mengijinkan user untuk mengakses struktur data
kernel. Direktori /dev/pts digunakan sebagai pendukung terminal semu. Seperti
yang digambarkan pada standar Open Group’s Unix98.
Agar file system dapat digunakan di Linux, perlu dilakukan proses yang disebut
mounting. Proses ini memberikan lokasi (direktori) untuk file system yang di-mount.
Setiap file system yang di-mount direpresentasikan oleh struktur super_block.
Agar penggunaan data / file pada file system optimal maka bisa dilakukan beberapa
langkah optimasi, antara lain :
1. Kurangi jumlah I/O yang mengakses strorage device sebanyak mungkin.
2. Kelompokkan I/O menjadi kelompok yang besar.
3
3. Optimasi pola pencarian blok data sehingga mengurangi seek time.
4. Masukkan data ke dalam cache sebanyak mungkin yang kita perlukan sehingga
tidak membebani kerja perangkat I/O
Setelah suatu file sistem berhasil di-mount, kita dapat mengakses file-file yang terdapat
di dalamnya. Proses yang dilakukan untuk mengakses suatu file yang terdapat pada suatu
file sistem adalah pertama mencari inode yang mengacu ke file yang kita kehendaki lalu
mengakses inode tersebut.
2. File
File adalah sebuah kumpulan elemen yang terurut. Elemen yang dimaksud bisa bahasa
mesin, karakter, heksadesimal ataupun bit, tergantung implementasinya. Pada sistem
operasi berbasis Unix, file system tidak diijinkan untuk melihat ataupun mengatur format
dari file. Pengaturan format diserahkan pada user atau program tertentu.
Struktur file dalam linux diimplementasikan sebagai berikut :
struct fown_struct {
int pid
/* pid or –pgrpp where SIGIO should be sent */
uid_t uid,euid
/* uid/euid of process setting the owner */
int signum
/* posix.1b rt signal to be delivered */
};
struct file {
struct list_head
struct dentry
struct file_operations
atomic_t
unsigned int
mode_t
loff_t
unsigned long
struct fown_struct
unsigned int
int
unsigned long
f_list;
*f_dentry;
*f_op;
f_count;
f_flags;
f_mode;
f_pos;
f_reada,f_ramax,f_raend, f_ralen,f_rawin;
f_owner;
f_uid,f_gid;
f_error;
f_version;
/* needed for tty driver and maybe others */
void
*private_data;
};
Penjelasan dari struktur data yang digunakan
• f_list
: menyambungkan semua file ke dalam beberapa list
• f_dentry
: pointer yang menunjuk pada objek dentry yang berkaitan
• f_op
: pointer yang menunjuk pada tabel operasi tabel
• f_mode
: mode proses akses
4
•
•
•
•
•
•
•
•
•
•
•
•
f_pos
f_count
f_flags
f_reada
f_ramax
f_raend
f_ralen
f_rawin
f_owner
f_uid
f_gid
f_error
: current file offset (pointer file)
: counter penggunaan obyek file
: flag yang dibuat saat file dibuka
: flag yang digunakan untuk read head
: jumlah maksimum page yang akan di-read ahead
: pointer file setelah read ahead terakhir
: jumlah byte yang di-read ahead
: jumlah page yang di-read ahead
: data untuk I/O asynchronous melalui signal
: ID user pemilik file
: ID grup user pemilik file
: kode kesalahan untuk operasi write network
Sedangkan untuk fungsi-fungsi yang untuk file, didefinisikan sebagai berikut :
typedef int (*filldir_t)(void *, const char *, int,off_t,ino_t);
struct file_operations {
loff_t (*lseek) (struct file *, loff_t,int);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned
long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *);
int (*release) (struct inode *, struct file *);
int (*fsync) (struct file * struct dentry *);
int (*check_media_change) (kdev_t dev);
int (*revalidate) (kdev_t dev);
int (*lock) (struct file *, int, struct file_lock *);
};
Penjelasan beberapa fungsi yang digunakan dalam struktur file :
•
llseek (file, offset, whence) : mengupdate pointer file
•
read (file, buf, count, offset) : membaca sebanyak count byte dari sebuah
file dimulai dari posisi offset (yang merupakan sebuah pointer file). Kemudian
nilai offset di-increment
•
write (file, buf, count, offset) : menulis sebanyak count byte pada
sebuah (yang merupakan sebuah pointer file). Kemudian nilai offset diincrement
•
readdir (dir, dirent, filldir) : mengembalikan entri direktori berikutnya
dari sebuah direktori dalam dirent,
5
Penamaan File
Setiap file mempunyai nama. Untuk menghindari penamaan yang kacau,
disarankan untuk menggunakan karakter-karakter berikut:
• Huruf besar(A sampai Z)
• Huruf kecil (A sampai Z)
• Nomor (0 sampai 9)
• Garis bawah ( _ )
• Titik ( . )
• Koma ( , )
Ada perkecualian untuk root directory, yang selalu menggunakan nama / dan
selalu diacu dengan karakter / ini. Pada direktori yang sama tidak boleh ada dua file yang
mempunyai nama sama.
Pada pemberian nama file, ekstensi suatu file membantu untuk mengenali isi
suatu file. Kita diberi kebebasan dalam memberi ektensi sebuah file, tetapi gunakan
ekstensi yang mempermudah pengertian isi file.
Ada beberapa file dalam LINUX yang tidak terlihat saat kita memanggil dengan
ls saja. Untuk memanggil file yang tersembunyi kita gunakan command ls –a. File-file
tersembunyi itu biasanya startup file.
Sebagian besar file, hanya merupakan file biasa yang disebut file regular yang berisi data
biasa sebagai contoh file text, file executable, atau program, input atau output dari
program dan lainnya.
Terdapat file khusus selain file – file biasa, seperti :
• Special files: mekanisme yang digunakan untuk input dan output. Sebagian besar
terdapat pada direktori /dev.
• Links: Sistem untuk membuat file atau direktori dapat terlihat di banayk bagian dari
pohon file sistem.
• (Domain) sockets: Jenis file khusus, mirip dengan soket TCP/IP, yang menyediakan
jaringan antar proses yang terproteksi oleh file system's access control.
• Named pipes: berfungsi kurang lebih seperti soket dan membentuk jalur untuk proses
komunikasi.
6
3. Gambaran Umum Ext2
Linux versi pertama berbasiskan filesystem Minix. Kemudian seiring dengan
berkembangnya Linux, Extended Filesystem (Ext FS) diperkenalkan dengan beberapa
kelebihannya, namun hasilnya tidak memuaskan. Pada tahun 1994 The Second Extended
Filesystem (Ext2) diperkenalkan, termasuk beberapa fitur baru yang disediakan.
Filesystem ini efisien, handal, fleksibel dan menjadi file system yang paling banyak
digunakan oleh Linux.
Fitur – fitur yang menunjang efisiensi, kehandalan dan fleksibilitas dari Ext2 :
• Pada saat membuat file system Ext2 (pengformatan lojik), system administrator
dapat memilih ukuran blok yang optimum.
• Pada saat membuat file system Ext2, system administrator dapat memilih jumlah
inode yang diperlukan untuk sebuah partisi dengan ukuran tertentu.
• Filesystem membagi disk block ke dalam group–group. Setiap group terdiri atas
data block dan inode yang disimpan dalam track yang berdekatan.
• Strategi peng-update-an yang aman dapat meminimasi dampak dari system crash.
• Mendukung pengecekan kekonsistensian secara otomatis pada status filesystem
saat waktu booting.
• Mendukung immutable file (file yang tidak dapat di modifikasi) dan append-only
file (file yang isinya hanya dapat ditambahkan pada akhir file tersebut).
Blok pertama dalam partisi Ext2 tidak pernah dikelola oleh Ext2 file system,
karena blok tersebut disediakan untuk bagian boot sector. Sisanya dibagi kedalam block
group, dimana block group mempunyai susunan seperti gambar berikut :
Semua block group dalam filesystem mempunyai ukuran yang sama dan disimpan
secara berurutan sehingga kernel dapat mengacu lokasi dari block group dengan mudah
berdasarkan index bilangan bulatnya. Setiap block dalam sebuah block group
mengandung salah satu dari informasi berikut :
7
• salinan dari superblock filesystem
• salinan dari kumpulan block group descriptor
• data block bitmap
Jika sebuah block tidak mengandung salah satu dari informasi tersebut, maka block
tersebut dikatakan free.
Penjelasan informasi-informasi di atas adalah sebagai berikut :
8
Superblock
Superblock pada Ext2 disimpan dalam struktur ext2_super_block. Field dari struktur
tersebut adalah sebagai berikut
:
9
Group Descriptor dan Bitmap
Setiap block group mempunyai group descriptor masing-masing. Group descriptor
disimpan dalam bentuk ext2_group_desc. Field dari struktur tersebut adalah sebagai
berikut :
Inode Table
Inode table terdiri dari kumpulan block yang berurutan yang masing-masing block
tersebut mengandung sejumlah inode yang telah terdefinisi sebelumnya. Semua inode
mempunyai ukuran yang sama yaitu 128 bytes. Setiap Ext2 inode mempunyai struktur
ext2_inode. Field dari struktur tersebut adalah sebagai berikut :
Pada ext2, tipe file yang berbeda menggunakan data block dengan cara yang
berbeda pula. Beberapa file tidak menyimpan data sama sekali sehingga tidak
membutuhkan data block sama sekali.
10
Membaca dan Menulis File Reguler Ext2
Metode read Ext2 diimplementasi oleh fungsi generic_file_read().
Metode write pada Ext2 diimplementasi oleh fungsi ext2_file_write(). Fungsi ini bekerja
dengan empat parameter:
• fd yaitu file descriptor dari file yang ditulis.
• buf yaitu alamat dari area memori yang berisi data yang sedang ditulis.
• count yaitu banyaknya bytes yang ditulis.
• ppos yaitu pointer ke variabel yang menyimpan file offset dimana data harus
ditulis.
15
Fungsi write melakukan aksi-aksi berikut:
1. Menghapus hak istimewa superuser dari file.
2. Jika file pernah dibuka dengan O_APPEND flag set, ubah file offset dimana data
harus ditulis pada akhir file.
3. jika file pernah dibuka pada mode sinkronisasi (O_SYNC flag set), ubah i_osync
field pada struktur ext2_inode_info dalam disk inode ke langkah 1.
4. Hitung ukuran blok dari file offset dan sistem file.
5. Untuk setiap blok yang akan ditulisi, lakukan langkah-langkah berikut :
a. Panggil ext2_getblk() untuk mengambil blok data dari disk, alokasikan bila perlu
b. Jika blok harus ditulis ulang secara terpisah dan buffer tidak up-to-date, panggil
11_rw_block() dan tunggu sampai operasi read selesai.
c. Salin bytes yang akan ditulisi ke dalam blok dari proses address space ke dalam
buffer dan beri tanda buffer sebagai dirty.
d. Panggil update_vm_cache() untuk sinkronisasi isi dari page cache dengan buffer
cache.
e. Jika file pernah dibuka pada mode sinkronisasi, sisipkan buffer ke dalam array
local. Jika array terisi, panggil 11_rw_block() untuk memulai operasi write dan
menunggu sampai selesai.
6. Jika file pernah dibuka pada mode sinkronisasi, kosongkan flag i_osync dari disk
inode, panggil juga 11_rw_block() untuk memulai operasi write untuk setiap buffer
11
yang masih berada pada array lokal dan tunggu sampai I/O selesai mengeksekusi.
7. Lakukan update untuk field i_size dari inode object.
8. Ubah field i_ctime dan i_mtime dari inode object ke xtime.tv_sec dan tandai inode
sebagai dirty.
9. Lakukan update variabel *ppos untuk menyimpan file offset dimana data telah ditulis.
10. Kembalikan nomor dari bytes yang dituliskan ke dalam file.
4. Inode
Setiap file dan direktori di dalam Linux mempunyai identifier unik masing-masing yang
disebut inode. Inode ini menyimpan informasi mengenai file yang bersangkutan seperti
jenis file, nama file sampai kedudukan data file tersebut pada disk. Inode ini disimpan
pada sebuah table yang disebut inode-table. Setiap partisi atau physical disk mempunyai
inode-table sendiri. Inode-table ini terbentuk ketika partisi ini terbentuk (diformat).
Untuk direktori root yang merupakan direktori tertinggi dalam Linux, diberikan inode
dengan nomor satu. Hal ini berhubungan dengan cara penyimpanan data / file di Linux
yang menyerupai pohon (tree). Dengan penggunaan inode ini, bisa memudahkan dalam
pencarian suatu file atau direktori dengan cara menelusurinya melalui pohon file Linux
sesuai dengan inode-nya.
Informasi yang terdapat dalam inode suatu file :
1) Device tempat inode berada
2) Mode file
3) Type file
4) Locking information
5) Ukuran file
6) Jumlah link yang mengacu ke file
7) Id pemilik file dan grup-nya
8) Access privileges
9) Waktu pengaksesan terakhir
10) Waktu terakhir inode tersebut dimodifikasi
11) Waktu terakhir file dimodifikasi
12) Alamat block yang menyimpan data file pada disk.
12
Struktur inode dalam Linux diimplementasikan sebagai berikut :
struct inode {
struct list_head
struct list_head
struct list_head
i_hash;
i_list;
i_dentry;
unsigned long
unsigned int
kdev_t
umode_t
nlink_t
uid_t
gid_t
kdev_t
off_t
time_t
time_t
time_t
unsigned long
unsigned long
unsigned long
unsigned long
struct semaphore
struct inode_operations
struct super_block
wait_queue_head_t
struct file_lock
struct vm_area_struct
struct page
spinlock_t
struct dquot
struct pipe_inode_info
i_ino;
i_count;
i_dev;
i_mode;
i_nlink;
i_uid;
i_gid;
i_rdev;
i_size;
i_atime;
i_mtime;
i_ctime;
i_blksize;
i_blocks;
i_version;
i_nrpages;
i_sem;
*i_op;
*i-sb;
i_wait;
*i_flock;
*i_mmap;
*i_pages;
i_shaerd_lock;
*i_dquot(MAXQUOTAS);
*i_pipe;
unsigned long
i_state;
unsigned long
unsigned char
i_flags;
i_sock;
atomic_t
unsigned int
_u32
i_writecount;
i_attr_flags;
i_generation;
union {
...
struct extfs_inode_info
...
struct socket
void
}u;
ext2_i;
socket_i;
*generic)ip;
};
13
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.
Struktur data dari operasi inode bisa digambarkan sebagai berukut.
struct inode_operations {
struct file_operations * default_file_ops;p
int (*create) (struct inode *, const char *, int, int,
struct inode **);
int (*lookup) (struct inode *, const char *, int,
struct inode **);
int (*link) (struct inode *, struct inode *, const char *,int);
int (*unlink) (struct inode *, const char *,int);
int (*symlink) (struct inode *, const char *,int, const char);
int (*mkdir) (struct inode *, const char *,int,int);
int (*rmdir) (struct inode *, const char *,int);
int (*mknod) (struct inode *, const char *,int,int,int);
int (*rename) (struct inode *, const char *,int,struct inode *,
const char *,int);
int (*readlink) (struct inode *, char *,int);
int (*follow_link) (struct inode *, struct inode*, int,int,
struct inode**);
14
int (*bmap) (struct inode *, int);
void (*truncate) (struct inode *);
int (*permission) (struct inode *, int);
int )*smap) (struct inode *, int);
);
5. Direktori
Direktori adalah sekumpulan file dan/atau sekumpulan direktori dari file – file yang
terasosiasi secara logis. Direktori merupakan mekanisme yang digunakan manusia / user
untuk mengorganisasi sekumpulan file pada keseluruhan sistem. Directori merupakan
container logika dari sekumpulan file atau mungkin directori bersarang (nested
directory).
Secara harfiah direktori adalah file khusus yang dibuat oleh file system untuk memuat
entry-entry. Entry-entry yang termuat dalam direktori ini yang kemudian oleh user
tampak sebagai daftar file-file dalam suatu direktori. Bentuk dari entry-entry ini adalah
pointer. Jenis pointer yang digunakan sebagai entry ini ada dua jenis yaitu pointer yang
menunjuk ke suatu file dalam direktori tersebut (bisa saja file tersebut adalah sebuah
direktori) atau pointer yang menunjuk ke suatu inode lain baik itu terletak pada direktori
yang sama maupun berbeda direktori. Untuk pointer yang menunjuk ke inode pada
direktori yang berbeda, disebut link. Dengan link, kita bisa mendapatkan informasi
mengenai pointer yang digunakan oleh inode yang ditunjuk link tersebut. Dengan link,
kita bisa memperoleh akses pada file yang ditunjuk oleh entry yang ditunjuk link. Pada
jumlah link yang terhubung pada suatu file dapat diketahui melalui inode-table.
Link terbagi menjadi dua jenis yaitu ordinary link dan symbolic link. Ordinary link
adalah kumpulan entry pada suatu direktori yang menunjuk pada inode yang sama.
Sedangkan symbolic link adalah link yang mengacu pada suatu inode (tidak harus lebih
dari satu). Perbedaan antara symbolic link dan ordinary link adalah pada ordinary link
jika inode (file) yang diacu dihapus, maka data file tersebut masih tetap dipertahankan
sampai tidak ada lagi link yang mengacu padanya. Sedangkan pada symbolic link, jika
file yang diacu oleh link dihapus, maka semua link yang mengacu padanya juga harus
ikut dihapus.
Struktur direktori pada Linux pada umumnya bisa digambarkan sebagai berikut :
15
Penjelasan isi masing-masing direktori
Direktori
/bin
Isi Direktori
Program umum, yang dapat digunakan oleh sistem, administrator dan
para pengguna system
File-file startup files dan kernel, vmlinuz. Dalam distribusi - distribusi
/boot
linux yang terbaru direktori juga berisi data grub. Grub yang merupakan
akronim dari GRand Unified Boot loader, merupakan suatu suatu jenis
boot loader yang digunakan secara umum pada Linux
/dev
/etc
Referensi yang menunjuk pada semua hardware periperal CPU yang
direpresentasikan sebagai file dengan properti khusus
File konfigurasi sistem yang sangat penting. Direktori ini berisi data
yang mirip dengan yang ada dalam Control Panel milik Windows.
/home
Direktori home untuk para pengguna umum.
/initrd
Informasi untuk booting
/lib
File pustaka, termasuk file-file yang dibutuhkan oleh semua jenis
program yang dibutuhkan oleh sistem dan para pengguna.
Setiap partisi mempunyai direktori dalam dalam direktori teratasnya.
/lost+found
File-file yang yang sedang disimpan ketika terjadi failure disimpan di
sini.
/misc
/mnt
Digunakan untuk berbagai macam keperluan.
Mount point standard untuk file sistem eksternal seperti CDROM atau
kamera digital.
/opt
Biasanya berisi software pihak ketiga dan software extra
/proc
Virtual file system yang mengandung informasi tentang sumber daya
16
Direktori
Isi Direktori
sistem.
/root
Direktori home untuk superuser atau adminstrator sistem
/sbin
Program yang digunakan oleh sistem dan adminstrator sistem.
/tmp
Ruang untuk file yang bersifat temporer untuk kepantingan sistem
/usr
Program, pustaka, dokumentasi dan file-file lain yang digunakan oleh
program 0- program yang berkaitan dengan pengguna.
Tempat penyimpanan untuk file variabel dan file temporer yang
/var
diciptakan oleh userm seperti file log, tempat penyimpanan sementara
untuk file yang didownload dari internet atau untuk menyimpan image
dari sebuah CD sebelum CD trersebut dibakar.
Direktori pada Linux adalah berupa graph yang asiklik. Oleh karena itu Linux
mengijinkan sebuah file untuk muncul pada lebih dari satu direktori. Linux juga
menggunakan nama path secara relatif maupun absolut. Jadi nama file yang diawali
dengan “/” adalah nama file absolut yang menggambarkan nama direktori sepanjang path
dari root sampai file yang diinginkan. Tetapi Linux tidak mengijinkan spesifikasi dari
nama device seperti yang dilakukan oleh DOS. Absolut nama file seperti
/usr/gjn/books/opsys/chap13 mengindikasikan bahwa direktori root berisi entri yang
menggambarkan direktori yang bernama usr, yang berisi directori bernama gjn, dan
seterusnya melalui direktori books dan opsys sampai nama file chap13. Jika direktori
basis adalah /usr/gjn maka file yang sama bisa diacu dengan nama file relatif books/
/opsys/chap13. Atau jika direktori kerja adalah usr/gjn/books/, kemudian kita ingin
mengacu kepada file prime.c yang terletak pada direktori programs yang terletak pada
direktori usr/gjn/, maka caranya adalah ../programs/prime.c.
File manager menyediakan user dengan berbagai perintah untuk mengatur file dan/atau
direktori, beberapa diantaranya yaitu :
1.
ls : mengembalikan sebuah list dari semua file dan direktori bersarang yang diacu
oleh direktori yang diidentifikasi. Perintah ini juga digunakan untuk mengembalikan
isi file's descriptor kepada user interface atau ke program.
17
2.
cp : menciptakan duplikat dari file yang sudah ada.
3.
mv : merubah nama simbolik dari file yang sudah ada.
4.
rm : menghapus file yang diidentifikasi dari direktori dan menghancurkannya dengan
membebaskan semua blok pada file termasuk file descriptor.
5.
cd : berpindah dari direktori satu ke direktori yang lain.
Dalam Linux, direktori entry yang telah dibaca ke dalam memori akan diubah ke dalam
obyek dentry berbasiskan struktur dentry. Sebuah obyek dentry akan diciptakan oleh
kernel untuk setiap komponen dari pathname. Contohnya : pada saat kita melihat isi
direktori /tmp/test, maka kernel akan menciptakan 3 buah obyek dentry yaitu masing
untuk direktori /, direktori tmp dan direktori test dari direktori tmp.
Struktur data dari dentry dalam Linux diimplementasikan sebagai berikut :
struct dentry {
atomic_t d_count;
unsigned int d_flags;
struct inode * d_inode;
/* Where the name belongs to NULL is negative */
struct dentry * d_parent;
/* parent directory */
struct list_head d_hash;
/* lookup hash list */
struct list_head d_lru;
/* d_count = 0 LRU list */
struct list_head d_child;
/* child of parent list */
struct list_head d_subdirs;
/* our children */
struct list_head d_alias;
/* inode alias list */
int d_mounted;
struct qstr d_name;
unsigned long d_time;
/* used by d_revalidate */
struct dentry_operations *d_op;
struct super_block * d_sb;
/* The root of the dentry tree
*/
unsigned long d_vfs_flags;
void * d_fsdata;
/* fs-specific data */
void * d_extra_attributes;
/* TUX-specific data */
unsigned char d_iname[DNAME_INLINE_LEN]; /* small names */
struct dcookie_struct * d_cookie; /* cookie, if any */
};
Sedangkan fungsi-fungsi yang terdefinisi pada dentry diimplementasikan sebagai berikut
:
struct dentry_operations {
int (*d_revalidate)(struct dentry *, int);
int (*d_hash) (struct dentry *, struct qstr *);
int (*d_compare) (struct dentry *, struct qstr *, struct qstr
*);
int (*d_delete)(struct dentry *);
void (*d_release)(struct dentry *);
18
void (*d_iput)(struct dentry *, struct inode *);
};
6. Jenis Alokasi
a)
Extent-Based Allocation
Pada proses pengalokasian ini, blok-blok pada disk dibagi menjadi extent-extent.
Extent adalah kumpulan blok - blok yang kontigu dan mempunyai identifier
yang terdiri dari logical offset, panjang / length, dan physical offset. Setiap kali
file diciptakan, maka akan tercipta extent baru. Pengalokasian untuk file terjadi
secara sekuensial. Selain itu, proses pembacaan (read) dan penulisan (write) juga
terjadi secara sekuensial. Dalam pengaksesan data, hanya diperlukan posisi awal
data dan panjang data.
Pengalokasian jenis ini sangat cocok digunakan untuk pengaksesan secara
sekuensial karena algoritma pengalokasiannya bisa mempersingkat proses
pencarian pada disk (seek time). Tetapi tipe pengalokasian ini sangat jelek jika
digunakan untuk pengaksesan secara random. Tipe pengalokasian ini digunakan
oleh file system jenis Veritas VxFS, reiserFS dan JFS IBM.
b)
Block-Based Allocation
Ini adalah tipe pengalokasian yang sering digunakan oleh file system Unix. Tipe
ini pada awalnya mengalokasikan space untuk file secara random. Tetapi
kemudian diketahui bahwa pengalokasian secara random dapat memperbesar
seek time. Lalu digunakan algoritma untuk mengalokasikan secara sekuensial.
Pengalokasian secara sekuensial ini juga bisa membuat fragmentasi pada disk.
Untuk mengatasi hal ini digunakan meta-data. Meta-data adalah informasi
control blok dari file system (file system block control structure information).
Metadata ini berguna jika terjadi pengalokasian secara random. Pada tipe
pengalokasian Extent-Based Allocation dibutuhkan sedikit meta-data atau
bahkan tidak sama sekali karena pengalokasiaannya secara sekuensial.
Sedangkan pada Block-Based Allocation meta-data sangat diperlukan. Tipe
pengalokasian jenis ini digunakan oleh file system ext yang biasa digunakan
oleh kebanyakan distro Linux.
19
DAFTAR PUSTAKA
Nutt, Gary. “Operating Systems : A Modern Perspective” . Addison – Wesley. 2000.
Bar, Moshe. “Linux File System”. McGraw – Hill. 2001.
Tackert Jr., Jack. Steve Burnett.”Special Edition Using Linux Fourth Edition”.Que .1999.
20
Download