Formal

Filesystem Pada Linux

Terminologi filesystem memiliki dua pengertian yang sedikit berbeda, bagi pemula hal ini bisa sedikit membingungkan, namun makna akan jelas setelah mengetahui perbedaan masing-masing dan konteksnya.

Pengertian pertama dari filesystem adalah yang berkenaan dengan struktur, atau hierarki dari directory (juga disebut directory tree) yang digunakan untuk mengelola file pada sistem komputer. Sedangkan pengertian kedua adalah type dari filesystem, yaitu, bagaimana data yang tersimpan pada disk atau partisi dikelola. Tiap filesystem memiliki aturan tersendiri guna mengontrol alokasi ruang pada disk hingga file dan untuk data yang berasosiasi dengan tiap file (juga disebut metadata).

Deskripsi sederhana filesystem pada UNIX juga dapat diterapkan pada Linux, yaitu:

“Pada sistem UNIX, segala sesuatu adalah file; jikalau sesuatu bukanlah file, maka disebut proses.”

Pernyataan ini meskipun sederhana namun tepat sekali karena ada file spesial yang lebih dari sekedar file (contohnya pipe dan socket), namun untuk menyederhanakan, mengatakan segala sesuatu adalah file merupakan prinsip “pukul rata” yang masih dapat diterima.

Pada sistem Linux, sama halnya dengan UNIX, tidak ada perbedaan antara file dan directory, mengapa? karena directory juga adalah file, dinamakan directory karena didalamnya terdapat nama file-file yang lain. Program, gambar, teks, service dan seterusnya, adalah file. Perangkat input dan output, dan semua perangkat pada umumnya, juga dianggap file oleh sistem.

Untuk mengatur semua file tersebut secara rapi, dibuat penyusunan layaknya struktur pohon pada hard disk (hierarki). Dahan yang besar memiliki ranting, ranting memiliki cabang dan cabang berakhir pada daun-yang disebut file normal. Untuk sementara kita bisa memanfaatkan analogi pohon ini.

Kebanyakan file hanyalah file normal, yang disebut file reguler. File ini berisi data yang normal seperti file teks, file executable ataupun program. Meskipun sangat masuk akal untuk mengatakan segala sesuatu yang anda temui di Linux adalah file, namun untuk menghindari kebingungan, ada beberapa pengecualian.

  • Directory: file yang berisikan daftar file-file lainnya.
  • File spesial: mekanisme yang digunakan untuk input dan output. Kebanyakan berada di /dev.
  • Link: sebuah sistem untuk membuat file atau directory terlihat pada bagian lain dari sistem.
  • Socket (Domain): sebuah tipe file spesial, serupa dengan socket TCP/IP, menyediakan jejaring antar-proses yang dilindungi oleh kontrol-akses file system.
  • Named Pipe: lebih kurang bekerja seperti socket dan membentuk sebuah jalan bagi proses untuk berkomunikasi satu sama lain, tanpa menggunakan semantik socket jaringan.

Jika anda mengetikan ls pada shell dan menambahkan opsi -l maka tipe file akan terlihat, perhatikan karakter pertama dari tiap-tiap line input. Pada line pertama karakter -, begitu pula dengan line kedua, sedangkan line ketiga karakter pertamanya adalah d.

Tabel berikut memberikan ikhtisar dari karakter yang menentukan tipe file:

Jika anda hanyalah pengguna biasa (setidaknya untuk saat ini), bukan system administrator maupun programer,  anda hanya akan berurusan langsung dengan teks, file executable, directory dan link, tidak dengan file spesial. Namun sebelum kita membahas file dan directory yang penting, kita perlu mengetahui partisi.

Partisi

Banyak orang yang masih belum memahami dengan jelas mengenai partisi, bahkan ada yang mencampuradukan file satu sama lain yang bisa kita sebut “percobaan pembunuhan” bagi sistem. Pada masa awal pengembangan Linux, dirasa aneh dan membingungkan jika Linux menggunakan lebih dari satu partisi untuk sebuah disk sekalipun menggunakan prosedur instalasi standar.

Salah satu tujuan dari penggunaan partisi yang berbeda adalah untuk memperoleh tingkat keamanan data yang tinggi jika sewaktu-waktu terjadi kerusakan. Dengan memisahkan hard disk melalui partisi, data dapat dikelompokan dan dipisah. Saat terjadi hal yang tidak diinginkan seperti terbakar, maka hanya data pada bagian yang terbakar yang rusak, sementara data pada partisi yang lain kemungkinan besar akan selamat.

Prinsip ini sudah ada dari masa Linux belum memiliki filesystem journaled, dimana kegagalan power saja dapat berakibat fatal. Penggunaan partisi hingga sekarang masih digunakan untuk alasan keamanan dan ketahanan, jadi jika ada kebobolan pada salah satu bagian dari sistem secara otomatis tidak akan membahayakan secara keseluruhan, inilah alasan terpenting dari partisi.

