Jenis sistem file Linux dan fitur-fiturnya. File dan Breaking File System Ext2 file file ext2 3

Sekarang kami menjelaskan sistem file disk paling populer Linux - EXT2. Rilis pertama Linux menggunakan sistem file minix 1, yang memiliki nama file pendek dan ukuran file maksimum 64 MB. Sistem file Minix 1 akhirnya diganti dengan sistem file ext extended pertama, yang memungkinkan untuk menggunakan nama file yang lebih panjang dan ukuran file yang lebih besar. Karena efisiensinya yang rendah (dalam arti kinerja), sistem EXT diganti dengan urutan ext2-nya, yang masih banyak digunakan.

Partisi disk dengan ext2 berisi sistem file dengan ditunjukkan pada Gambar. 10.17 tata letak. Blok 0 tidak digunakan oleh sistem Linux dan berisi kode beban komputer. Mengikuti blok 0, partisi disk dibagi menjadi blok blok (tidak termasuk batas silinder disk). Setiap kelompok diselenggarakan sebagai berikut.


Blok pertama adalah superblock (superblock), yang menyimpan informasi tentang tata letak sistem file, termasuk jumlah I-node, jumlah blok disk, awal daftar blok disk gratis (ini biasanya beberapa ratus elemen ). Kemudian mengikuti deskriptor grup yang berisi informasi tentang lokasi array bit, jumlah blok bebas dan i-node dalam grup, serta jumlah direktori dalam grup. Informasi ini penting, karena sistem file ext2 mencoba mendistribusikan direktori secara merata di seluruh disk.

Dalam dua array bit, blok gratis dan i-node gratis direkam (ini juga diwarisi dari sistem file minix 1 dan membedakannya dari sebagian besar sistem file UNIX, di mana daftar ini digunakan untuk blok gratis). Ukuran setiap array bit sama dengan satu blok. Dengan ukuran blok 1 KB, skema ini membatasi ukuran blok blok 8192 blok dan 8192 i-node. Nomor pertama adalah batasan nyata, dan yang kedua praktis tidak. Dengan blok angka 4 Kb empat kali lebih banyak.

Maka i-node itu sendiri berada. Mereka diberi nomor dari 1 hingga yang maksimal. Ukuran setiap i-node adalah 128 byte, dan menggambarkannya tepat satu file. I-node berisi informasi akun (termasuk seluruh panggilan kembali, yang hanya mengambilnya dari i-node), serta jumlah informasi yang cukup untuk menentukan lokasi semua blok disk yang berisi data file.

Mengikuti i-node adalah blok data. Semua file dan direktori disimpan di sini. Jika file atau direktori terdiri dari lebih dari satu blok, maka blok ini tidak diperlukan untuk terus menerus pada disk. Bahkan, blok file besar kemungkinan besar tersebar di seluruh disk.

Katalog yang sesuai i-node tersebar di semua kelompok blok disk. Ext2 sedang mencoba mengatur file biasa di blok blok yang sama dengan direktori induk, dan file data berada di blok yang sama dengan kode sumber I-node (asalkan ada ruang yang cukup). Gagasan ini dipinjam dari Sistem File Sistem File Fast Berkeley (McKusick et al., 1984). Array bit digunakan untuk membuat keputusan cepat mengenai pemilihan

tempat untuk data sistem file baru.

Ketika blok file baru disorot, ext2 juga membuat pemilihan preemptive (preallocates) dari beberapa (delapan) blok tambahan untuk file yang sama (untuk meminimalkan fragmentasi file karena operasi catatan di masa depan). Skema ini mendistribusikan sistem file di seluruh disk. Ini juga memiliki kinerja yang baik (karena trennya terhadap lokasi terkait dan mengurangi fragmentasi).

Untuk mengakses file, Anda harus terlebih dahulu menggunakan salah satu panggilan sistem Linux (seperti terbuka) yang Anda ingin menentukan jalur ke file. Jalur ini dibongkar, dan komponen katalognya diekstraksi darinya. Jika jalur relatif ditentukan, pencarian dimulai dari katalog saat ini proses, sebaliknya - dari direktori root. Dalam hal apa pun, I-node untuk direktori pertama mudah ditemukan: Dalam proses deskriptor ada pointer ke sana atau (dalam hal direktori root) itu disimpan dalam disk tertentu pada disk.

Direktori ini memungkinkan Anda untuk menggunakan nama file hingga 255 karakter (Gbr. 10.18). Setiap direktori terdiri dari sejumlah blok disk tertentu (sehingga direktori dapat ditulis ke disk Atomino). Dalam direktori, elemen untuk file dan direktori dalam urutan yang tidak diporeksi (setiap item secara langsung mengikuti yang sebelumnya). Elemen tidak dapat melewati batas-batas blok, jadi pada akhir setiap blok disk biasanya ada sejumlah byte yang tidak digunakan.


Setiap entri direktori pada Gambar. 10.18 terdiri dari empat bidang panjang tetap dan satu bidang panjang variabel. Bidang pertama adalah nomor 19 I-node untuk file kolosal, 42 untuk file voluminous dan 88 untuk direktori bigdir. Berikut ini adalah bidang rec_len, yang melaporkan ukuran seluruh entri direktori dalam byte (mungkin, bersama dengan placeholder tambahan setelah nama). Bidang ini diperlukan untuk menemukan entri berikutnya (dalam kasus ketika nama file dilengkapi dengan jumlah byte yang tidak diketahui). Pada gambar, bidang ini ditunjukkan oleh panah. Kemudian ada bidang jenis bidang, direktori, dll. Bidang terakhir dari panjang tetap berisi panjang nama file dalam byte (8, 10 dan 6 untuk contoh ini). Akhirnya, nama file datang dalam byte nol itu sendiri dan ditambah ke batas 32-bit. Bytebox tambahan dapat mengikuti.

Pada Gambar. 10.18, B ditunjukkan direktori yang sama setelah elemen untuk hall yang dihapus. Semua yang dilakukan dalam katalog - meningkatkan jumlah dalam ukuran perekaman file kolosal sebelumnya, dan byte entri direktori untuk file voluminous jarak jauh diubah menjadi filler rekaman pertama. Selanjutnya, byte ini dapat digunakan untuk merekam saat membuat file baru.

Karena pencarian di direktori dibuat secara linear, maka pencarian untuk catatan yang ada di akhir direktori besar mungkin memakan waktu lama. Oleh karena itu, sistem mendukung direktori cache ke mana akses baru-baru ini dibuat. Pencarian dalam cache dibuat dengan nama file, dan jika ditemukan, maka pencarian linear mahal tidak lagi diperlukan. Objek dental dimasukkan ke dalam cache elemen direktori untuk masing-masing komponen jalur, dan (melalui I-node) sedang mencari di direktori item jalur berikutnya (sampai file i-node yang sebenarnya ditemukan).

Misalnya, untuk menemukan file yang ditentukan oleh jalur absolut (seperti / usr / ast / file), langkah-langkah berikut harus dilakukan. Pertama-tama, sistem menemukan direktori root, yang biasanya menggunakan i-node dengan nomor 2 (terutama ketika i-node dengan nomor 1 dicadangkan untuk bekerja dengan blok buruk). Ini menempatkan elemen yang sesuai dalam cache item direktori (untuk pencarian katalog root di masa depan). Ini kemudian mencari string "USR" di direktori root untuk mendapatkan nomor i-node untuk direktori / usr (yang juga dimasukkan ke dalam cache elemen direktori). I-node ini kemudian dibaca, dan blok disk diambil darinya, sehingga Anda dapat membaca direktori / usr dan mencari baris AST di dalamnya. Setelah elemen yang sesuai ditemukan, Anda dapat menentukan jumlah I-node untuk / usr / ast. Memiliki nomor I-node ini, Anda dapat membacanya dan menemukan blok direktori. Akhirnya, kami mencari "File" dan menemukan jumlah i-node-nya. Dengan demikian, penggunaan jalur relatif tidak hanya lebih nyaman bagi pengguna, tetapi juga mengurangi jumlah operasi untuk sistem.

Jika file tersedia, sistem mengambil nomor I-node dan menggunakannya sebagai indeks tabel I-node (pada disk) untuk mencari i-node yang sesuai dan membacanya ke dalam memori. I-node ini ditempatkan di tabel i-node (tabel I-node) - struktur data kernel, yang berisi semua i-node untuk file dan direktori yang saat ini terbuka. Format i-node harus berisi (minimal) semua bidang yang mengembalikan sistem panggilan sistem sehingga panggilan stat dapat bekerja (lihat Tabel 10.10). Di tab. 10.13 menunjukkan beberapa bidang struktur I-node yang didukung dalam sistem file Linux. Struktur sebenarnya dari I-node mengandung banyak bidang, karena struktur yang sama digunakan untuk mewakili direktori, perangkat, dan file khusus lainnya. Struktur I-node juga mengandung juga disediakan untuk penggunaan di masa depan bidang. Ceritanya telah menunjukkan bahwa bit yang tidak digunakan sudah lama tersisa tanpa urusan.

Sekarang mari kita lihat bagaimana sistem membaca file. Anda ingat bahwa panggilan khas untuk prosedur perpustakaan untuk memulai panggilan sistem dibaca sebagai berikut:

n \u003d baca (fd, buffer, nbytes);


Ketika kernel menerima kontrol, maka semua yang dapat dimulai - ketiga parameter dan informasi ini dalam tabel internalnya (terkait dengan pengguna). Salah satu elemen dari tabel internal ini adalah array deskriptor file. Ini diindeks oleh deskriptor file dan berisi satu elemen ke setiap file terbuka (ke dalam jumlah maksimum, default biasanya 32).

Idenya adalah memulai dengan deskriptor file ini dan menyelesaikan gelembung yang sesuai. Mari kita lihat satu skema yang sepenuhnya mungkin: Mari kita letakkan pointer pozel ke tabel deskriptor file. Meskipun kesederhanaan, metode ini (sayangnya) tidak berfungsi. Masalahnya adalah sebagai berikut. Dengan setiap deskriptor file, pointer harus terhubung dalam file yang mendefinisikan byte dalam file dari mana operasi baca atau perekaman berikutnya akan dimulai. Di mana pointer ini disimpan? Salah satu pilihan adalah menempatkannya di meja bus. Namun, pendekatan ini tidak akan dapat bekerja jika beberapa proses yang tidak terhubung satu sama lain secara bersamaan akan membuka file yang sama, karena setiap proses harus memiliki pointernya sendiri.

Solusi kedua dari solusi adalah menempatkan pointer di deskriptor tabel. Dalam hal ini, setiap file membuka proses memiliki posisi sendiri dalam file. Sayangnya, skema seperti itu juga tidak berfungsi, tetapi penyebab kegagalan dalam hal ini tidak begitu jelas dan terkait dengan sifat berbagi file dalam sistem Linux. Pertimbangkan skrip shell 5, terdiri dari dua perintah (P1 dan P2), yang harus dilakukan pada gilirannya. Jika skrip dipanggil oleh baris perintah

diharapkan bahwa perintah P1 akan menulis outputnya ke file X, dan kemudian perintah P2 juga akan menulis outputnya ke file X, mulai dari tempat di mana perintah P1 berhenti.

Ketika shell memulai proses P1, file X pertama-tama akan kosong, sehingga perintah P1 mulai menulis ke file di posisi 0. Namun, ketika P1 menyelesaikan pekerjaannya, mekanisme tertentu perlu memastikan bahwa proses P2 akan melakukannya Lihat sebagai posisi awal bukan 0 (dan ini adalah bagaimana hal itu akan terjadi jika posisi dalam deskriptor file dalam file ada di tabel), dan nilai yang dihentikan PI.

