Dalam hal ini, apa sebenarnya yang salah dengan sekelompok file statis /dev
? Tampaknya tidak cukup memuaskan bagi para pengembang untuk menemukan kembali roda ini dengan hitungan saya 3 kali sekarang ( devfs
-> udev + HAL
-> udev
), dan sekarang tampaknya ia juga masuk ke Program Grand Unified Init, jadi empat kali.
Saya ingat ketika saya pertama kali mulai menggunakan Linux tahun lalu terkejut bahwa meskipun mengklaim bahwa "semuanya adalah file", tidak ada /dev/eth0
(yang kemudian masuk akal, karena itu bukan perangkat char atau blok - meskipun tipe perangkat "paket" akan menarik ...). Karena itu, mengapa program yang menangani char dan memblokir bagan file perangkat juga bertanggung jawab untuk perangkat jaringan? Saya telah melihat referensi samar-samar untuk "fleksibilitas", tetapi apa ini menambahkan atas apa, katakanlah, ifconfig (8) yang dilakukan dengan hanya melihat /proc/net/dev
? Saya tahu, misalnya, NetworkManager tidak akan berada di Net atau OpenBSD dalam waktu dekat karena tergantung pada udev
, yang tidak ingin ditulis oleh tim mana pun; apa yang saya tidak/dev
yang sudah terpapar beberapa cara oleh kernel (dan tidak ada satu pun di dalamnya /dev
!).
Apakah itu hanya karena hotplugging? Apakah ada masalah dengan kernel hanya mendengarkan bus fisik dan memuat modul yang sesuai pada pesan "perangkat ditambahkan"? Atau, Tuhan melarang, administrator yang sebenarnya melakukannya? Saya ingat kembali pada awal 2000-an server saya kadang-kadang akan menginisialisasi kartu jaringan mereka dalam urutan yang tidak terduga, dan saya kira masuk akal untuk memiliki penamaan yang diputuskan di userland (meskipun itu tidak terlalu sulit untuk diperbaiki saat itu), tetapi ini seperti palu godam untuk seekor kecoa. (Atau mungkin masalah itu mengenai kasus penggunaan yang tidak saya pikirkan jauh lebih sulit daripada server atau PC rackmount, yang merupakan pengalaman saya.)
Jadi, jelaskan pertanyaan saya: masalah apa yang sebenarnya udev selesaikan, dan bagaimana devfs, HAL, dan / atau file lama yang polos gagal menyelesaikannya? Apakah ada alasan khusus untuk banyak hal yang berbeda (hotplugging, manajemen perangkat umum, manajemen perangkat jaringan, penamaan perangkat, prioritas driver, dll.) Untuk semuanya menjadi satu program?
/dev
tidak (dengan mudah atau mudah) mengatasi hal-hal seperti orang yang memasukkan adaptor jaringan USB atau adapter jaringan virtual yang ditambahkan atau diturunkan saat sistem sedang berjalan. Namun, tidak ada yang menghentikan Anda untuk mencopotudev
dan kembali ke/dev
rute direktori statis lama .Jawaban:
Dua hal lagi: pemindahan Linux ke perusahaan & server besar lainnya membuat statis
/dev
menjadi rusak. Kemajuan teknologi, baik di konsumen dan perusahaan, memperlihatkan statis / dev sebagai lelucon. [Jawaban ini mengisi lebih banyak dari latar belakang, terutama mengapa devf digantikan dengan udev].Kelelahan Ruang Bilangan Mayor & Minor
/dev
file diidentifikasi di dalam kernel dengan nomor utama dan kecil mereka. Kernel tidak pernah benar-benar peduli tentang nama (dan Anda bisa, misalnya,mv /dev/sda /dev/disk-1
dan itu akan terus bekerja — walaupun tentu saja program tidak akan tahu di mana menemukannya).Dengan statis
/dev
, Anda perlu mengalokasikan angka besar / kecil untuk setiap perangkat potensial yang bisa ada. Angka-angka ini harus unik secara global, karena mereka dikirim sebagai bagian dari distro, bukan dibuat atas permintaan. Masalahnya adalah masing-masing angka 8-bit — kisarannya adalah 0-255.Awalnya, misalnya, Linux dimulai dengan 8,0 menjadi sda, 8,1 menjadi sda1, 8,16 menjadi sdb, dll. Tetapi orang-orang terus menambahkan semakin banyak disk ke mesin, terutama ketika Anda mempertimbangkan hal-hal seperti saluran serat. Jadi pada beberapa titik, angka utama 65-71 ditambahkan untuk lebih banyak disk. Kemudian, bilangan utama 128–135. Namun orang-orang terus menginginkan lebih banyak disk ...
Dan format tabel partisi seperti GPT muncul, mendukung lebih banyak partisi per disk. Dan tentu saja perangkat lain memakan ruang angka: berbagai pengontrol RAID, manajemen volume logis, dll.
Hasil akhirnya dapat dilihat di Daftar Perangkat Linux LANANA . Jika Anda melihat daftar 2.6 (satu-satunya yang masih ada di sana), banyak blok nomor utama hingga 200 (maks: 255) —digunakan. Jelas, angkanya akan habis.
Mengubah ke angka yang lebih besar tidak mudah. Itu mengubah ABI kernel. Tergantung pada sistem file, itu mengubah tata letak pada disk. Tetapi, tentu saja, sebagian besar perangkat itu tidak ada pada satu sistem apa pun, bahkan perangkat yang (misalnya) kehabisan disk SCSI mungkin memiliki banyak hal gratis — mungkin tidak memerlukan hard disk IBM XT, sebagai contoh.
Dengan dinamis
/dev
, distro tidak harus mengirim nomor perangkat. Mereka tidak lagi harus unik secara global. Mereka bahkan tidak harus unik di sepatu bot.Nama perangkat tidak dapat diprediksi
Dulu sangat mudah untuk menetapkan nomor untuk semuanya. Papan memiliki dua saluran IDE; setiap saluran IDE mendukung satu master, dan satu slave. Anda dapat menetapkan dalam urutan saluran, dan urutan master-kemudian-budak. Jadi
hda
menjadi saluran pertama, master;hdb
saluran pertama, budak;hdc
saluran kedua, master; dll. Itu dapat diprediksi dan stabil. Mereka dapat berubah jika Anda menambahkan drive baru, atau menghapus satu, tetapi tidak ada perubahan perangkat keras, mereka statis.Anda bisa menempatkan
/dev/hda1
di Anda/etc/fstab
dan yakin itu akan tinggal kerja, setidaknya perubahan hardware absen.IDE bekerja seperti itu. Tidak ada setelah itu.
SATA tampaknya sederhana: satu port, satu disk. Tapi tidak demikian; memungkinkan pengganda port. Dan itu memungkinkan hot-swap. Namun, jika tidak ada perubahan perangkat keras, Anda sebenarnya masih dapat tetap membuat pemetaan berfungsi.
USB jauh lebih buruk. Tidak hanya itu memungkinkan hot swap, itu khas. Orang-orang mencolokkan USB flash drive setiap saat. Selanjutnya, perangkat dapat memerlukan waktu beberapa saat untuk menyelidiki — dan benar-benar dapat berubah kapan pun mereka mau (mis., Ketika menghidupkan atau mematikan mode penyimpanan USB pada ponsel Anda). Firewire serupa. Dengan tidak bisa Anda benar-benar datang dengan pemetaan yang stabil.
Disk yang terhubung jaringan tidak memiliki urutan port apa pun yang melekat. Satu-satunya urutan penggunaan kernel adalah urutan mereka muncul. Sama dengan volume logis.
Pencarian kecepatan boot juga membuat segalanya lebih buruk. Awalnya, kernel akan dengan senang hati duduk dan menunggu cukup lama, misalnya, semua perangkat USB diinisialisasi. Untuk sepenuhnya menyelidiki semua bus SCSI, dll. Probe tersebut dibuat menjadi tugas latar belakang; boot tidak lagi menunggu mereka. Perangkat ditambahkan sebagai probe selesai.
Jadi kernel dibiarkan dengan, lebih atau kurang, "urutan apa pun yang mereka tampilkan". Ini berarti bahwa banyak jenis perangkat dapat dan memang mengubah urutan setiap boot — apa yang ada pada satu boot
/dev/sdb
adalah pada boot lain/dev/sdc
. Ini membuat gagasan/dev
lelucon statis .Ringkasan
Ketika Anda mengambil kombinasi statis
/dev
menjadi semakin tidak berarti karena pesanan penyelidikan perangkat yang tidak dapat diprediksi, dan terus mengalokasikan nomor statis utama / minor yang menyebabkan pekerjaan substansial tidak habis, menjadi jelas mengapa pengembang Linux memilih untuk beralih ke dinamis/dev
.sumber
lsusb -vv
mencari di mana printer saya disembunyikan dari boot ke boot. Saya harus mencari bit seperti ini: "Bus 001 Device 003: ID 04f9: 0217"Pertanyaan bagus.
Di satu sisi, argumen ini dapat berbalik: karena kernel 2.6.13 memperkenalkan versi baru
uevent
, pasti akan terjadi yangdevfs
perlu ditulis ulang untuk memanfaatkan fitur baru antarmuka. Jadi, bisa dibilang, pertanyaannya adalah mengapa perubahan kernel.Namun, dengan mempertimbangkannya, pertanyaan Anda dijawab dalam artikel Wikipedia ini :
Saya mungkin harus menambahkan bahwa dengan udev kemungkinan
race condition
, yang pada dasarnya merusak penamaan perangkat di devfs dan hotplug, dihindari. Dengan kata lain: dengan devfs tidak ada cara untuk memastikan bahwa port ethernet paling kiri Anda akan dipanggileth0
dan yang paling kananeth1
, membuat (sebagai contoh murni) pengaturan router (satu port ke WAN, satu port ke LAN) sulit untuk melaksanakan.Adopsi skema penamaan disk berdasarkan GUID adalah nilai tambah lainnya, dan memindahkan seluruh proses ke ruang pengguna yang lebih besar: sudahkah Anda mencari di situs ini untuk melihat berapa banyak orang yang menulis aturan udev mereka sendiri?
Sebagai contoh sederhana dari keuntungan yang melekat dalam memiliki udev di userspace, periksa pertanyaan ini atau pertanyaan lain ini , keduanya di situs ini.
sumber