Contoh sederhana: seseorang membuat script, entah itu sebuah program atau aplikasi web yang lama-kelamaan mulai memenuhi disk. Jika disk hanya memiliki satu partisi saja, maka keseluruhan sistem akan hang jika disk penuh. Jika data disimpan pada partisi yang terpisah, maka hanya partisi tersebut yang akan terpengaruh sementara partisi untuk sistem dan data yang terpisah tidak akan terpengaruh dan tetap berjalan.

Harus diingat, filesystem journaled hanya untuk keamanan data dalam kasus kegagalan power maupun sambungan perangkat penyimpanan yang terputus mendadak, tidak melindungi data dari bad block dan logical error dalam filesystem. Untuk kasus tersebut, gunakan solusi RAID (Redundant Array of Inexpensive Disk).

Ada dua partisi utama pada sistem Linux

  • partisi data: data sistem Linux normal, termasuk partisi root yang didalamnya terdapat semua data untuk memulai dan menjalankan sistem; dan
  • partisi swap: perluasan dari memori fisik, yaitu perluasan memori (RAM) pada hardisk.

Pada kebanyakan sistem, terdapat sebuah partisi root, satu atau beberapa partisi data dan satu atau beberapa partisi swap. Partisi juga dapat berisi sistem data lain seperti HFS, FAT atau NTFS yang merupakan filesystem dari sistem operasi lain.

Kebanyakan sistem Linux menggunakan fdisk pada proses instalasi untuk mengatur tipe partisi yang umumnya berjalan otomatis. Saat ini instalasi Linux cukup gampang (setelah Linus Torvald berulangkali marah), beberapa distro Linux seperti Fedora, Ubuntu dan Kali Linux sangat gampang di instal, namun ada kalanya untuk kebutuhan tertentu tipe partisi dipilih secara manual. Partisi standar Linux memiliki nomor 82 untuk swap dan 83 untuk data, yang dapat saja journaled (ext4) atau normal (ext2 dan ext3, pada sistem yang lebih uzur).

Selain dua filesystem tersebut, Linux juga mendukung berbagai tipe filesystem, seperti JFS, NFS, FAT hingga file system pada sistem operasi lain yang memilik hak-paten.

Partisi root standar (ditandai dengan “/”) berukuran sekitar 100-500 MB dan berisi file untuk pengaturan sistem, command dasar dan program untuk server, library sistem, ruang temporer dan directory home bagi administrasi sistem. Instalasi standar membutuhkan sekitar 250 MB untuk partisi root.

Ruang bagi swap (ditandai dengan swap) hanya dapat diakses oleh sistem itu sendiri, tersembunyi dari penglihatan. sama halnya dengan sistem UNIX, apapun yang terjadi, swap memastikan sistem dapat berjalan. Pada Linux, anda tidak akan pernah melihat secara nyata pemberitahuan memalukan semacam out of memory, please close some applications first and try again yang fenomenal pada sistem operasi klasik, itu karena Linux memiliki memori ekstra ini.

Prosedur virtual memory atau swap sudah diadopsi secara luas pada sistem operasi lain. Virtual memory berbeda dengan chip memory sebenarnya, dimana virtual memory bekerja lebih lambat, namun memiliki kelebihan memory akan jauh lebih baik (meskipun virtual).

Linux umumnya dianggap memiliki dua kali lipat memory fisik dalam bentuk swap yang terdapat pada hard disk, sebagai contoh, tersedia sebuah sistem dengan RAM 8GB maka kemungkinannya:

  • Sebuah partisi swap sebesar 16GB, atau
  • dua partisi swap dengan masing-masing partisi berukuran 8GB, atau
  • dengan dua hard disk, sebuah partisi berukuran 8GB pada masing-masing disk.

Jika sistem memiliki banyak I/O maka opsi terakhir adalah yang terbaik. Bacalah dokumentasi software untuk panduan yang detil. Beberapa aplikasi, seperti database membutuhkan ruang swap lebih banyak. Ruang swap juga bergantung pada versi kernel yang sedang digunakan.

Rata-rata distribusi/distro Linux memiliki partisi sendiri untuk kernel, karena kernel merupakan file yang amat penting bagi sistem, dan jika memang distro Linux yang anda gunakan memiliki partisi sendiri untuk kernel, pastinya anda juga memiliki partisi /boot yang menangani kernel beserta file yang dibutuhkannya.

