Mengapa file perangkat khusus memiliki inode?


11

File perangkat bukan file per se. Mereka adalah antarmuka I / O untuk menggunakan perangkat di sistem operasi mirip Unix. Mereka tidak menggunakan ruang pada disk, namun, mereka masih menggunakan inode seperti yang dilaporkan oleh statperintah:

$ stat /dev/sda
      File: /dev/sda
      Size: 0               Blocks: 0          IO Block: 4096   block special file
Device: 6h/6d   Inode: 14628       Links: 1     Device type: 8,0

Apakah file perangkat menggunakan inode fisik dalam sistem file dan mengapa mereka membutuhkannya?


2
Inode dan data adalah file. Tanpa inode, Anda tidak memiliki file. (File perangkat tidak memiliki data apa pun)
user253751

Jawaban:


16

Jawaban singkatnya adalah hanya jika Anda memiliki dukungan sistem file fisik /dev(dan jika Anda menggunakan distro Linux modern, Anda mungkin tidak).

Jawaban panjangnya adalah sebagai berikut:

Ini semua kembali ke filosofi UNIX asli bahwa semuanya adalah file. Filosofi ini adalah bagian dari apa yang membuat UNIX sangat fleksibel, karena Anda dapat langsung berinteraksi dengan perangkat dari userspace tanpa perlu memiliki kode khusus dalam aplikasi Anda untuk berbicara langsung dengan perangkat keras fisik.

Awalnya, /devhanyalah direktori lain dengan nama terkenal tempat Anda meletakkan file perangkat Anda. Beberapa sistem UNIX masih menggunakan pendekatan ini (saya percaya OpenBSD masih melakukannya), dan Anda biasanya dapat mengetahui apakah suatu sistem seperti ini karena akan memiliki banyak file perangkat untuk perangkat yang tidak dimiliki sistem tersebut (misalnya, file untuk setiap kemungkinan partisi pada setiap disk yang mungkin). Ini menghemat ruang dalam memori dan waktu saat boot dengan biaya menggunakan sedikit lebih banyak ruang disk, yang merupakan pertukaran yang baik untuk sistem awal karena mereka umumnya sangat terbatas memori dan tidak terlalu cepat. Ini umumnya disebut memiliki statis /dev.

Pada sistem Linux modern (dan saya percaya juga FreeBSD dan mungkin versi terbaru dari Solaris), /devadalah sistem file sementara dalam memori yang diisi oleh kernel (atau udev jika Anda menggunakan Systemd, karena mereka tidak percaya kernel melakukan hampir semua hal) . Ini menghemat ruang disk dengan harga beberapa memori (biasanya kurang dari beberapa MB) dan overhead pemrosesan yang sangat kecil. Ini juga memiliki sejumlah keunggulan lain, dengan salah satu yang terbesar adalah lebih mudah untuk mendeteksi perangkat keras yang terhubung. Ini umumnya disebut memiliki dinamika /dev.

Namun dalam kedua kasus, node perangkat diakses melalui layer VFS biasa, yang menurut definisi berarti mereka harus memiliki inode (bahkan jika itu virtual yang hanya ada sehingga hal-hal seperti stat()berfungsi seperti yang seharusnya. Dari perspektif praktis, ini memiliki dampak nol pada sistem yang menggunakan dinamis /devkarena mereka hanya menyimpan inode dalam memori atau menghasilkan mereka sesuai kebutuhan, dan mendekati nol dampak di mana /devstatis karena inode mengambil hampir nol ruang pada disk dan sebagian besar sistem file tidak memiliki batas atas mereka atau cara penyediaan lebih dari siapa pun mungkin perlu.


3
Dengan hati-hati mengangkat tangan. Saya telah mengerjakan proyek yang servernya kehabisan inode. Akhirnya krisis yang dibutuhkan tim kami untuk meyakinkan manajemen agar berinvestasi dalam mengganti sistem back-end, yang telah dirancang (buruk, seperti yang Anda bayangkan!) Sebelum ada di antara kita.
KRyan

@ KRyan Itu bisa terjadi, tetapi hari ini jarang terjadi kecuali admin secara eksplisit mengurangi jumlah pada pembuatan sistem file. Banyak filesystem modern (setidaknya NTFS, BTRFS, dan ZFS, saya pikir XFS mungkin juga) sebenarnya mengalokasikan inode secara dinamis, jadi pada banyak sistem yang lebih baru, sebenarnya tidak mungkin untuk kehabisan.
Austin Hemmelgarn

@Ryan Saya juga punya masalah itu. Dan itu sebenarnya adalah sistem yang dirancang dengan baik, jika sedikit berkencan dan dibawa ke extreams (setiap transaksi membutuhkan log independen, yang disimpan dalam disk, akhirnya hanya diisi dengan inode kecil kecil)
coteyr

1
Od dan buruh pelabuhan adalah jenis yang terkenal karena menyebabkan masalah inode ini.
coteyr

@AustinHemmelgarn Keluarga ext agak terkenal karena memiliki jumlah inode statis (dan kemudian kehabisan). Ini juga, kebetulan, sistem file Linux yang paling banyak digunakan dengan margin yang sangat besar (skenario yang menyimpan data dalam jumlah besar di XFS, dengan ZFS dan BTRFS yang relatif baru), dan default untuk sebagian besar distro. Tentu saja, dalam sistem modern, default max inode adalah banyak urutan besarnya lebih besar dari jumlah file perangkat yang pernah Anda miliki.
Bob

15

File perangkat juga memiliki izin, dan file tersebut disimpan dalam inode.


Poin luar biasa yang saya lupa sebutkan.
Austin Hemmelgarn

5
Bukan hanya izin, tetapi juga jenis file dan metadata lainnya. Secara klasik, direktori itu sendiri hanya berisi nama dan nomor inode - tidak ada yang menunjukkan bahwa file tersebut adalah perangkat sampai Anda membaca inode.
Gilles 'SANGAT berhenti menjadi jahat'

12

Direktori hanyalah pemetaan dari nama file ke inode, jadi segala sesuatu tentang hal yang dirujuk namanya (file, symlink, perangkat, FIFO, soket) harus ada di inode, tidak ada tempat lain untuk meletakkannya.

Informasi tentang perangkat disimpan dalam inode. Nomor perangkat utama dan kecil ada di sana, begitu juga izin, cap waktu, dll. Bidang jenis yang mengatakan bahwa itu adalah perangkat blok atau karakter daripada file biasa disimpan di sana.

Inode untuk perangkat tidak menggunakan bidang yang berisi peta blok file.


0

Tanpa inode, Anda hanya akan memiliki nama file untuk menyimpan semua informasi tentang perangkat yang dimaksud. Ini berarti nama perangkat "bagus" seperti /dev/sdatidak ada pertanyaan: Anda memerlukan nama yang dapat dikaitkan dengan driver tertentu /dev/ohci/sda.

Yang lebih penting lagi, semua alat yang bergantung pada inode (seperti stat, lsdan sebagainya) harus dimodifikasi untuk memperlakukan jalur /devdi bawah dengan cara khusus. Itu akan menjadi jumlah pekerjaan yang sangat besar tanpa manfaat nyata dibandingkan dengan keadaan saat ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.