さらに2つのこと:Linuxがエンタープライズおよびその他の大規模サーバーに移行したことで、静的なデータ/dev
が破壊される可能性がありました。消費者と企業の両方で進歩している技術は、静的な/ devを冗談として公開していました。[この回答は、特にdevfsがudevに置き換えられた理由ではなく、より多くのバックストーリーを埋めます]。
メジャーおよびマイナー番号スペースの枯渇
/dev
ファイルはカーネル内でメジャー番号とマイナー番号で識別されます。カーネルは名前を実際に気にかけたことはありません(そして、たとえば、あなたはmv /dev/sda /dev/disk-1
それが動作し続けることができます-もちろん、プログラムはそれを見つける場所を知りません)。
static /dev
を使用すると、存在する可能性のあるすべてのデバイスにメジャー/マイナー番号を割り当てる必要があります。これらの番号は、オンデマンドで作成されるのではなく、ディストリビューションの一部として出荷されるため、グローバルに一意である必要があります。問題は、それらがそれぞれ8ビットの数値であるということです。範囲は0〜255です。
もともと、たとえば、Linuxは8,0がsda、8,1がsda1、8,16がsdbなどで始まりました。しかし、特にファイバーチャネルのようなものを考えると、人々はマシンにますます多くのディスクを追加し続けました。そのため、ある時点で、より多くのディスクにメジャー番号65〜71が追加されました。その後、メジャー番号128〜135。それでも、人々はもっとディスクを欲しがっていました...
また、GPTなどのパーティションテーブル形式が登場し、ディスクあたりのパーティション数が増えました。そしてもちろん、他のデバイスが番号空間を食い尽くしていました:さまざまなRAIDコントローラー、論理ボリューム管理など。
最終結果は、LANANA Linux Device Listで確認できます。2.6リスト(まだ1つだけ)を見ると、ブロックメジャー番号の200(最大:255)までが多く使用されています。明らかに、数字はなくなっていただろう。
大きな数字に変更するのは簡単ではありませんでした。カーネルABIを変更します。ファイルシステムに応じて、ディスク上のレイアウトが変更されます。しかし、もちろん、これらのデバイスのほとんどはどのシステムにも存在しませんでした。たとえば、SCSIディスクを使い果たしたシステムでも、おそらく十分な空き容量がありました。おそらく、IBM XTハードディスクは必要ありません。例えば。
dynamicを使用する/dev
と、ディストリビューションはデバイス番号を出荷する必要がありません。それらはもはやグローバルに一意である必要はありません。それらはブーツ全体で一意である必要さえありません。
デバイス名は予測不能でした
以前は、すべてに番号を割り当てるのは本当に簡単でした。ボードには2つのIDEチャネルがありました。各IDEチャネルは、1つのマスターと1つのスレーブをサポートしていました。チャネル順、およびマスター、スレーブ順で割り当てることができます。だから、hda
最初のチャンネル、マスターになり、hdb
最初のチャネル、スレーブ。hdc
2番目のチャネル、マスター。など。それらは予測可能で安定していました。新しいドライブを追加したり、削除したりしても、ハードウェアの変更がなければ静的なものになります。
少なくともハードウェアの変更がなければ/dev/hda1
、あなたはそれを入れて、/etc/fstab
動作し続けると確信できます。
IDEはそのように機能しました。その後は何もしません。
SATAは単純なように見えます:1つのポート、1つのディスク。しかし、そうではありません。ポートの乗数を許可します。また、ホットスワップが可能です。それでも、ハードウェアの変更がなくても、実際にマッピングを機能させ続けることができます。
USBはさらに悪い。ホットスワップを許可するだけでなく、一般的です。人々は常にUSBフラッシュドライブを接続します。さらに、デバイスはプローブに時間がかかる可能性があります。また、実際に変更したい場合(たとえば、電話機のUSBストレージモードをオンまたはオフにした場合)に変更できます。Firewireも同様です。どちらを使用しても、安定したマッピングを実際に思いつくことはできません。
ネットワーク接続ディスクには、固有のポート順序はありません。カーネルが使用する唯一の順序は、それらが現れた順序です。論理ボリュームと同じです。
起動速度の探求も事態を悪化させました。もともと、カーネルは喜んで座って、たとえばすべてのUSBデバイスが初期化されるまでかなり長い時間待機していました。すべてのSCSIバスなどを完全にプローブするため。これらのプローブはバックグラウンドタスクになりました。ブートはそれらを待機しなくなりました。プローブが完了すると、デバイスが追加されます。
そのため、カーネルには、多少なりとも「それらが現れる順序」が残されていました。1つのブート上にあったすべてのブート何このデバイスには多くの種類ができることを意味していた変更命令は、/dev/sdb
別のブートにありました/dev/sdc
。これにより、静的なアイデアが/dev
冗談になります。
概要
/dev
予測できないデバイスプローブの順序によって静的がますます意味を失い、静的なメジャー/マイナー番号を割り当て続けると、実質的な作業が不足しないようになると、Linuxの開発者が動的に切り替えることを選んだ理由が明らかになり/dev
ます。
/dev
、システムの実行中に追加または削除されるUSBネットワークアダプターや仮想ネットワークアダプターに接続する人のようなものに(簡単にまたは便利に)対処しません。ただし、アンインストールudev
や古い単純な静的/dev
ディレクトリルートに戻ることを妨げるものはありません。