# Linux Filesystems and the VFS

***

## **Filesystem Basics**

Program aplikasi membaca dan menulis berkas, bukan berurusan dengan lokasi fisik pada perangkat keras tempat berkas disimpan. Sistem berkas membuat format yang dapat digunakan pada partisi fisik.

***

## **Inodes**

Inode adalah struktur data pada disk yang mendeskripsikan dan menyimpan atribut file, termasuk lokasinya. Setiap file yang terdapat pada filesystem Linux dihubungkan dengan inode-nya sendiri. Semua data tentang sebuah file terdapat di dalam inode. Inode digunakan oleh sistem operasi untuk melacak properti seperti nama, lokasi, atribut file (hak akses, kepemilikan, dan lain-lain), waktu akses, dan item-item lainnya. Oleh karena itu, semua aktivitas I/O yang berhubungan dengan berkas biasanya juga melibatkan inode berkas.

`Inodes describe and store information about a file including:`

1. `Permissions​`
2. `User and group ownership​`
3. `Size​`
4. `Timestamps (nanosecond)`
   * `​Last access time`
   * `Last modification time`
   * `Change time.`

<figure><img src="https://3185617841-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Foy1LcUv79Hjpd0mu907S%2Fuploads%2FNVCSzAeFNlPyOsMcINdc%2Fa34281a5-948e-4aea-a89b-67f772b4d186.png?alt=media&#x26;token=25a3df71-3041-44e3-84c5-ddbe9c16fdca" alt=""><figcaption></figcaption></figure>

##

***

## **Hard and Soft Links**

File direktori adalah jenis file tertentu yang digunakan untuk mengaitkan nama file dan inode. Ada dua cara untuk mengaitkan (atau menautkan) nama file dengan inode:

* Hard links menautkan file ke sebuah inode. Sehingga, Memiliki nomor inode dan permission yang sama dari file asli.
* Soft links ini cocok untuk kita sebut dengan shortcut karena jika file induk/sumber di hapus atau di rubah namanya, maka file hasil softlink akan error.

Setiap hubungan antara isi berkas direktori dan sebuah inode dikenal sebagai sebuah link. Tautan/Links dapat dibuat dengan menggunakan **ln**.

<figure><img src="https://3185617841-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Foy1LcUv79Hjpd0mu907S%2Fuploads%2FgbwQ8UzNGeqHxfFkxmbh%2FCuplikan%20layar%202023-11-03%20065112.png?alt=media&#x26;token=a7e87d6e-0223-4209-a6b8-bd29edba3551" alt=""><figcaption></figcaption></figure>

##

***

## **Available Filesystems**

Linux bekerja dengan banyak jenis filesystem daripada sistem operasi lainnya. Sistem berkas yang umum digunakan antara lain ext4, xfs, btrfs, squashfs, nfs, dan vfat. Daftar sistem berkas yang saat ini didukung ada di **/proc/filesystems**.

##

***

## **Filesystem Varieties**

Linux mendukung banyak jenis sistem berkas, sebagian besar dengan akses baca dan tulis penuh, termasuk:

* <mark style="color:purple;">**ext4**</mark>: Sistem berkas asli Linux (sebelumnya ext2 dan ext3)
* <mark style="color:purple;">**XFS**</mark>: Sistem berkas berkinerja tinggi yang awalnya dibuat oleh SGI
* <mark style="color:purple;">**JFS**</mark>: Sistem berkas berkinerja tinggi yang awalnya dibuat oleh IBM
* <mark style="color:purple;">**Windows-natives**</mark>: FAT12, FAT16, FAT32, VFAT, NTFS
* <mark style="color:purple;">**Pseudo-filesystems**</mark> yang hanya berada di memori, termasuk proc, sysfs, devfs, debugfs -Network filesystems seperti NFS, coda, afs etc.

***

## **Journaling Filesystems**

