web-dev-qa-db-ja.com

一部のLinuxシステムで、ルートファイルシステムがmtabで/ dev / <実際のデバイスノード>ではなく/ dev / rootとして表示されるのはなぜですか?

実際のデバイスノード(例:/dev/sda1)ではなく、ルートデバイスが/dev/rootとして、または実際のファイルシステムではなくmtabとして表示されるさまざまなLinuxシステムで見ました。は、それがrootfsというファイルシステムであると言います(/proc/filesystemsでは実際のファイルシステムとして表示されますが、<linux-kernel-source-tree>/fsにはコードがありません)。特定の属性を使用して実際のルートデバイスノード(rdev、Chromium OS rootdevなど)を決定するために、さまざまなユーティリティが作成されています。非常に小さな組み込みデバイスがルートデバイス用の/devデバイスノードを必ずしも持つ必要がないことをどこかで読む以外、これに対する論理的な説明は見つかりません。 (これは本当ですか、もしそうなら、それが私の質問への答えですか?)mtabが本当の代わりに/dev/rootと言うことがあるのはなぜですか(そして、私はそれがrootdevと一度だけ見たかもしれないと思います)デバイスノード、そしてどうすれば常に実際のデバイスノードと言わせることができますか?カーネルは、最初にcmdlineのrootパラメーターに従ってルートデバイスをマウントし、次にinit/systemdfstabに従ってルートデバイスを再マウントします。よろしいですか? もしそうなら、私はinitmtabを維持していると思います。私の理論が正しい場合、initに実際のルートデバイスノードをmtabに書き込む方法を教えてください。/etc/mtabは実際には/proc/mountsへのシンボリックリンクであることに気づきました。これは、mtabがカーネルによって維持されていることを意味します。では、ルートデバイスのノードパスが/dev/rootではなく、mtabに実際のデバイスノードを含めるように指示する代わりに、カーネルを構成/パッチするにはどうすればよいですか?

11
Billy

これは通常、initramfsを使用した場合のアーティファクトです。

カーネルのドキュメントから( https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt

Rootfsとは何ですか?

Rootfsはramfs(または、有効になっている場合はtmpfs)の特別なインスタンスであり、2.6システムには常に存在します。 initプロセスを終了できないのとほぼ同じ理由で、rootfsをアンマウントすることはできません。空のリストをチェックして処理する特別なコードを用意するのではなく、特定のリストが空にならないようにするだけの方がカーネルにとっては小さくて簡単です。

ほとんどのシステムは、rootfsを介して別のファイルシステムをマウントし、それを無視します。 ramfsの空のインスタンスが占めるスペースの量はごくわずかです。

したがって、rootfsはinitramfs用に作成されたルートファイルシステムであり、アンマウントできません。

に関してで /dev/root、私はこれについてあまり確信がありませんが、正しく思い出せば/dev/rootは、initrdを使用すると作成されます(initramfsとは異なります)。

4
Patrick

Gentooにはこれを正確に行うパッチがあります(実際のルートデバイスが表示されることを保証します)。あなたはそれをここで見つけることができます: https://lkml.org/lkml/2013/1/31/574

3
Milos Ivanovic

Linuxでは、_/dev/root_(存在する場合)は、ブート時に作成された実際のデバイスへのシンボリックリンクです。

_readlink /dev/root_または_cat /proc/cmdline_を使用して、ブートしたカーネルのrootパラメータを確認し、その背後にある実際のデバイスを見つけます。

男からdracut(8)

ただし、正常な起動を続行するための目的は、ルートボリュームを見つけて、ファイルシステムを指すシンボリックリンク/ dev/rootを作成することです。

2
Rui F Ribeiro