Cara itu dilakukan ditunjukkan pada Gambar. 10.19. Fokusnya adalah memasuki tabel baru - tabel deskripsi file terbuka (buka tabel deskripsi file) - antara tabel deskriptor file dan tabel i-node dan simpan pointer dalam file (serta bit baca / tulis) . Pada gambar, proses induknya adalah shell, dan putri pertama kali proses PI, dan kemudian proses P2. Ketika shell menciptakan proses PI, struktur penggunanya (termasuk tabel deskriptor file) adalah salinan yang tepat dari struktur membran yang sama, sehingga keduanya berisi pointer ke tabel deskripsi file terbuka yang sama. Ketika prosespi menyelesaikan pekerjaannya, deskriptor file shell terus menentukan tabel deskripsi file terbuka, yang berisi posisi posisi P1 dalam file. Ketika sekarang shell menciptakan proses P2, maka proses anak baru secara otomatis mewarisi posisi dalam file, sementara bukan proses baru, maupun shell berkewajiban untuk mengetahui nilai saat ini dari posisi ini.


Jika ada proses asing membuka file, itu akan menerima entri Anda sendiri di tabel deskripsi tabel dengan posisinya dalam file, yaitu, itu perlu. Dengan demikian, tugas tabel deskripsi file terbuka adalah untuk memungkinkan proses orangtua dan anak untuk berbagi satu pointer dalam file, tetapi untuk proses asing mengalokasikan pointer pribadi.

Jadi (kembali ke masalah membaca membaca baca), kami menunjukkan bagaimana posisi dalam file dan i-node ditentukan. I-node berisi alamat disk dari 12 blok file pertama. Jika posisi dalam file jatuh ke 12 blok pertamanya, blok file yang diinginkan dibaca dan data disalin ke pengguna. Untuk file, panjangnya melebihi 12 blok, i-node berisi alamat disk dari blok tidak langsung tunggal (blok tidak langsung tunggal) (Gbr. 10.19). Blok ini berisi alamat disk blok disk tambahan. Misalnya, jika ukuran blok adalah 1 kb, dan alamat disk membutuhkan 4 byte, unit tidak langsung tunggal dapat menyimpan hingga 256 alamat disk. Skema ini memungkinkan Anda untuk mendukung file hingga 268 KB.

ext2. (juga disebut sebagai ext2fs.) - Sistem File Diperpanjang Kedua(Sistem file diperpanjang kedua) adalah sistem file yang dibangun di kernel Linux. Pencipta dan pengembang ext2 adalah kartu remy. Sistem file ext2 dibangun olehnya sebagai imbalan untuk versi lama, versi sebelumnya - ext.

Menurut indikator tersebut sebagai kecepatan dan kinerja, sistem file ini dapat berfungsi sebagai referensi. Ini diceritakan tentang hasil tes kinerja sistem file. Misalnya, dalam tes untuk kecepatan membaca dan menulis yang konsisten, yang dilakukan Pusat Teknis Dell, sistem file ext2 melebihi EXT3, dan lebih rendah dalam kecepatan membaca hanya ekst4 modern.

Kerugian utama ext2 adalah bahwa itu bukan sistem file jurnal. Namun, kerugian ini dihilangkan dalam sistem file berikutnya - ext3.

eXT2 digunakan pada kartu flash dan solid-state drive (SSD), karena kurangnya jurnal adalah keuntungan ketika bekerja dengan drive dengan pembatasan jumlah siklus rekaman.

Sejarah menciptakan ext2.

Pada saat perkembangan pesat sistem Linux, ia menggunakan sistem file Minix. Itu stabilitas cukup tinggi, tapi itu 16-bit. Akibatnya, ada batasan ketat pada 64 MB ke bagian. Selain itu, ada batas pada panjang maksimum nama file, yang 14 karakter.