[**Journaling**](#user-content-fn-1)[^1] adalah proses pencatatan setiap perubahan yang terjadi pada sistem file sehingga sistem operasi dapat memulihkan kondisi file system setelah terjadi crash atau kegagalan sistem.

### **Pengertian lainnya**

[**Journaling Filesystems**](#user-content-fn-2)[^2] adalah sistem file yang memelihara file khusus yang disebut jurnal yang digunakan untuk memperbaiki segala ketidakkonsistenan yang terjadi akibat komputer dimatikan secara tidak benar. Contohnya saat proses Shutdown yang biasanya disebabkan oleh gangguan pasokan listrik atau masalah perangkat lunak yang tidak dapat diselesaikan tanpa melakukan boot ulang.

***

## **Special Filesystems**

Linux secara luas menggunakan sistem berkas khusus untuk tugas-tugas tertentu. Sistem berkas ini sangat berguna untuk mengakses berbagai struktur data kernel dan menyetel perilaku kernel, atau untuk mengimplementasikan fungsi-fungsi tertentu.

<figure><img src="https://3185617841-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Foy1LcUv79Hjpd0mu907S%2Fuploads%2F77bdlGpqJFNFTNlnLnBO%2FSpesial-Fs.png?alt=media&#x26;token=5b8f389f-c3f6-4050-9e04-142ea60e8051" alt=""><figcaption></figcaption></figure>

***

## **Ext4 Superblock and Block Groups**

### **The Ext4 Filesystems**

<figure><img src="https://3185617841-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Foy1LcUv79Hjpd0mu907S%2Fuploads%2Fo6fJDNxW9l2PLRYEnlff%2Fext4-file-system.png?alt=media&#x26;token=83dd6350-0cc0-4727-9f6d-41600a2d746f" alt=""><figcaption></figcaption></figure>

[**Sistem file Extended Keempat (Ext4)**](#user-content-fn-3)[^3] adalah sistem file asli Linux yang dibuat untuk mengatasi masalah pada Ext3. Sistem file ini pertama kali dirilis sebagai ekstensi dari Ext3 yang kompatibel dengan Ext4.

Ukuran filesystem Ext4 memungkinkan volume hingga ukuran 1 exbibyte dan file hingga ukuran 16 tebibyte. Sistem file ext3 hanya memberikan ukuran sistem file maksimum 16 TB dan ukuran file maksimum 2 TB.

Ext4 menggunakan checksum jurnal untuk mengetahui kesehatan blok jurnal. Fitur ini digunakan untuk menghindari kerusakan data. Anda dapat mematikan mode penjurnalan di ext4 jika menyebabkan overhead.

Ext4 juga mengimplementasikan teknik kinerja yang disebut 'allocate-on-flush,' yang menunda alokasi blok hingga data sebenarnya ditulis ke disk. Hal ini membantu meningkatkan efisiensi operasi tulis ke disk.

***

## **ext4 Superblock and Block Groups**

Superblock[^4] adalah salah satu bagian utama dari sebuah filesystem Ext4. Ini adalah blok data yang berisi informasi penting tentang filesystem secara keseluruhan.&#x20;

Superblok mencatat berbagai informasi tentang filesystem yang melingkupi, seperti jumlah blok, jumlah inode, fitur yang didukung, informasi pemeliharaan, dan banyak lagi.

Superblock sangat penting untuk mengakses dan mengelola filesystem, dan setiap filesystem Ext4 memiliki satu superblock utama serta cadangan superblock sebagai langkah cadangan jika superblock utama rusak atau korup.&#x20;

Superblock untuk filesystem disimpan di blok 0 pada disk. Superblock ini berisi informasi tentang filesystem itu sendiri.

<figure><img src="https://3185617841-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Foy1LcUv79Hjpd0mu907S%2Fuploads%2FJJlxVIkenbVK3IEQPejq%2FSuperblock.jpg?alt=media&#x26;token=814a06c0-3efd-48ac-8f4f-542c294ee876" alt=""><figcaption></figcaption></figure>

Sistem file ext4 dibagi menjadi satu set grup blok. Ukuran blok default adalah 4 KB, yang akan membuat grup blok sebesar 128 MB.

<figure><img src="https://3185617841-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Foy1LcUv79Hjpd0mu907S%2Fuploads%2FoLntZmjpdTeZq0k3j8Ox%2Fdefault-block.png?alt=media&#x26;token=bcf8203c-d416-4e96-8dcc-aeb46d1eefcd" alt=""><figcaption></figcaption></figure>

Block groups adalah kelompok blok yang digunakan untuk membagi dan mengorganisir ruang disk dalam sistem berkas Ext4. Setiap block group memiliki superblock block (bagian dari cadangan superblock) yang menyimpan informasi khusus tentang block group tersebut.

### **dumpe2fs**

Anda dapat menggunakan program dumpe2fs untuk mendapatkan informasi tentang partisi tertentu. Lihat dumpe2fs untuk memindai informasi sistem file seperti batas, kemampuan dan tanda, serta atribut lainnya.

```
Contoh: 
$ sudo dumpe2fs /dev/sdb1
```

### **tune2fs**

Perintah `tune2fs` adalah utilitas yang digunakan untuk mengatur dan mengubah pengaturan pada sistem berkas Ext2, Ext3, dan Ext4 di sistem operasi Linux. Ini memungkinkan pengguna atau administrator untuk mengkonfigurasi berbagai parameter dan properti sistem berkas, termasuk pengaturan seperti ukuran jurnal, label berkas, jumlah tindakan, dan lainnya. Untuk lengkapnya jalankan perintah man page.

***

## **XFS**

Filesystem XFS dirancang dan dibuat oleh Silicon Graphics Inc. (SGI) dan digunakan dalam sistem operasi IRIX dan kemudian di-porting ke Linux. Ini dirancang untuk menangani kumpulan data besar untuk sistem SGI, serta menangani tugas I/O paralel dengan sangat efektif.

[^1]: <https://www.copaster.com/tipe-file-yang-digunakan-oleh-linux-secara-umum-adalah/>

[^2]: <https://www.quora.com/What-is-a-journaling-file-system-Why-do-we-use-it>

[^3]: <https://recoverit.wondershare.co.id/file-system/ext4-file-system.html>

[^4]: <https://adil.medium.com/ext4-filesystem-data-blocks-super-blocks-inode-structure-1afb95c8e4ab>