Sisa hard disk umumnya dibagi menjadi beberapa partisi data, namun tidak selalu begitu, ada juga kemungkinan data penting non-sistem diletakan dalam satu partisi yang sama, umpamanya pada sistem untuk workstation/client. Saat data yang dianggap tidak terlalu penting berada di partisi yang berbeda, biasanya mengikuti pola berikut:

  • Sebuah partisi untuk program bagi pengguna (/usr).
  • Sebuah partisi berisi data pribadi pengguna (/home).
  • sebuah partisi untuk menyimpan data temporer seperti print dan antrian e-mail (/var)
  • sebuah partisi untuk pihak ke-3 dan software tambahan (opt).

Sekali partisi dibuat, tidak dianjurkan untuk merubah ukuran maupun mengganti properti dari partisi yang sudah ada, namun jika masih ada ruang yang tersisa, masih bisa melakukan penambahan partisi.

Yang melakukan pembagian hard disk menjadi partisi adalah system administrator. Pada sistem yang lebih besar system administrator bahkan menggabungkan beberapa hard disk dan menjadikannya satu partisi menggunakan software.

Kebanyakan distro mengoptimalkan setup standar untuk workstation (rata-rata pengguna) dan server, namun custom setup juga masih bisa dilakukan, selama proses instalasi anda dapat menentukan layout partisi menggunakan tool yang telah disediakan oleh distro, biasanya sudah memiliki antarmuka grafis. Bisa juga menggunakan fdisk, tool berbasis text untuk membuat partisi dan mengatur property.

Workstation atau client biasanya digunakan oleh satu orang yang sama, pemilihan software merefleksikan hal ini dan penekanan hanya pada paket software yang biasa, seperti desktop, program client seperti email, software multimedia, web dan layanan lain. Segalanya akan diletakan pada satu partisi besar, ruang swap diatur dua kali lipat RAM dan selesai sudah, meskipun instalasi untuk workstation cukup sederhana, cepat, juga ruang hard disk untuk penggunaan pribadi lebih dari cukup, kekurangannya, tentu saja jika ada permasalahan akan sedikit menyita waktu untuk memperbaikinya akibat file yang tumpang tindih.

Pada server, data sistem cenderung dipisahkan dari data pengguna. Program yang menyediakan service diletakan ditempat berbeda dengan data yang ditangani oleh service. Partisi yang berbeda akan dibuat untuk sistem seperti itu.

  • sebuah partisi dengan semua data yang diperlukan untuk boot mesin.
  • sebuah partisi dengan pengaturan data dan program server.
  • satu atau beberapa partisi yang berisi data server seperti tabel database. e-mail pengguna, arsip ftp dan sebagainya.
  • sebuah partisi dengan program pengguna dan aplikasi
  • satu atau beberapa partisi untuk file spesifik pengguna (home)
  • satu atau beberapa partisi swap

Server biasanya memiliki memory lebih banyak, dengan demikian memiliki ruang swap lebih banyak. Proses server tertentu seperti database memerlukan ruang swap lebih, untuk performa lebih baik swap sering dibagi menjadi beberapa partisi.

Mount Point

Semua partisi disematkan ke sistem melalui sebuah mount point. Mount point menetapkan tempat dari suatu kumpulan data tertentu di file system. Biasanya, semua partisi terhubung melalui partisi root. Pada partisi ini, yang diindikasikan dengan garis miring (/), dibuat directory. Directory kosong ini akan menjadi titik awal dari partisi yang disematkan pada mereka. Sebagai contoh: umpama ada sebuah partisi yang menangani directory berikut:

Animasi/          Gambar/                 Video/

Kita ingin menyematkan partisi ini di filesystem dalam directory bernama /opt/media. Untuk melakukan hal ini, harus dipastikan terlebih dahulu bahwa directory /opt/media tersedia pada sistem. Akan lebih baik jika directory ini kosong, lalu gunakan perintah mount, maka partisi akan tersemat pada sistem, directory /opt/media yang tadinya kosong akan berisi file dan folder dari media (hard disk atau partisi hard disk, cd, dvd, flash drive atau perangkat penyimpanan lain) yang sudah di mount.

Selama sistem startup, semua partisi dimount, sebagaimana dijelaskan dalam file /etc/fstab. Beberapa partisi secara default tidak dimount, yaitu partisi yang tidak tersambung secara konstan pada sistem, seperti penyimpanan yang digunakan oleh kamera digital (SD card). Jika konfigurasi benar, perangkat akan dimount segera setelah sistem mendeteksi keberadaan perangkat, atau dapat dimount secara manual.

Pada sebuah sistem yang sedang berjalan, informasi mengenai partisi dan mount point dapat ditampilkan menggunakan perintah df. Linux menggunakan df versi GNU. Mesin UNIX memiliki df versi sendiri, meskipun serupa namun versi GNU memiliki fitur yang lebih baik. Perintah df hanya menampilkan informasi partisi non-swap yang aktif. Termasuk partisi di jaringan yang berbeda.

Untuk menyederhanakan, sistem Linux digambarkan seperti struktur pohon, pada sistem Linux standar anda akan sering melihat layout yang mengikuti skema seperti berikut:

Ini merupakan layout dari sistem Red Hat, struktur tidak selalu harus seperti layout ini. Pohon dari filesystem dimulai garis miring (/). Directory ini berisi semua directory dan file, juga disebut root directory (sekarang anda tahu kenapa dinamakan root/akar) atau root dari filesystem.

Directory yang berada satu level dibawah root didahului oleh garis miring, untuk menegaskan posisinya dan menghindari kebingungan dengan directory lain yang memiliki nama yang sama. Saat menjalankan sistem yang baru ada baiknya memeriksa root directory dengan mengetikan perintah cd / lalu ls.

Subdirectory dari root adalah sebagai berikut.

  • /bin: program biasa, dibagi oleh sistem, system administrator dan para pengguna.
  • /boot: file startup dan kernel, vmlinuz. Pada beberapa distro modern terdapat data grub. Grub merupakan singkatan dari Grand Unified Boot Loaders.
  • /dev: berisi referensi untuk semua CPU, yang direpresentasikan sebagai file dengan properti spesial.
  • /etc: banyak file konfigurasi penting ada disini.
  • /home: directory untuk pengguna biasa.
  • /initrd: (pada beberapa distro) informasi untuk booting, Jangan dihapus!
  • /lib: file library, termasuk berbagai macam file yang dibutuhkan oleh sistem dan pengguna.
  • /lost+found: semua partisi memiliki satu, saat sistem gagal semua file tersimpan disini.
  • /misc: kependekan dari miscellaneous, untuk berbagai tujuan.
  • /mnt: mount point standar untuk file system eksternal, seperti DVD rom atau SD card.
  • /net: mount point standar untuk seluruh file system yang remote.
  • /opt: berisi 3rd party software
  • /proc: file system virtual berisi informasi mengenai sumber daya sistem.
  • /root: directory home untuk pengguna administratif. Perhatikan perbedaan antara / dan /root.
  • /sbin: program yang digunakan oleh sistem dan system administrator.
  • /tmp: ruang temporer untuk digunakan oleh sistem, akan dibersihkan pada saat reboot. Jangan gunakan untuk penyimpanan data pekerjaan.
  • /usr: Program, library, dokumentasi dsb. Untuk program yang berhubungan dengan pengguna.
  • /var: penyimpanan untuk file variable dan file temporer yang digunakan oleh pengguna, seperti file log, antrian mail, atau penyimpanan temporer untuk file download.

Bagaimana anda mengetahui pada partisi mana sebuah directory berada? untuk mengetahui posisi directory gunakan perintah df . (tambahkan titik) sebagai opsi untuk memperlihatkan partisi dari directory yang sedang digunakan juga informasi mengenai jumlah ruang yang digunakan pada partisi ini.

Bagi banyak pengguna dan system administrator, pemahaman bahwa file dan directory tersusun layaknya struktur pohon sudah cukup, namun komputer tidak peduli dengan pemahaman struktur pohon itu, dan memang pada kenyataannya tidak sesederhana itu.

Dalam sebuah filesystem, sebuah file direpresentasikan oleh sebuah inode, sejenis nomor serial berisi informasi mengenai data aktual yang membentuk file, seperti: milik siapa file tersebut? dan dimanakah lokasinya pada hard disk?

Semua partisi memiliki sekumpulan inodenya sendiri, diseluruh sistem dengan beberapa partisi, file dengan nomor inode yang sama dapat dijumpai.

Tiap inode mendeskripsikan sebuah struktur data pada hard disk, menyimpan properti dari file, termasuk lokasi fisik dari data file. Saat sebuah hard disk bersiap untuk menyimpan data, biasanya saat awal proses instalasi sistem atau pada saat menambahkan disk ekstra ke sistem yang sudah ada, dibuat inode dalam nomor-tetap per partisi.  Nomor ini akan menjadi jumlah maksimum file, semua tipe file (termasuk directory, file spesial, link dst) yang dapat berada pada saat yang bersamaan pada partisi. Pada saat sebuah file baru dibuat, file ini akan mendapat inode yang didalamnya terdapat informasi berikut:

  • pemilik dan pemilik group dari sebuah file.
  • tipe file
  • izin untuk mengakses file
  • waktu pembuatan file, akses terakhir dan perubahan.
  • jumlah link atas sebuah file
  • ukuran file
  • address yang mendefinisikan lokasi sebenarnya dari data file

informasi yang tidak tersedia pada inode adalah nama file dan directory, keduanya disimpan dalam file directory spesial. Dengan membandingkan nama file dan nomor inode, sistem dapat membuat struktur pohon yang dipahami oleh pengguna. pengguna dapat menampilkan nomor inode menggunakan ls -i. Inode memiliki ruang sendiri yang terpisah pada disk.

Leave a Reply

Your email address will not be published. Required fields are marked *