Pembatasan ini secara agregat adalah alasan pengembangan "sistem file yang disempurnakan" (karenanya istilah " Sistem File Extended »). Dia memiliki tugas untuk menyelesaikan dua masalah utama minix. Sistem file baru diterbitkan pada bulan April 1992. Itu adalah ext, itu memperluas batas pada ukuran file ke 2 gigabytes dan memasang panjang batas nama file dalam 255 karakter.

Namun, terlepas dari keberhasilan sistem file baru, bagaimanapun, masih ada banyak masalah yang belum terselesaikan. Misalnya, tidak ada dukungan untuk akses terpisah, tidak ada perangko waktu modifikasi data. Kebutuhan untuk menyelesaikan tugas-tugas ini dan berfungsi sebagai motif untuk membuat versi berikutnya dari sistem file Extended Exted2 (" Sistem File Diperpanjang Kedua »). EXT2 dikembangkan pada Januari 1993, ia juga mengimplementasikan daftar kontrol akses ACL yang sesuai dan atribut file yang diperluas.

Organisasi logis ext2.

Grafik hierarki direktori ext2 disajikan dalam bentuk jaringan. Ini karena fakta bahwa satu file dapat segera memasuki beberapa direktori.

Semua jenis file memiliki nama simbolis. Dalam sistem file yang terorganisir secara hierarkis, tiga jenis nama digunakan: sederhana, komposit dan relatif. Jadi di ext2. Dalam hal nama sederhana, batasannya adalah bahwa panjangnya tidak boleh melebihi 255 karakter, selain itu, simbol nol dan slash harus ada dalam nama.

Adapun simbol nol, pembatasan dikaitkan dengan representasi baris dalam bahasa SI, dalam kasus simbol garis miring, semuanya adalah digunakan sebagai karakter pemisah antar direktori.

Nama lengkap adalah rantai nama simbolis sederhana dari semua direktori di mana jalur dari root berjalan ke file ini. Di ext2, file dapat memasuki beberapa direktori, itu berarti dapat memiliki beberapa nama lengkap (satu file adalah beberapa nama lengkap). Tapi bagaimanapun, nama lengkapnya mendefinisikan file.

Atribut Ext2:

  • ketik dan akses hak untuk file,
  • pemilik, Grup Akses,
  • informasi tentang operasi yang diizinkan,
  • waktu pembuatan, tanggal akses terakhir, tanggal perubahan terakhir dan waktu penghapusan terakhir,
  • ukuran file saat ini
  • spesifikasi File:
    • file biasa
    • katalog,
    • perangkat berorientasi byte perangkat,
    • perangkat berorientasi pada blok file,
    • bernama saluran.
    • tautan simbolis
  • jumlah blok yang diduduki,
  • lainnya

Atribut file terkandung dalam tabel khusus, dan bukan di direktori, karena mungkin dalam sistem file sederhana. Akibatnya, direktori memiliki struktur yang sangat sederhana yang terdiri dari dua bagian: jumlah deskriptor indeks dan nama.

Organisasi fisik ext2.

Struktur bagian disk

Sebagai bagian dari ext2, berikut ini dapat dibedakan:

  • blok dan blok blok;
  • deskriptor indeks;
  • superblok.

Seluruh ruang partisi disk dibagi menjadi blok tetap, memblokir berbagai ukuran sektor (1024, 2048, 4096 atau 8192 byte). Ukuran blok ditentukan saat membuat sistem file pada bagian disk. Semua blok ditugaskan nomor urutan. Untuk mengurangi fragmentasi dan jumlah gerakan kepala hard disk, saat membaca array data besar, blok digabungkan menjadi beberapa grup.

Konsep dasar sistem file adalah deskriptor indeks (juga disebut inode. - node informasi.). Ini adalah struktur khusus yang berisi informasi tentang atribut dan lokasi file fisik. Indeks dekaptonstructors digabungkan menjadi tabel yang terkandung pada awal setiap blok blok. Superblock adalah elemen utama dari sistem file ext2. Ini berisi informasi umum tentang sistem file. Superblock terletak di 1024 byte dari awal bagian. Integritas superblok menentukan fungsionalitas sistem file. OS membuat beberapa salinan cadangan superblok - jika terjadi kerusakan pada partisi. Di blok berikutnya setelah superblock ada tabel deskriptor global - deskripsi grup blok dalam bentuk array dengan informasi umum tentang semua grup blok.

Blok Group.

Semua blok EXT2 blok dipecah menjadi beberapa kelompok. Untuk setiap kelompok, entri terpisah dibuat dalam tabel deskriptor global. Entri ini menyimpan parameter utama, seperti itu: nomor blok dalam bitmap dan tabel, jumlah blok gratis dalam grup, jumlah deskriptor indeks yang berisi direktori.

Bit peta blok. - Ini adalah sistem di mana setiap bit menginformasikan apakah file yang sesuai dengan file tersebut memiliki file. Jika bit 1, maka blok sibuk. Fungsi serupa dilakukan oleh bitmap deskriptor indeks: Ini menunjukkan deskriptor indeks yang sibuk, dan yang tidak. Kernel Linux mencoba untuk mendistribusikan direktori inode secara merata dalam grup, dan inode file - pindah ke grup dengan katalog induk. Tempat yang tersisa muncul di tabel saat data ditugaskan untuk menyimpan file.

Sistem Pengalamatan Data

Sistem pengalamatan data adalah salah satu komponen paling serius dan kunci dari sistem file. Berkat itu, file yang diinginkan adalah di antara banyak blok kosong atau sibuk pada disk.

eXT2 menerapkan skema pengalamatan blok file berikut. Untuk menyimpan alamat file, 15 bidang terisolasi, masing-masing terdiri dari 4 byte. Jika file cocok dalam 12 blok, jumlah cluster masing-masing tercantum dalam dua belas alamat pertama. Jika ukuran file melebihi 12 blok, bidang berikut berisi alamat cluster di mana angka-angka blok file berikut dapat ditemukan. Jadi, bidang ketiga belas digunakan untuk pengalamatan tidak langsung.

Dengan ukuran maksimum blok dalam 4096 byte, cluster yang sesuai dengan bidang ke-13 dapat berisi hingga 1024 angka dari blok file berikut. Jika ukuran file melebihi 12 + 1024 blok, maka bidang ke-14 digunakan, di mana alamat cluster yang berisi 1024 nomor cluster terletak, yang masing-masing mengacu pada blok file 1024. Sudah ada pengalamatan tidak langsung ganda. Dan jika file tersebut mencakup lebih dari 12 + 1024 + 1048576 blok, maka bidang ke-15 terakhir untuk pengalamatan tiga tidak langsung diterapkan.

Sistem pengalamatan seperti itu memungkinkan Anda untuk memiliki file, lebih dari 2 TB dengan ukuran blok maksimum dalam 4096 byte.

Jika Anda memiliki dua sistem operasi, Windows dan Linux diinstal, maka Anda mungkin ingin terkandung pada bagian-bagian sistem operasi gratis langsung dari bawah Windows tanpa memuat ulang komputer.

Sayangnya, dukungan dari bagian OS Linux di Windows tidak disediakan. Dan sia-sia. Tampaknya bagi saya bahwa itu mungkin isyarat yang indah dari Microsoft.

Inti dari masalahnya adalah bahwa Windows menggunakan sistem file NTFS, dan Linux memiliki caranya sendiri untuk mengatur file, sistem file yang diperluas, versi terbaru yang memiliki urutan nomor 4.

Linux lebih ramah kepada penggunanya daripada saudara perempuannya yang komersial: di Linux, default didukung oleh sistem file Windows NTFS. Tentu saja, Anda tidak akan dapat menginstal Linux pada bagian NTFS, tetapi Anda dapat membaca dan menulis data dari ini.

Ext2 ifs.

Ext2 IFS Mendukung Windows NT4.0 / 2000 / XP / 2003 / Vista / 2008 versi x86 dan x64 dan memungkinkan Anda untuk melihat konten bagian Linux Ext2, dan juga dapat merekam pada mereka. Utilitas menetapkan driver sistem ext2fs.sys, yang memperluas kemampuan Windows dan mencakup dukungan penuh untuk ext2 di dalamnya: partisi ext2 ditugaskan huruf disk, dan file dan folder ditampilkan pada mereka dalam dialog semua aplikasi, misalnya , di penjelajah.

Ext2 FSD.

Ext2 FSD adalah driver gratis untuk Windows Systems (2K / XP / Vista / 7 versi x86 dan x64). Seperti utilitas sebelumnya, yang, pada esensinya, juga pengemudi, termasuk dukungan penuh untuk sistem file ext2 di Windows.

LTOOLS - Kit utilitas baris perintah yang memungkinkan Anda membaca dan merekam data pada / dari Linux ext2, ext3 dan reiserfs (sistem file Linux standar) dari DOS atau Windows.

Ada versi program dengan shell grafis (ditulis di Jawa) - LTOOLSGUI, serta versi dengan shell grafis yang ditulis.

Ext2read.

Untuk hidangan penutup seperti biasa yang paling lezat.

Ext2read adalah utilitas berdasarkan file manajer, yang memungkinkan Anda untuk melihat dan menulis ke bagian ext2 / ext3 / ext4. Mendukung LVM2 dan yang membedakannya dari program lain dari tinjauan ini, sistem file ext4. Dukungan tertanam untuk direktori penyalinan rekursif.

Dan ini hidangan penutup kedua. Awalnya, dikatakan bahwa isyarat yang baik dari Microsoft akan dimasukkan dukungan untuk bagian Linux di Windows secara default.

Gerakan itu masih dibuat pada peringatan 20 tahun Linux. Lihat dirimu.

Itu saja. Terima kasih atas perhatiannya. Saya akan pergi berjuang kembali dari Mei Beetles. Musim semi mereka sangat sooo. 🙂.

Vladimir Miskov

Arsitektur sistem file ext2

Artikel tersebut membahas struktur logis dari sistem file ext2 dari sistem operasi Linux.

Komponen dasar dari sistem file ext2

Seperti dalam sistem file UNIX, komponen berikut dapat dibedakan sebagai bagian dari sistem file ext2:

  • blok dan blok blok;
  • node informasi;
  • superblok.

Blok dan blok blok

Seluruh ruang partisi disk dibagi menjadi blok ukuran tetap, berbagai ukuran sektor - 1024, 2048 dan 4096 byte. Ukuran blok ditunjukkan saat membuat sistem file pada bagian hard disk. Ukuran blok yang lebih kecil menghemat ruang pada hard disk, tetapi juga membatasi ukuran sistem file maksimum. Semua blok memiliki nomor urutan. Untuk mengurangi fragmentasi dan jumlah gerakan kepala hard disk, ketika membaca array data besar, blok digabungkan menjadi beberapa grup.

Node informasi.

Konsep dasar sistem file adalah simpul informasi, node informasi, atau inode. Ini adalah struktur khusus yang berisi informasi tentang atribut dan lokasi file fisik. Atribut file adalah jenisnya (file normal, direktori, dll), hak akses, pengidentifikasi pemilik, ukuran, waktu pembuatan. Informasi tentang lokasi fisik adalah urutan nomor blok absolut yang berisi data file.

Superblock.

Superblock adalah elemen utama dari sistem file ext2. Ini berisi informasi sistem file berikut (daftar tidak lengkap):

  • jumlah total blok dan inode dalam sistem file;
  • jumlah blok dan inode gratis dalam sistem file;
  • ukuran blok sistem file;
  • jumlah blok dan inode dalam grup;
  • inode ukuran;
  • pengidentifikasi sistem file;
  • jumlah blok data pertama.

Dengan kata lain, ini adalah angka blok yang mengandung superblok. Nomor ini selalu sama dengan 0 jika ukuran blok sistem file lebih besar dari 1024 byte, dan 1, jika ukuran blok adalah 1024 byte.

Fungsionalitas sistem file langsung tergantung pada integritas superblok. Sistem operasi membuat beberapa salinan cadangan superblock untuk dapat memulihkannya jika terjadi kerusakan. Salinan utama terletak pada offset 1024 byte dari awal bagian di mana sistem file dibuat (1024 byte pertama dicadangkan untuk bootloader sistem operasi).

Versi awal dari sistem file ext2 membuat salinan superblock di awal setiap blok blok. Hal ini menyebabkan hilangnya ruang disk yang besar, jadi kemudian jumlah salinan cadangan superblok berkurang, dan kelompok blok 0, 1, 3, 5 dan 7 dialokasikan untuk penempatan mereka.

Format Grup Blok.

Diagram struktural umum dari sistem file ext2 disajikan pada Gambar. satu.

Hampir semua kelompok blok memiliki format yang sama. Pada setiap kelompok, selain blok informasi, informasi tentang pekerjaan blok dan kelompok inode dalam bentuk bitmap disimpan. Blok blok 0 juga termasuk superblok dan deskriptor tabel dari grup yang akan kami pertimbangkan di bawah ini.

Bitting Map of Pekerjaan Blok biasanya terletak di blok pertama grup. Jika salinan cadangan ada di grup, bitmap terletak di blok kedua grup. Ukuran bitmap adalah satu blok. Setiap bit kartu ini menunjukkan keadaan blok. Jika bit diatur (1), blok sibuk jika blok diatur ulang (0) - blok gratis. Blok pertama grup sesuai dengan bit nol kartu, blok kedua - bit pertama, dll.

Inode, terletak di dalam kelompok yang sama, dikumpulkan di tabel. Di gigitan Peta Pekerjaan Grup Inode setiap bit mencirikan status elemen dalam tabel kelompok inode.

Setiap blok blok dijelaskan menggunakan deskriptor blok grup. Pegangan grup adalah struktur yang berisi informasi tentang alamat bitmap blok blok, inode Bitmap sibuk dan tabel inode dari grup yang sesuai. Semua deskriptor kelompok dikumpulkan di tabel deskriptor grup, yang disimpan dalam kelompok blok 0. Sama seperti untuk superblok, sistem operasi membuat salinan cadangan dari deskriptor tabel.

Algoritma membaca file

Setiap inode, serta blok, memiliki nomor urut, unik dalam sistem file, dan berisi informasi hanya tentang satu file. Dengan demikian, untuk mengakses isi file, Anda perlu mengetahui urutan nomor inode yang sesuai dengannya.

Seperti disebutkan di atas, informasi tentang lokasi file fisik terkandung dalam inode. Informasi ini adalah urutan nomor blok 32-bit yang berisi data file (Gbr. 1). 12 angka pertama adalah tautan langsung ke blok informasi (nomor blok langsung). Nomor ke-13 adalah tautan tidak langsung (nomor blok tidak langsung). Ini berisi alamat blok di mana alamat blok informasi disimpan. Kamar ke-14 adalah tautan tidak langsung ganda (nomor blok ganda), angka ke-15 adalah tautan tiga kali lipat (nomor triple blok).

Nama file dalam inode tidak termasuk, mengatur kesesuaian antara nama file dan nomor urutan inode dilakukan melalui direktori.

Katalog.

File dalam sistem UNIX dan POSIX disimpan dalam sistem file hierarkis pohon. Akar sistem file adalah direktori root ditunjukkan oleh simbol "/". Setiap node perantara di pohon sistem file adalah direktori. Simpul akhir dari pohon sistem file adalah direktori atau file kosong. Nama jalur absolut dari file tersebut terdiri dari nama-nama semua direktori yang mengarah ke file yang ditentukan, dimulai dengan direktori root. Jadi, nama trek /home/test.file berarti bahwa file tes.file terletak di direktori home, yang, pada gilirannya, terletak di katalog root "/".

Katalog, serta file, dijelaskan menggunakan inode. Isi direktori adalah array catatan, masing-masing berisi informasi tentang file yang "di dalam" direktori saat ini.

Catatan direktori memiliki format berikut:

  • file inode nomor urutan;
  • panjang perekaman dalam byte;
  • nama file;
  • panjang nama file.

Pencarian file inode selalu dimulai dengan direktori root. Misalnya, untuk mendapatkan nomor urutan inode di direktori root, sistem operasi harus mendapatkan konten direktori root, menemukannya dengan nama file ini dan menghapus nomor file inode dari catatan ini.

Beberapa nomor inode dicadangkan oleh sistem file, daftar mereka terkandung dalam file header:

* Nomor inode khusus

#Define ext2_bad_ino 1 / * blok buruk inode * /

#Define ext2_root_in 2 / * inode root * /

#Define ext2_acl_idx_in 3 / * inode ACL * /

#Define ext2_acl_data_ino 4 / * acl inode * /

#Define ext2_boot_loader_ino 5 / * boot loader inode * /

#Define ext2_undel_dir_ino 6 / * inode direktori undelite * /

Untuk merekam direktori root, inode dicadangkan pada angka 2 (root inode). Inode ini ada di blok blok 0 dan mengambil posisi kedua di tabel inode grup ini. Jumlah inode non-surtered pertama disimpan di Superblock.

Setelah menentukan angka sekuens inode, kernel menghitung nomor kelompok di mana inode ini berada, dan posisinya di tabel kelompok inode. Mempertimbangkan inode dari posisi ini, sistem operasi menerima informasi file penuh, termasuk alamat blok di mana konten file disimpan.

Jumlah blok di mana inode terhitung oleh rumus:

grup \u003d (inode_num - 1) / inodes_per_group

dimana:

  • kelompok.- Jumlah blok blok yang diinginkan;
  • inode_num. - Urutan nomor inode mendefinisikan file;
  • inodes_per_group. - Jumlah inode dalam grup (informasi ini ada di Superblock).

Posisi inode dalam tabel kelompok inode ditentukan oleh rumus:

index \u003d (inode_num - 1)% inodes_per_grupa

di mana indeks adalah posisi inode dalam tabel.

Pertimbangkan contoh mendapatkan isi file uji. FileFile yang terletak di direktori root. Untuk membaca file /test.file:

  • dalam array catatan direktori root, temukan entri tentang file ini;
  • ekstrak nomor urutan file inode, hitung nomor grup di mana inode ini berada;
  • dari deskriptor grup ini, Anda mengekstrak alamat tabel grup inode;
  • hitung posisi inode dalam tabel ini;
  • baca file inode;
  • dari inode untuk mengekstrak alamat blok alamat dan membaca informasi di blok ini.

Pada Gambar. 2 detail menunjukkan bacaan file / uji. File.

    Langkah 1-6 - Membaca Katalog Root:

  1. Dari kelompok blok 0, deskriptor tabel dibaca.
  2. Dari tabel deskriptor tabel, grup Blocks Group 0 diambil dan alamat grup inode dibaca darinya.
  3. Dari kelompok blok 0 membaca tabel inode.
  4. Nomor urutan inode dari direktori root diperbaiki dan sama dengan 2, sehingga elemen kedua dibaca dari grup inode 0, yang berisi alamat blok dengan konten direktori root. Misalkan unit ini terletak di blok A. blok.
  5. Dari kelompok blok A dibaca oleh blok yang berisi catatan direktori root.
  6. Catatan entri bernama "test.file" dicari. Jika catatan seperti itu ditemukan, file Inode Series "Test.file" diambil darinya.
  7. Dengan mendefinisikan nomor inode, Anda dapat mengakses blok informasi file (langkah 7-11):

  8. Nomor kelompok dihitung di mana inode ini berada, dan posisinya dalam tabel kelompok inode (misalkan nomor grup sama dengan B, dan posisi dalam tabel - x).
  9. Dari tabel deskriptor kelompok, hapus deskriptor grup porsi B, dan alamat tabel inode dari blok ini dibaca darinya.
  10. Tabel inode dibaca dari grup blok B.
  11. Dari tabel inode blok blok B membaca inode, terletak di posisi X.
  12. Dari inode baca, alamat blok dengan file konten /test.file diambil dan informasi dibaca dari blok dengan alamat yang ditentukan.

Implementasi perangkat lunak dari algoritma membaca file

Sumber data: Ada partisi hard disk tempat sistem file ext2 dibuat. Bagian ini cocok dengan file perangkat / dev / hda3. Di direktori root bagian, subdirektori rumah dibuat, dan berisi tes. FileFile dari konten berikut:

Akankah Cytrus tinggal di selatan?

Ya, tetapi contoh palsu!

1234567890-=

Jangan berpikir buruk, itu bukan omong kosong, tetapi latihan tes dari jalannya pelatihan telegrafi di pasukan komunikasi bekas USSR!

Perhatian! Satu poin penting harus diperhitungkan. File yang dibuat tidak akan segera direkam pada disk, dan pertama kali jatuh ke dalam buffer disk. Mencoba segera untuk mendapatkan konten file sesuai dengan algoritma di atas tidak akan mengarah pada apa pun, karena informasi tentang file ini tidak secara fisik pada disk. Perlu untuk "memaksa" sistem untuk merekam buffer disk pada disk. Cara termudah untuk melakukan ini adalah melakukan operasi reboot. Oleh karena itu, setelah file dibuat, restart sistem.

Tugas kami adalah menggunakan file perangkat / dev / hda3, untuk membaca file /home/test.file menggunakan metode akses langsung ke blok informasinya.

Pertimbangkan implementasi program modul yang melakukan operasi ini.

File header:

#Include.

#Include.

#Include.

#Include.

#Include.

#Include.

File header mendefinisikan tipe struktural yang menggambarkan komponen utama sistem file ext2 - superblock, deskriptor grup blok, node informasi, entri direktori.

Pertimbangkan bidang singkat yang termasuk dalam masing-masing struktur ini:

  1. Struktur Superblock Struct Ext2_Super_Block:
    • __U32 s_inodes_count.- Jumlah total inode dalam sistem file;
    • __U32 s_blocks_count.- jumlah total blok dalam sistem file;
    • __U32 s_free_blocks_count.- Jumlah blok gratis;
    • __U32 s_free_inodes_count.- Jumlah inode gratis;
    • __U32 s_first_data_block.- Jumlah blok data pertama (nomor blok di mana superblok berada);
    • __U32 S_LOG_BLOCK_SIZE. - Nilai ini digunakan untuk menghitung ukuran blok. Ukuran blok ditentukan oleh formula: ukuran blok \u003d 1024<< s_log_block_size;
    • __U32 s_blocks_per_group. - jumlah blok dalam grup;
    • __U32 s_inodes_per_group. - Jumlah inode dalam grup;
    • __U16 s_magic. - Pengidentifikasi sistem file ext2 (tanda tangan 0xef53);
    • __U16 s_inode_size. - ukuran node informasi (inode);
    • __U32 s_first_ino. - Jumlah inode non-disurvei pertama.
  2. Struct ext2_group_desc struktur desain deskripsi grup:
    • __U32 bg_block_bitmap.- Bitmap pekerjaan blok grup;
    • __U32 bg_inode_bitmap.- Bitting peta kelompok inode ketenagakerjaan;
    • __U32 bg_inode_table. - Alamat tabel inode.
  3. Struct ext2_inode struktur node informasi:
    • __U16 i_mode adalah jenis file dan hak akses untuk itu. Jenis file mendefinisikan bit 12-15 dari bidang ini:
      • 0xA000.- tautan simbolik;
      • 0x8000.- file normal;
      • 0x6000.- Perangkat blok blok;
      • 0x4000.- katalog;
      • 0x2000.- File perangkat simbolik;
      • 0x1000.- Saluran FIFO.
    • __U32 i_size. - Ukuran dalam byte;
    • __U32 i_ATime.- Waktu akses file terakhir;
    • __U32 i_ctime. - Waktu pembuatan file;
    • __U32 i_mtime.- waktu modifikasi terakhir;
    • __U32 i_blocks. - Jumlah blok yang ditempati oleh file;
    • __U32 i_block. - Alamat blok informasi (termasuk semua tautan tidak langsung).
  4. Nilai ext2_n_blocks didefinisikan dalam file:

    * Konstanta relatif terhadap blok data

    #Define ext2_ndir_blocks 12.

    #Define ext2_ind_block ext2_ndir_blocks.

    #define ext2_dind_block (ext2_ind_block + 1)

    #Define ext2_tind_block (ext2_dind_block + 1)

    #Define ext2_n_blocks (ext2_tind_block + 1)

  5. Struktur entri direktori struct ext2_dir_entry_2:
  6. #Define ext2_name_len 255.

  • __U32 Inode. - File nomor inode;
  • __U16 Rec_len. - Panjang perekaman direktori;
  • __U8 name_len.- Panjang nama file;
  • nama karakter.nama file.

Kami mendefinisikan nama bagian di mana sistem file dibuat, struktur global dan variabel.

#Define part_name "/ dev / hda3"

struct ext2_super_block sb;

/ * Buffer untuk menyimpan deskriptor tabel * /

char buff_grp yang tidak ditandatangani;

buff char unsigned; / * Buffer Informasi * /

int indev; / * Pegangan file perangkat * /

int blksize; / * Ukuran blok sistem file * /

Kami mendefinisikan beberapa fungsi yang perlu kita kerjakan:

Fungsi membaca superblok:

void read_sb ()

Memset (& SB, 0,1024);

Kami digeser oleh 1024 byte dari awal bagian dan membaca superblock ke struktur struct ext2_super_block SB:

If (LSEK (Indev, 1024.0)< 0) {

Perror ("lseek");

Keluar (-1);

Jika (baca (Indev, Char * & SB, SIZEOF (SB))< 0) {

Perror ("baca");

Keluar (-1);

Periksa pengidentifikasi sistem file:

If (sb.s_magic! \u003d Ext2_super_magic) (

Printf ("tipe sistem file yang tidak diketahui!");

Keluar (-1);

Nilai ext2_super_magic didefinisikan dalam file header.

Menampilkan informasi tentang sistem file, yang terletak di Superblock:

printF ("Info Superblock -----------");

Printf ("inods count -% u", sb.s_inodes_count);

Printf ("blok menghitung -% u", sb.s_blocks_count);

Printf ("blok ukuran -% u", 1024<< sb.s_log_block_size);

Printf ("inode pertama -% d", sb.s_first_ino);

PrintF ("Magic - 0x% x", sb.s_magic);

Printf ("ukuran inode -% d", sb.s_inode_size);

Printf ("inodes per grup -% u", sb.s_inodes_per_group);

PrintF ("Bloss per grup -% u", sb.s_blocks_per_group);

Printf ("blok data pertama -% u", sb.s_first_data_block);

Kembali;

Fungsi membaca meja deskriptor:

void read_gdt ()

Hitung ukuran blok sistem file:

Blksize \u003d 1024.<< sb.s_log_block_size

Tabel Deskriptor Group terletak di blok, yang terletak tepat di belakang blok data pertama (untuk superblock).

Baca tabel:

If (LSEK (Indev, (Sb.s_first_data_block + 1) * BLKSIZE, 0)< 0) {

Perror ("lseek");

Keluar (-1);

Jika (baca (indev, buff_grp, blksize)< 0) {

Perror ("baca");

Keluar (-1);

Kembali;

Fitur konten inode dengan nomornya:

void get_inode (int inode_num, struct ext2_inode * in)

Fitur input fungsi - angka urutan inode dan struktur struct ext2_inode.

Struct ext2_group_desc gd;

Grup U64, Indeks, POS;

Hitung jumlah grup blok di mana inode berada dengan nomor urut inode_num:

Grup \u003d (inode_num - 1) / sb.s_inodes_per_group;

Dari deskriptor tabel, hapus deskriptor grup dan salin ke struktur GD struct ext2_group_desc:

Memset ((Void *) & GD, 0, SIZEOF (GD));

MEMCPY ((Void *) & GD, Buff_GRP + (Group * (Sizeof (GD)), SIZEOF (GD));

Hitung posisi inode dengan nomor urutan inode_num di tabel inode grup grup dan baca inode ini dalam struktur struct ext2_inode:

index \u003d (inode_num - 1)% sb.s_inodes_per_group;

POS \u003d ((__U64) gd.bg_inode_table) * BLKSize + (index * sb.s_inode_size);

PreR64 (Indev, IN, SB.S_INODE_SIZE, POS);

Kembali;

Fungsi baca blok data:

void read_iblock (struct ext2_inode * di, int blk_num)

U64 POS;

Parameter fungsi input - struktur inode dan nomor blok (berarti angka dari urutan blok alamat yang terletak di Inode).

Hitung offset ke blok informasi pada bagian ini dan baca unit ini ke dalam buff buffer global:

POS \u003d ((__U64) di-\u003e i_block) * BLKSIZE;

Pread64 (Indev, Buff, Blksize, POS);

Kembali;

Fungsi untuk menerima isi direktori root:

void get_root_dentry ()

Struct ext2_inode di;

Nomor urutan inode dari direktori root diketahui, jadi kami mendapatkan isi inode direktori root dan membaca isinya di buffer:

get_inode (ext2_root_ino, & in);

Read_iblock (& \u200b\u200bin, 0);

Buffer buff akan berisi isi direktori root.

Kembali;

Fungsi menerima nomor inode dengan nama file:

int get_i_num (nama * name)

Parameter fungsi input - nama file. Nilai pengembalian - file inode nomor urutan.

Int i \u003d 0, rec_len \u003d 0;

Struct ext2_dir_entry_2 tok;

Dalam buffer buff, ada array entri direktori. Untuk menentukan urutan urutan file inode, Anda harus menemukan dalam array ini dengan nama file ini:

Untuk (; i< 700; i++) {

MEMCPY ((Void *) & Dent, (Buff + Rec_len), Sizeof (Dent));

Jika (! Memcsp (denmp (dendam, nama, dendam.name_len)) istirahat;

Rec_len + \u003d dent.rec_len;

Kembalikan denda;

Dan sekarang kami menuliskan fungsi utama:

int utama ()

Variabel dan struktur:

struct ext2_inode di;

// nama file perjalanan absolut

Char * full_path \u003d "/home/test.file";

Char buff1 yang tidak ditandatangani;

Statik int i \u003d 1;

Int n, i_num, outf, ketik;

Karakter pertama dalam nama jalur absolut file harus menjadi slash langsung (/). Periksa:

Jika (full_path! \u003d "/") (

Perror ("slash");

Keluar (-1);

Buka file perangkat, baca superblok dan deskriptor tabel:

Indev \u003d buka (part_name, o_rdonly);

Jika (Indev.< 0) {

Perror ("terbuka");

Keluar (-1);

Read_sb ();

Read_gdt ();

Kami mendapatkan konten katalog root:

get_root_dentry ();

Sekarang buffer buff berisi semua catatan direktori root (jika Anda mau, Anda dapat menyimpannya dalam file terpisah). Sekarang, memiliki catatan direktori root, kita bisa sampai ke konten pengujian. FileFile menggunakan algoritma baca file di atas. Untuk tujuan ini, kami mengatur siklus. Dalam tubuh siklus, kami akan menganalisis nama jalur absolut dari file tersebut, menyoroti elemen-elemennya - subdirektori (itu adalah satu, rumah) dan nama file pencarian (test.file). Untuk setiap elemen, kami mendefinisikan nomor urut inode, kami mempertimbangkan inode ini dan kemudian memperoleh konten dari blok nol (dari urutan blok alamat yang berlokasi di Inode):

sementara (1) (

Memset (Buff1.0, Sizeof (Buff1));

Untuk (n \u003d 0; n< EXT2_NAME_LEN; n++, i++) {

Buff1 [n] \u003d full_path [i];

Jika (((BUFF1 [N] \u003d\u003d "/") || (BUFF1 [N] \u003d\u003d "?")) (

I ++;

Istirahat;

buff1 [n] \u003d "?";

Untuk setiap elemen nama jalur absolut dari file, kami menentukan nomor urutan inode, baca inode ini dalam memori dan kemudian dapatkan isi dari blok nol:

I_num \u003d get_i_num (buff1);

Get_inode (i_num, & in);

Read_iblock (& \u200b\u200bin, 0);

Tampilkan informasi file (nama, nomor inode, ukuran file, dan tipenya):

Printf ("nomor inode -% u", i_num);

Printf ("nama file -% s", buff1);

Printf ("ukuran file -% u", in.i_size);

Jenis file ditentukan oleh empat bit lama dari struktur bidang i_mode ext2_inode:

ketik \u003d (((in.i_mode & 0xf000) \u003e\u003e 12);

Printf ("ketik -% d", ketik);

Beralih (ketik) (

Kasus (0x04):

Printf ("(katalog)");

Istirahat;

Kasus (0x08):

Printf ("(file normal)");

Istirahat;

Kasus (0x06):

Printf ("(blok unit)");

Istirahat;

Kasus (0x02):

Printf ("(perangkat simbolis)");

Istirahat;

Default:

Printf ("(tipe tidak dikenal)");

Istirahat;

Periksa jenis file. Jika ini adalah file biasa - interupsi siklus:

Jika (ketik & 0x08) (

Buffer buff akan dibaca informasi dari blok informasi dari file /home/test.file. Kami menulis informasi ini ke file:

Outf \u003d buka ("out", o_creat | o_rdwr, 0600);

Tulis (Outf, Buff, Sizeof (Buff));

Tutup (outf);

Istirahat;

Kami pergi:

Tutup (Indev);

Kembali 0;

Pada pertimbangan ini dari struktur logis dari sistem file ext2.

(Sistem File Diperpanjang Kedua).

· Kehutanan sistem file Linux

· Struktur partisi disk di ext2fs

·

· Katalog.

· File perangkat.

·

·

· Pustaka ext2fs.

· Bagian dari sistem ext2fs

· Perhitungan privasi

Matfak.

Prog.

Kursus 2 gram ke-5.

Chichirov Andrey.

Falomethem Ext2fs (sistem file diperpanjang kedua).

Kedaluwarsa Sistem File Linux

Variabel Linux adalah database berdasarkan pada sistem operasi Minix. Ini akan menjadi cakram yang dinominasikan antara dua sistem daripada memiliki sistem file baru, sehingga Linus Torvalds mengikuti ayat dalam sistem file Minix Linux. Sementara sistem file ini cukup efektif dengan jumlah kesalahan yang relatif kecil.

Namun, kilasan yang terkait dengan sistem file minix cukup tinggi, sehingga mereka mulai memikirkan sistem file baru untuk Linux.

Untuk mengontrol implementasi sistem file baru dalam racun Linux, sistem file virtual (VFS) telah digunakan. VF telah ditulis oleh Chris Provenzano, dan kemudian Linus Torvalds telah melewatinya dalam integrasi menjadi racun.

Setelah menginstal dalam racun VFS, sistem FAL System FAL baru (Sistem File Extended) telah mudah dan ditambahkan ke Linux 0.96C VEXA. Dalam sistem file baru, dua sistem minix substansial dihapus: volume maksimumnya bisa mencapai 2 gigabytes, dan nama file maksimum adalah 255 karakter. Itu adalah pencapaian dengan sistem file Minix, meskipun beberapa yang tampak jelas masih mengetik. Tidak ada akses subdependent, modifikasi dari indeks descippet dan memodifikasi sel-sel dari perubahan file. Sistem file ini menggunakan daftar terkait untuk dibuka dengan blok gratis dan indeks descpppings, yang sangat memengaruhi sistem sistem: dengan daftar daftar menjadi tidak ditentukan dan disusun, yang digunakan untuk mengajukan sistem file.

Keputusan probe ini adalah rilis dua sistem file baru pada Januari 1993: Xia dan Ext2FS (sistem file diperpanjang kedua). Sebagian besar, sistem file Xia didasarkan pada minix dengan penambahan beberapa fitur baru. Pada dasarnya itu adalah kemungkinan berlatih dengan nama file yang panjang, persetujuan disk dengan volume yang lebih besar dan ketegangan sel-sel perubahan file. Dengan batu-batu halus, Ext2FS didasarkan pada extf dengan banyak perbaikan dan penambahan. Dia juga memiliki kesempatan untuk masa depan.

Ketika dua sistem file ini dirilis, mereka secara fungsional pilinsi. Sistem XIA lebih dapat diandalkan daripada ext2fs, karena minimisasi. Kesalahan dalam sistem ext2fs tidak diaspal pada aplikasi mereka yang lebih hening, dan sejumlah besar fitur dan peningkatan baru telah ditambahkan. Sistem file ext2fs saat ini sangat andal dan telah menjadi sistem file Linux de facto.

Tabel berikut ini memberikan informasi umum tentang fungsi fitur fungsional yang disediakan dengan sistem file putus-putus.

Minix FS.

Ext fs.

Ext2 fs.

Xia fs.

Sistem file maksimum

Panjang file maksimum

Panjang nama file maksimum

Subbagian Menara Perubahan File Perubahan

Kemampuan untuk Pace

Berubah pazmp bloka.

Perlindungan infoment.

Jika Anda membutuhkan panjang nama file di Ext 2. Dapat ditingkatkan menjadi 1012.

Ext2fs akan menembus beberapa blok untuk pengguna root. Biasanya adalah 5% dari total, yang memungkinkan administrasi sistem untuk menghindari kekurangan ruang lingkup hard disk yang mengisinya dengan penggunaan pengguna pengguna DPUUUGI.

Struktur partisi disk di ext2fs

Produsen hard disk biasanya memasok produk mereka diformat pada tingkat rendah. Sejauh yang saya tahu, itu berarti bahwa semua ruang disk dengan bantuan label khusus rusak oleh "sektor", ukuran 512 byte. Disk (atau bagian disk) seperti itu harus disiapkan untuk digunakan dalam sistem operasi tertentu. Di MS-DOS atau Windows, prosedur persiapan disebut pemformatan, dan di Linux - membuat sistem file. Membuat Sistem File ext2fs. Ini untuk membuat bagian disk dari struktur logis tertentu. Struktur ini dibangun sebagai berikut. Pertama, area boot dialokasikan pada disk. Area boot dibuat dalam sistem file apa pun. Pada partisi utama, ini berisi entri boot - fragmen kode yang memulai proses memuat sistem operasi saat startup. Pada bagian lain, area ini tidak digunakan. Semua sisa ruang disk dibagi menjadi beberapa blok. Unit mungkin berukuran dari 1, 2 atau 4 kilobyte. Blok itu dapat dialamatkan oleh unit ruang disk. Pemilihan file lokasi dilakukan seluruh blok, jadi ketika memilih ukuran blok, Anda harus berkompromi. Ukuran besar dari blok, sebagai aturan, mengurangi jumlah banding ke disk saat membaca atau menulis file, tetapi meningkatkan proporsi ruang yang jarang digunakan, terutama jika ada sejumlah besar file kecil.

Blok, di daerahnya digabungkan menjadi kelompok-kelompok blok. Grup blok dalam sistem file dan blok di dalam grup diberi nomor secara berurutan, dimulai dengan 1. Blok pertama pada disk memiliki nomor 1 dan termasuk dalam grup dengan nomor 1. Total jumlah blok pada disk (dalam disk Bagian) adalah pembagi volume disk yang diungkapkan di sektor. Dan jumlah kelompok blok tidak diperlukan untuk membagi jumlah blok, karena kelompok blok terakhir mungkin tidak lengkap. Awal dari setiap blok blok memiliki alamat yang dapat diperoleh sebagai ((nomor grup - 1) * (jumlah blok dalam grup)).

Setiap kelompok blok memiliki struktur yang sama. Strukturnya disajikan dalam tablet berikut.

Struktur kelompok blok partisi disk di ext2fs.

Elemen pertama dari struktur ini (superblock) adalah sama untuk semua kelompok, dan yang lainnya adalah individu untuk setiap kelompok. Superblok disimpan di blok pertama masing-masing kelompok blok (dengan pengecualian grup 1, di mana catatan pemuatan berada di unit pertama). Superblock. Ini adalah titik awal dari sistem file. Ini memiliki ukuran 1024 byte dan selalu terletak di offset 1024 byte dari awal sistem file. Kehadiran beberapa salinan Superblock disebabkan oleh pentingnya ekstrem dari elemen sistem file ini. Duplikat SuperBlock digunakan saat memulihkan sistem file setelah kegagalan.

Informasi yang disimpan dalam Superblock digunakan untuk mengatur akses ke data lain pada disk. Superblock mendefinisikan ukuran sistem file, jumlah maksimum file di bagian, jumlah ruang kosong dan berisi informasi tentang tempat yang tidak dihuni. Ketika Anda memulai OS, superblok dibaca ke dalam memori dan semua perubahan dalam sistem file pertama-tama menemukan tampilan dalam salinan superblock yang terletak di OP, dan hanya direkam secara berkala. Ini memungkinkan Anda untuk meningkatkan kinerja sistem, karena banyak pengguna dan proses yang terus-menerus memperbarui file. Di sisi lain, ketika superblock dimatikan, itu harus ditulis ke disk, yang tidak memungkinkan Anda untuk mematikan komputer dengan hanya mematikan daya. Jika tidak, dengan beban berikutnya, informasi yang direkam dalam SuperBlock akan tidak cocok untuk keadaan sebenarnya dari sistem file.

Superblock memiliki struktur berikut

Nama bidang

Sebuah tipe

Komentar

s_inodes_count.

Jong.

Jumlah deskriptor indeks dalam sistem file

s_blocks_count.

Jong.

Jumlah blok dalam sistem file

s_r_blocks_count.

Jong.

Jumlah blok yang disediakan untuk Superuser

s_free_blocks_count.

Jong.

Jumlah blok gratis

s_free_inodes_count.

Jong.

Counter dari jumlah deskriptor indeks gratis

s_first_data_block.

Jong.

Blok pertama yang berisi data. Tergantung pada ukuran unit, bidang ini dapat sama dengan 0 atau 1.

s_log_block_size.

Jong.

Indikator ukuran blok logika: 0 \u003d 1 KB; 1 \u003d 2 kb; 2 \u003d 4 kb.

s_log_frag_size.

Panjang.

Indikator ukuran fragmen (tampaknya, konsep fragmen saat ini tidak digunakan)

s_blocks_per_group.

Jong.

Jumlah blok di setiap blok blok

s_frags_per_group.

Jong.

Jumlah fragmen di setiap blok blok

s_inodes_per_group.

Jong.

Jumlah deskriptor indeks (inodes) di setiap blok blok

s_mtime.

Jong.

Waktu ketika sistem file terakhir dipasang.

s_wtime.

Jong.

Waktu ketika terakhir kali direkam dalam sistem file

s_mnt_count.

Ushort.

Meter dari sistem file pemasangan. Jika penghitung ini mencapai nilai yang ditentukan dalam bidang berikutnya (s_max_mnt_count), sistem file harus diverifikasi (ini dilakukan saat dimulai ulang), dan penghitung diatur ulang.

s_max_mnt_count.

Pendek

Angka yang menentukan berapa kali sistem file dapat dipasang

s_magic.

Ushort.

"Nomor ajaib" (0xef53), menunjukkan bahwa sistem file milik tipe EX2FS

s_state.

Ushort.

Bendera yang menunjukkan status saat ini dari sistem file (apakah itu bersih (bersih), dll.)

s_Errors.

Ushort.

Bendera yang menentukan prosedur olahpesan kesalahan (apa yang harus dilakukan jika kesalahan ditemukan).

s_pad.

Ushort.

isi

s_lastcheck.

Jong.

Waktu pemeriksaan sistem file terakhir

s_checkInterval.

Jong.

Periode waktu maksimum antara pemeriksaan sistem file

s_creator_os.

Jong.

Menentukan pada jenis OS di mana sistem file dibuat

s_rev_level.

Jong.

Sistem file tingkat revisi.

s_rerved.

Jong.

Mengisi hingga 1024 byte

Mengikuti Superblock, deskripsi blok grup (deskriptor grup) berada. Deskripsi ini adalah array yang memiliki struktur berikut.

Nama bidang

Sebuah tipe

Tujuan

bg_block_bitmap.

Jong.

Alamat blok yang berisi blok kartu bit (bitmap blok) dari grup ini

bg_inode_bitmap.

Jong.

Alamat blok yang berisi bitmap deskriptor indeks (inode bitmap) dari grup ini

bg_inode_table.

Jong.

Alamat blok yang berisi tabel deskriptor indeks (tabel inode) dari grup ini

bg_free_blocks_count.

Ushort.

Counter dari jumlah blok gratis di grup ini

bg_free_inodes_count.

Ushort.

Jumlah deskriptor indeks gratis dalam grup ini

bg_used_dirs_count.

Ushort.

Jumlah deskriptor indeks dalam grup ini, yang merupakan katalog

bg_pad.

Ushort.

isi

bg_reserved.

Jong.

isi

Ukuran deskripsi blok dari blok dapat dihitung sebagai (size_group_blok_v_ext2 * Number_Groups) / size_block (Jika perlu, bulat).

Informasi yang disimpan dalam deskripsi grup digunakan untuk menemukan kartu bit blok dan deskriptor indeks, serta tabel deskriptor indeks. Jangan lupa bahwa blok dan blok blok diberi nomor dari 1.

Bit Map Block (Block Bitmap) adalah struktur, setiap bit yang menunjukkan apakah blok yang sesuai ditugaskan untuk itu. Jika bit 1, maka blok sibuk. Kartu ini berfungsi untuk mencari blok gratis dalam kasus di mana perlu untuk menyoroti lokasi di bawah file, bitmap blok menempati jumlah blok yang sama dengan (Number_Block_V_Group / 8) / size_block (Jika perlu, bulat).

Bitmap dari deskriptor indeks melakukan fungsi serupa sehubungan dengan tabel deskriptor indeks: menunjukkan deskriptor mana yang sibuk.

Area berikut dalam struktur struktur blok berfungsi untuk menyimpan tabel deskriptor file indeks. Struktur deskriptor indeks itu sendiri dipertimbangkan dalam ayat berikut.

Akhirnya, sisa tempat di grup blok dialokasikan untuk menyimpan file sebenarnya.

Berkas sistemExt. 2 ditandai dengan:

  • struktur hierarkis.
  • pengolahan array data yang disepakati,
  • ekstensi file dinamis,
  • keamanan informasi dalam file
  • interpretasi perangkat periferal (seperti terminal dan perangkat tape) sebagai file.

Tampilan internal file

Setiap file dalam sistem EXT 2 memiliki indeks yang unik. Indeks berisi informasi yang diperlukan untuk setiap proses untuk merujuk pada file. Proses mengacu pada file menggunakan serangkaian panggilan sistem yang didefinisikan dengan jelas dan mengidentifikasi file string file yang bertindak sebagai nama file komposit. Setiap nama komposit pasti menentukan file, sehingga kernel sistem mengkonversi nama ini ke indeks file. Indeks mencakup tabel lokasi alamat informasi file pada disk. Karena setiap blok pada disk ditangani ke nomornya, tabel ini menyimpan set nomor blok disk. Untuk meningkatkan fleksibilitas, kernel menempel pada file satu per satu blok, memungkinkan informasi file untuk tersebar di seluruh sistem file. Tetapi skema penempatan ini memperumit tugas pencarian data. Tabel alamat berisi daftar nomor blok yang berisi file yang dimiliki oleh file, namun, perhitungan sederhana menunjukkan bahwa daftar linear blok file dalam indeks sulit dikendalikan. Agar struktur indeks kecil berfungsi dengan file besar, tabel alamat blok disk dibawa ke dalam garis dengan struktur yang ditunjukkan pada Gambar 1

Sebagian besar file dalam sistem EXT 2 memiliki ukuran yang tidak melebihi 10 KB dan bahkan 1 KB! Karena file 10 KB terletak di blok pengalamatan langsung, hingga sebagian besar data yang disimpan dalam file, akses dapat dilakukan dalam satu banding ke disk. Oleh karena itu, berbeda dengan akses ke file besar, bekerja dengan file ukuran standar berlangsung dengan cepat.

Deskriptor file indeks

Setiap file pada disk sesuai dengan satu dan hanya satu pegangan file indeks yang diidentifikasi dengan nomor urutannya - indeks file. Ini berarti bahwa jumlah file yang dapat dibuat dalam sistem file dibatasi oleh jumlah deskriptor indeks, yang hanya didefinisikan saat membuat sistem file, atau dihitung berdasarkan volume fisik partisi disk. Descopers India ada pada disk dalam bentuk statis dan kernel membacanya dalam memori sebelum memulai dengan mereka untuk bekerja.

Pegangan file indeks memiliki struktur berikut:

Nama bidang

Sebuah tipe

Deskripsi

I_mode.

Ushort.

Ketikkan dan akses hak untuk file ini.

I_uid.

Ushort.

Pengidentifikasi Pemilik File (Pemilik UID).

I_size.

Jong.

Ukuran file dalam byte.

I_ATime.

Jong.

Waktu akses terakhir ke file (waktu akses).

I_ctime.

Jong.

Waktu pembuatan file.

I_mtime.

Jong.

Waktu modifikasi terakhir file.

I_dtime.

Jong.

Waktu penghapusan file.

I_gid.

Ushort.

Pengidentifikasi Kelompok (GID).

I_links_count.

Ushort.

Penghitung hubungan (jumlah tautan).

I_blocks.

Jong.

Jumlah blok yang ditempati oleh file.

I_flags.

Jong.

File bendera Bendera file)

I_rerved1.

Jong.

Dicadangkan untuk OS.

I_block.

Jong.

Pointer untuk memblokir di mana data file direkam (contoh pengalamatan langsung dan tidak langsung pada Gambar. 1)

I_version.

Jong.

Versi file (untuk NFS)

I_file_acl.

Jong.

File ACL.

I_dir_acl.

Jong.

Katalog ACL.

I_faddr.

Jong.

Alamat fragmen (alamat fragmen)

I_frag.

Uchar.

Nomor fragmen (nomor fragmen)

I_fsize.

Uchar.

Ukuran fragmen (ukuran fragmen)

I_pad1.

Ushort.

isi

I_Rerved2.

Jong.

Pendiam

Jenis bidang dan hak akses ke file adalah kata dua byte, masing-masing bit yang berfungsi sebagai bendera yang menunjukkan rasio file ke jenis tertentu atau pemasangan satu hak untuk file tertentu.

Pengidentifikasi

Nilai

Bendera Pengangkatan (bidang)

S_ifmt.

F000.

Tipe File Mask.

S_ifsock.

A000.

Sarang Domain (Soket)

S_iflnk.

C000.

S_ifreg.

8000

File normal (reguler)

S_ifblk.

6000

Perangkat berorientasi blok

S_ifdir.

4000

Katalog

S_ifchr.

2000

Perangkat berorientasi byte (simbolik)

S_IFIFO.

1000

Named Channel (FIFO)

S_ISUID.

0800

Suid - Bit Shift Pemilik

S_isgid.

0400

Sgid - bit shift grup

S_isvtx.

0200

Bit konservasi tugas (bit lengket)

S_irwxu.

01c0.

Masker hak pemilik file

S_irusr.

0100

Hak untuk membaca

S_iwusr.

0080

Hak untuk merekam

S_ixusr.

0040

Hak untuk dieksekusi

S_irwxg.

0038

Grup Masker Group.

S_irgrp.

0020

Hak untuk membaca

S_IWGRP.

0010

Hak untuk merekam

S_ixgrp.

0008

Hak untuk dieksekusi

S_irwxo.

0007

Topeng hak-hak pengguna lain

S_iroth.

0004

Hak untuk membaca

S_iwoth.

0002

Hak untuk merekam

S_ixoth

0001

Hak untuk dieksekusi

Di antara deskriptor indeks ada beberapa deskriptor yang disediakan untuk tujuan khusus dan memainkan peran khusus dalam sistem file. Ini adalah deskriptor berikut

Pengidentifikasi

Nilai

Deskripsi

Ext2_bad_ino.

Deskriptor indeks di mana alamat blok yang rusak pada disk tercantum (blok buruk inode)

Ext2_root_ino.

Deskripsi Indeks Direktori Root System File (Root Inode)

Ext2_acl_idx_ino.

ACL Inode.

Ext2_acl_data_ino.

ACL Inode.

Ext2_boot_loader_ino.

Deskriptor indeks loader (inode boot loader)

Ext2_undel_dir_ino.

Inode direktori undelete.

Ext2_first_ino.

Deskriptor non-pro-index pertama

Pegangan paling penting dalam daftar ini adalah deskriptor direktori root. Deskriptor ini menunjuk ke direktori root, yang, seperti semua direktori, terdiri dari catatan struktur berikut:

Nama bidang

Sebuah tipe

Deskripsi

Inode.

Jong.

fILE INDEX Descriptor Number (Index)

rec_len.

Ushort.

Panjang catatan ini

nAME_LEN.

Ushort.

Panjang nama file

Nama.

Arang.

Nama file

Entri terpisah dalam katalog tidak dapat melewati batas blok (yaitu, itu harus ditata sepenuhnya di dalam satu blok). Oleh karena itu, jika entri berikutnya tidak pas sepenuhnya di blok ini, itu ditransfer ke blok berikutnya, dan catatan sebelumnya berlanjut sedemikian rupa sehingga mengisi blok ke ujung.

Gambar 1 blok pengalamatan langsung dan tidak langsung dalam indeks

Gambar 2 volume file dalam byte di blok ukuran 1 kb

Gambar 3. Contoh indeks disk

Gambar 3 menunjukkan indeks disk dari file tertentu. Indeks ini termasuk dalam file yang biasa, pemiliknya "MJB" dan ukurannya adalah 6030 byte. Sistem ini memungkinkan pengguna "MJB" untuk membaca, menulis, dan menjalankan file; Anggota kelompok "OS" dan semua pengguna lain diizinkan hanya membaca atau menjalankan file, tetapi tidak mencatat data ke dalamnya. Terakhir kali file itu dibaca pada 23 Oktober 1984 pukul 13:45, catatan itu terakhir kali dibuat pada 22 Oktober 1984 pada pukul 10:30. Indeks berubah kali pada tanggal 23 Oktober 1984 pukul 13:30, meskipun tidak ada informasi yang dicatat saat ini. Kernel mengkodekan semua data di atas dalam indeks. Perhatikan perbedaan dalam catatan isi indeks dan isi file. Isi file berubah hanya ketika file direkam. Isi indeks berubah baik saat mengubah konten file dan ketika mengubah pemilik file, hak akses dan set pointer. Mengubah konten file secara otomatis menyebabkan koreksi indeks, tetapi koreksi indeks tidak berarti mengubah konten file.

Katalog.

Katalog adalah file dari mana struktur hierarkis sistem file sedang dibangun; Mereka memainkan peran penting dalam memutar nama file ke nomor indeks. Direktori adalah file yang berisi yang merupakan serangkaian catatan yang terdiri dari nomor indeks dan nama file yang termasuk dalam direktori. Nama komposit adalah serangkaian simbol, diselesaikan dengan simbol kosong dan garis cenderung dibagikan ("/") ke dalam beberapa komponen. Setiap komponen, selain yang terakhir, harus menjadi nama direktori, tetapi komponen terakhir dapat berupa file yang bukan direktori. Dalam versi V sistem UNIX, panjang masing-masing komponen dibatasi hingga 14 karakter; Dengan demikian, bersama dengan 2 byte, dialokasikan ke nomor indeks, ukuran perekaman direktori adalah 16 byte.

Mengimbangi byte
Di dalam katalog

Nomor indeks
(2 byte)

Namamengajukan

1798

init

1276

fsck.

cLRI

1268

mOTD.

1799

meningkat

mknod.

2114

passwd.

1717

umount.

1851

daftar periksa.

fsdbld.

cONFIG.

1432

getty.

jatuh.

mkfs.

Gambar 4 format katalog / dll

Gambar 4 menunjukkan format direktori "etc". Setiap direktori memiliki file, seperti nama-nama yang ditunjukkan titik dan dua titik ("." Dan "..") dan nomor indeks yang cocok dengan nomor indeks katalog ini dan katalog induk, masing-masing. Nomor indeks untuk file "." Direktori "/ etc" memiliki alamat dengan offset 0 dan nilai 83. Nomor indeks untuk file ".." memiliki alamat dengan offset 16 dari awal direktori dan nilai 2. Entri dalam direktori dapat kosong , dan nomor indeks adalah 0. Misalnya perekaman dengan alamat 224 di direktori "/ etc" kosong, terlepas dari kenyataan bahwa dulunya berisi titik masuk untuk file bernama "crash". Program MKFS menginisialisasi sistem file sedemikian rupa sehingga nomor indeks untuk file "." Dan ".." Direktori root bertepatan dengan nomor indeks root dari sistem file.

Kernel menyimpan data dalam direktori dengan cara yang sama seperti di file tipe normal menggunakan struktur indeks dan blok dengan tingkat pengalamatan langsung dan tidak langsung. Proses dapat membaca data dari direktori dengan cara yang sama seperti mereka membaca file biasa, tetapi hak entri eksklusif ke direktori disediakan oleh inti, yang memastikan kebenaran struktur direktori. Hak akses katalog memiliki makna berikut: Hak membaca memberi proses kesempatan untuk membaca data dari katalog; Recording Right memungkinkan proses untuk membuat entri baru dalam direktori atau menghapus operasi sistem yang lama (menggunakan creat, mknod, tautan dan tautan tautan), sebagai hasilnya isi perubahan katalog; Hak eksekusi memungkinkan proses pencarian di direktori dengan nama file (karena "mengeksekusi" katalog itu tidak ada artinya).

Ketika program apa pun menggunakan jalur ke file, nomo yang sesuai dari indeks Descip berisi dalam katalog. Setelah nama file digunakan dalam Nomor Indeks Descript, descippot ini ditempatkan dalam memori dan kemudian digunakan dalam zap berikutnya.

Konsep sistem file UNIX mencakup konsep referensi. Satu indeks descipeboard dapat dikaitkan dengan beberapa nama file. Deskpott dibantu oleh lapangan, seorang Hinner, yang dengannya file asosiasi. Menambahkan tautan adalah untuk membuat entri direktori, di mana nomor descippet indeks menunjukkan diskpot, dan peningkatan konter referensi di descoper. Anda harus menghapus tautan racun mengurangi penghitung referensi dan menghapus desqpot, jika meteran ini menjadi nol.

Tautan semacam itu disebut kaku dan hanya dapat digunakan dalam satu sistem file (Anda tidak dapat membuat tautan untuk sistem file dari sistem file flip). Selain itu, tautan kaku hanya dapat menentukan file (referensi ketat ke direktori dapat digunakan untuk fokus pada sistem file).

Di sebagian besar sistem UNIX, ada jenis tautan lain. Tautan-tautan yang hanya mempromosikan nama file yang disebut simbolis. Anda menggunakan tautan yang lebih buruk, saat menggunakan path ke file ke indeks descipeboard, racun menggantikan nama referensi ke perangkat lunak Descite (yaitu, dalam nama file tujuan) dan jalur ulang Internet jalur ke file. Karena tautan simbolis tidak menunjukkan indeks desqpot, dimungkinkan untuk membuat tautan ke file yang terletak di sistem file yang disinfinasi. Tautan ini dapat mengindikasikan file dari jenis apa pun, bahkan pada tidak ada. Tautan simbolik begitu digunakan, karena mereka tidak memiliki api yang memiliki tautan yang sulit. Namun, mereka menempati beberapa volume pada disk, di mana descipboard indeks dan blok data diperbolehkan. Penggunaannya dapat digunakan untuk cara-cara yang berhubungan dengan debit untuk menggunakan jalur ke file ke indeks descipboard, yang disebabkan oleh fakta bahwa simbolisasi tautan simbolis dari racun harus memasukkan kembali path ke file.

File perangkat.

Dalam sistem operasi seperti unix, akses ke perangkat dilakukan melalui file khusus. File ini tidak terjadi di sistem file. Ini hanya titik akses ke drive perangkat.

Ada dua jenis file perangkat: simbolis dan blok. Saat menggunakan tipe simbolik, dimungkinkan untuk bertukar data dengan perangkat hanya dalam mode karakter, sementara file perangkat tipe blok memungkinkan Anda untuk bertukar hanya blok menggunakan buffer. Saat meminta permintaan I / O ke file perangkat, kueri ini dialihkan ke driver perangkat yang sesuai. Setiap file serupa sesuai dengan nomor senior yang mendefinisikan jenis perangkat, dan kamar yang lebih muda yang menentukan perangkat itu sendiri.

Fitur tambahan ext2fs.

Selain Unix, fitur mandiri EXT2FS, ada beberapa fitur tambahan yang biasanya tidak kemudian dikirimkan oleh sistem file UNIX.

File atpibuts memungkinkan Anda untuk mengubah menekan kutub menggunakan file dengan file. Anda dapat menginstal pada file atau direktori. Dalam kasus kedua, file yang dibuat dalam direktori ini mewarisi asionik ini.

Dalam perjalanan montization sistem, beberapa fitur tertentu yang terkait dengan file atik dapat diinstal. Opsi mount memungkinkan administrasi untuk memilih fitur membuat file. Dalam sistem file dengan fitur BSD, file dibuat dengan GPPP pengidentifikasi yang sama, serta katalog apartemen. Fitur Sistem V agak lebih rumit. Jika katalog Bit SETGID diatur, file yang dibuat oleh pengidentifikasi GPP dari direktori ini diterima, dan subdirektori mewarisi pengidentifikasi GPPP dan bit setgid. Dalam kasus ini, file dan katalog dibuat dengan pengidentifikasi dasar GPPP dari PPCRess yang menyebabkan.

Sistem ext2fs dapat menggunakan modifikasi data sinkron yang mirip dengan sistem BSD. Opsi mount memungkinkan administrasi untuk menentukan semua data (indeks pernyataan, bit, blok tidak langsung, dan blok direktori) direkam pada DC secara sinkron dalam modifikasi mereka. Ini dapat digunakan untuk mencapai catatan informasi tinggi, tetapi juga mengalami kemunduran dalam imamat. Bahkan, fitur ini biasanya tidak digunakan, karena kerusakan proliferasi, ini dapat digunakan untuk keringat pengguna pengguna, yang tidak ditandai menggunakan sistem file.

Ext2fs memungkinkan Anda membuat sistem file untuk memilih blok logis. Ini bisa menjadi pazmer 1024, 2048 atau 4096 byte. Penggunaan blok volume besar untuk Optiating I / O (sebagai jumlah payah ke disk berkurang), dan, oleh karena itu, ke header kepala yang lebih kecil. Dengan sisi lain dari blok, penggunaan blok blok besar ke panggilan pensiun disk. Biasanya, blok terakhir file digunakan tidak sepenuhnya untuk bidang informasi, oleh karena itu, dengan peningkatan volume blok, volume teped disk punch meningkat.

Ext2fs memungkinkan Anda untuk menggunakan tautan simbolis oskized. Menggunakan tautan tersebut, blok blok data tidak digunakan. Nama file tujuan tidak ada di blok data, tetapi di Index Descipboard itu sendiri. Struktur semacam itu memungkinkan Anda untuk mempertahankan pukulan disk dan menguapkan Scotch of Symbolic Links. Tentu saja, ada perpipaan, descted di bawah descite, serpihan, jadi tidak setiap tautan dapat ditanggung sebagai HERSAL. Panjang maksimum nama file dalam tautan sekunder memiliki 60 karakter. Dalam waktu dekat, direncanakan untuk menjeda skema ini untuk file volume kecil.

Ext2fs mengikuti keadaan sistem file. Poor menggunakan bidang terpisah dalam suspensi untuk menunjukkan status sistem file. Jika sistem file dipasang di baca / tulis, keadaannya dipasang sebagai "tidak bersih". Jika dibongkar atau dipasang lagi dalam kenikmatan read-only, maka kondisinya dipasang di "bersih". Ketika sistem sistem dan sistem file sedang berlangsung, informasi ini digunakan untuk mengoperasikan kebutuhan akan sistem file. Miskin juga menempatkan beberapa kesalahan nakal di bidang ini. Membuka racun non-kepatuhan, sistem file ditandai sebagai "salah". Simulator sistem file akan menguji informasi ini untuk sistem sistem, bahkan jika kondisinya sebenarnya "bersih".

Menguji sistem file yang mengabaikan terkadang kadang-kadang mungkin dengan beberapa kecukupan, jadi ext2fs mencakup dua metode untuk sistem peraturan. Spearlock dipromosikan oleh penghitung pemasangan sistem. Penghitung ini meningkatkan setiap PA ketika sistem dipasang pada fitur baca / tulis. Jika nilainya mencapai maksimum (itu juga hudded dalam suspensi), maka pengujian sistem file dimulai dengan checkout, bahkan jika kondisinya "bersih". Yang terakhir, pertama kalinya dan maksimum cerdas antara yang pertama juga hudded dalam suspensi. Ketika kecerdasan maksimum dicapai antara warna pink, status sistem file diabaikan dan pos pemeriksaan dimulai.

Sistem ext2fs dibantu untuk saat ini. Bramma Tune2FS dapat digunakan untuk mengubah:

  • action Pri Error membongkar. Dibuka dengan racun non-kepatuhan, sistem file ditandai sebagai "salah" dan salah satu langkah berikut dapat dilakukan: implementasi eksekusi, pembaruan sistem file dalam kenikmatan hanya untuk menghindari rincian kopling, sistem paging sistem untuk sistem file.
  • nilai yang dipasang maksimum.
  • kecerdasan maksimum antara pin.
  • jumlah blok logis, didorong untuk pengguna root.

Opsi yang ditentukan oleh Mounted juga dapat digunakan untuk mengubah tindakan kewajiban racun kesalahan.

Menggunakan ATPiba memungkinkan pengguna untuk menghapus file berurutan. Anda dapat menghapus file serupa, di blok, yang digunakan untuk menggunakan file ini, direkam oleh info acak. Ini akan dipromosikan untuk mendapatkan akses ke lipatan pertama file ini dalam otoritas, dan bantu panggilan disk.

Sistem ext2fs baru-baru ini menambahkan jenis file baru yang diambil dari sistem file 4,4 BSD. File tipe menempatkan hanya dapat digunakan untuk membaca: Tidak ada yang harus mengubahnya atau menghapusnya. Ini dapat digunakan untuk melindungi file konfigurasi penting. Jenis file file, ini adalah file yang dapat diubah menjadi fungsi perekaman, dan data hanya dapat ditambahkan ke akhir file ini. Jenis file ini juga dapat dihapus atau permanen. Mereka dapat digunakan sebagai file zeper yang hanya dapat meningkatkan volume.

Optimalisasi Privity.

Sistem ext2fs difasilitasi oleh banyak fungsi yang mengoptimalkan profilnya, yang mengarah pada peningkatan ruang lingkup pertukaran informasi tentang membaca dan menulis file.

Ext2fs secara aktif menggunakan buffer disk. Ketika unit harus dibaca, racun menampilkan Op / Output Opsique I / O. Dengan demikian, upaya yang lebih buruk untuk memastikan bahwa blok berikutnya, yang harus dibaca, sudah bertanggung jawab atas buffer disk. Peluang seperti itu biasanya dilakukan menggunakan file membaca serial.

Sistem ext2fs juga menyediakan sejumlah besar optimasi informasi. Blok digunakan untuk menggabungkan descippet indeks dan blok data yang sesuai. Racun selalu mencoba memeras blok data satu file dalam satu GPUP, serta Desqpot-nya. Ini diterapkan untuk mengurangi proses header header dan deskripsi membaca dan blok data yang sesuai sesuai dengannya.

Catatan data ini dalam file, ext2fs akan memperkuat hingga 8 blok yang berdekatan menggunakan blok baru. Metode seperti itu memungkinkan untuk mencapai sifat tinggi dari kekuatan sistem sistem. Ini juga memungkinkan Anda untuk menggunakan blok yang berdekatan untuk file, yang sesuai dengan bacaan berikutnya.

Pustaka ext2fs.

Untuk memanfaatkan penggunaan hama ext2fs dan kontrol stroit kontak dari sistem file ini, perpustakaan LIBEXT2FS telah mudah. Perpustakaan ini menyediakan fungsi-fungsi yang dapat digunakan untuk mengoperasikan dan mengubah sistem file ext2 ini dengan merujuk pada penghapusan fisik.

Sebagian besar utilitas ext2fs (MKE2FS, E2FSCK, Tune2FS, Dumpe2FS, Debugfs, dan DP.) Gunakan pustaka ini. Ini sangat melengkapi modifikasi utilitas ini, karena setiap perubahan untuk memperkenalkan fitur tambahan pada sistem file ext2fs harus sendirian hanya di perpustakaan ext2fs.

Karena perpustakaan Internet EXT2FS cukup shiyky dan bantu, dapat dengan mudah ditulis dengan bantuannya, yang akan dengan mudah ditulis, untuk pekerjaan yang dapat digunakan sistem file. Terapkan, pustaka ext2fs digunakan oleh dump 4,4 BSD dan pemulihan beberapa utilitas. Itu terbunuh untuk membuat sedikit perubahan untuk mengadaptasi penggunaan ini ke Linux (perlu untuk mengganti beberapa fungsi yang berinteraksi dengan sistem file untuk memanggil ke perpustakaan ext2fs).

Perpustakaan Ext2FS mencakup akses ke operasi beberapa kelas. Kelas pubertas yang terkait dengan sistem file. Shampoam apa pun dapat membuka atau menggeser sistem file, membaca atau menulis bit block, membuat sistem file baru pada disk. Ada juga fungsi dari daftar blok sistem blok bad.

Kelas kedua buram akan menggunakan katalog. Propamma menggunakan pustaka ext2fs dapat membuat atau mengintai direktori, serta menambah atau menghapus catatan di direktori. Ada fungsi sebagai propelan pada jalur deskripsi indeks ke file dan jalur path ke file sesuai dengan descip yang ditentukan.

Kelas terakhir opak dibuka dengan index descemepts. Dimungkinkan untuk membaca tabel DescoPport, menghitung, atau menuliskan descpotp, PP melihat semua blok dari Desqpot yang ditentukan. Dimungkinkan untuk melanjutkan fungsi formasi dan pelepasan blok dan descopers.

Bagian dari sistem ext2fs

Untuk sistem ext2fs, penggunaan penggunaan komplementer yang kuat digunakan. Penggunaan ini digunakan untuk membuat, memodifikasi dan coppe setiap inkonsistensi dalam sistem file ext2fs. Program MKE2FS digunakan untuk menginstal tempel disk yang menyediakan sistem file ext2fs kosong.

Aplikasi Tune2FS dapat digunakan untuk daya sistem file papalmet .cc dapat diubah untuk diubah menjadi kesalahan yang muncul, jumlah maksimum pemasangan sistem, maksimum yang dimaksudkan antara kemajuan sistem dan jumlah blok logis yang didorong untuk pengguna root.

Mungkin penggunaan yang paling cerdas adalah sistem file yang disederhanakan. E2FSCK dihaknat untuk menyelesaikan inkonsistensi dalam sistem file setelah ketidakpuasan penerimaan seluruh sistem. Versi awal dari Propamma E2FSCK didasarkan pada file Linus Torvald FSCK untuk sistem file Minix. Namun, versi saat ini dari periode transmanent menggunakan pustaka ext2fs dan lebih cepat dan hanya dapat dieksekusi dalam jumlah kesalahan yang lebih besar di bidang penyelidikannya, sesuai dengan persiapan vexa penghentian.

Sayang E2FSCK dipelajari sedemikian rupa sehingga dilakukan dengan kecepatan maksimum. Karena tusukan sistem file dipanggil ke headband disk, Anda harus mengoptimalkan algoritma Flashing E2FSCK seperti itu, bahwa prosedur untuk sistem file harus digunakan lebih mudah. Dan, apalagi, pertimbangan indeks descpts dan direktori akan dilakukan sesuai dengan nomor blok untuk mengurangi kepala drive disk.

Dalam pemecahan E2FSCK, sistem file digerakkan oleh semua descipien indeks dan satu descipputs sebagai elemen terpisah dari sistem. Acara seperti itu, pengujian ini tidak sesuai dengan objek sistem file. Salah satu tujuan dari pin tersebut adalah input dari keberadaan jenis file, serta korespondensi dari semua blok di descpeppet dengan blok yang ada. Di switch, bit beroperasi yang menunjukkan penggunaan blok dan penanggulan.

Jika E2FSCK menemukan blok data, noms yang dikumpulkan dalam lebih dari satu deskripsi, maka perjalanan 1b 1b mulai menentukan inkonsistensi - baik dengan meningkatkan blok portabel atau penghapusan satu atau lebih.

Pepping terdekat memakan waktu yang paling banyak, karena semua descippet indeks harus dibaca ke dalam memori dan tidak dapat dipisahkan. Untuk mengurangi opeksi input / output pada badan selanjutnya, semua gerakan info yang diperlukan tetap ada di buffer. Pembacaan yang dapat dihapus dari skema ini adalah untuk mencari semua blok direktori sistem file. Untuk mendapatkan informasi ini, urutan semua direktori sistem file dibaca dalam perjalanan kedua.

Pada trim kedua, direktori mengetik sebagai elemen individu dari sistem file. Blok setiap direktori terpisah, tanpa referensi ke blok direktori dpuch. Ini memungkinkan E2FSCK untuk melepaskan semua blok direktori pada jumlah blok dan menghubunginya dalam waktu berjalan, waktu yang mengurangi akses ke disk. Blok katalog diuji untuk korespondensi realitas catatan mereka dan bahwa mereka berkontribusi pada referensi ke descput dengan jumlah yang ada (seperti yang dihidupkan dalam breaking).

Untuk blok direktori di setiap jadwal direktori, keberadaan entri akan ada. "." dan "..", dan bahwa nomor descppet adalah untuk merekam. " Sesuai dengan direktori saat ini. (Nomor penjadwalan untuk merekam ".." Tidak menguji sampai ternyata.)

Saat melakukan phipe kedua, gerakan info yang sesuai dengan katalog apartemen disimpan di buffer.

Perlu dicatat bahwa pada akhir pchoda kedua, hampir semua opeksi input / output dengan disk akan dibahas. Semua gerakan info, yang mencoba untuk ribuan perjalanan keempat dan kelima, dipromosikan dalam memori, bagaimanapun, yang tersisa dari PPPSSOP dan mengambil kurang dari 5-10% dari total eksekusi E2FSCK.

Koneksi katalog dimasukkan dalam perhiasan. E2FSCK melakukan jalur masing-masing direktori untuk minum tempat tidur, menggunakan informasi yang diperoleh dengan phoda kedua. Ini catatan ".." untuk setiap katalog. Semua katalog diidentifikasi setelah yang pertama dan tidak memiliki koneksi ditempatkan di direktori / hilang + ditemukan.

Pada tanggal keempat, perjalanan E2FSCK, penghitung referensi untuk setiap indeks turun berisi semua descover dan mencerminkan meter referensi (informasi ini disimpan dari cross-bor) dengan meter internal, yang dihitung dalam sub-detik dan trunks. Semua file yang gagal dengan nol referensi meter juga ditempatkan di direktori / hilang + ditemukan.

Dan akhirnya, di urutan kelima, E2FSCK adalah korespondensi dari semua informasi informasi tentang sistem file. Berikut adalah bit blok dan penanggulan, yang diperoleh pada potongan pertama-pertama, dengan nilai-nilai yang valid dan, jika perlu, informasi disk pada disk yang sesuai terjadi.

Gunakan penggunaan yang bermanfaat dari sistem file debugger. Debugfs adalah kesombongan kuat yang memungkinkan Anda menurunkan dan mengatur status sistem file. Pada dasarnya, ini adalah internet interaktif ke perpustakaan ext2fs, yaitu, perintah khas untuk memanggil fungsi perpustakaan.

Debugf dapat digunakan untuk mengoperasikan striktur sistem file internal, meninggalkan sistem pemulihan atau membuat tes kondisional untuk E2FSCK. Sayangnya, jammy ini dapat memenangkan sistem file jika Anda tidak tahu cara menggunakannya. Dengan kekuatan ini, cukup untuk menghancurkan sistem file. Oleh karena itu, Debugf mengubah sistem file dalam posisi read-only default. Untuk mengakses amplop baca / tulis, Anda harus menentukan opsi -W.

Perhitungan privasi

Hasil tes Bonnie terlihat dari tabel berikut:

Rekaman Gula (CB / s)

Entri patch (CB / s)

Kinerja (KB / s)

Membaca Gula (CB / s)

Potongan membaca (KB / s)

Bsd async.

Sinkronisasi BSD.

Ext2 fs.

1237

1033

Xia fs.

Hasilnya cukup akrab dengan input blok / output: sistem ext2fs menang pada sistem referensi. Hal ini disebabkan oleh optimasi yang termasuk dalam pendekatan PA. Entri ini juga cukup cepat, sesuai dengan fakta bahwa itu adalah Puppier di Mopiene Purem. Kecepatan membaca yang tinggi terkait dengan fakta bahwa blok ditarik ke dalam file, sehingga kepala judul tidak dilakukan antara dua bacaan dan optimasi dari bacaan pertama sepenuhnya akan sepenuhnya.

Dengan sisi lain sisi, sistem FreeBSD mencakup input / output simbolis dari nilai referensi di atas. Mungkin ini disebabkan oleh fakta bahwa FreeBSD dan Linux menggunakan yang sesuai dengan perpustakaan yang sesuai dengan pustaka C yang sesuai. Selain itu, di FreeBSD, perpustakaan membaca simbolis yang lebih optimal dan karena itu ada sedikit lebih baik di sini.

Hasil tes Andrew.

Hasil tes Andrew terlihat dari tabel berikut:

Paus 1 menciptakan

Plumbing 2 Menyalin

Plumbing 3 Status

Plumbing 4 Bapti.

Plumber 5 Kompilasi

2203

7391

6319

17466

75314

Sinkronisasi BSD.

2330

7732

6317

17499

75681

Ext2 fs.

Hasil dari dua lubang terakhir menunjukkan bahwa Linux akan memenangkan pertukaran data asinkon. Anda membuat direktori dan file, sistem BSD secara sinkron merekam descopers dan catatan direktori. Ada panggilan bahwa subdepending Asynchpone untuk FreeBSD belum sepenuhnya diimplementasikan.

Dalam penghargaan terhadap nilai Linux dan BSD sangat mirip. Sementara ketika BSD dijelaskan di atas, menambahkan bouque untuk nama file ke sistem VFS Linux diatur ke jenis ini.

Di PPOD ke-urutan kelima dan kelima, Linux akan cepat-cepat freebsd, terutama pada penggunaan penggunaan bouquet gabungan. Volume buffer dapat mengambil lebih banyak memori dan mengambil lebih banyak memori daripada di FreeBSD, di mana volume tetap digunakan. Hasil respons Ext2FS dan Xia FS menunjukkan bahwa optimalisasi yang ditemui di Ext2FS memang digunakan: pelaku sistem ini adalah sekitar 5-10%.

Kesimpulan

Sistem file ext2 adalah yang paling lama digunakan di pengguna Linux. Dia menyediakan fitur standar Unix dan fungsi tambahan. Selain itu, berkat optimasi yang termasuk dalam racun, itu menunjukkan hasil respons yang sangat baik.

Sistem ext2fs mencakup fungsi untuk menambahkan fitur baru. Beberapa orang mengurus penggunaan PAS untuk sistem file nyata: daftar kontrol akses, standar POSIX yang sesuai, memulihkan file jarak jauh dan mengompres file di tempat tinggal skala panjang.

Pertama, sistem ext2fs diintegrasikan ke dalam racun Linux, dan secara aktif bergerak pada pengoperasian sistem operasi. EXT2FS juga merupakan komponen penting dari sistem operasi Masix, yang saat ini sedang dipelajari oleh salah satu otop.