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


11

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

回答:


4

これは通常、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とは異なります)。


mountこのセットアップでrootfs on / type rootfs (rw)、initrdと/dev/root on / type ext2 (rw,relatime,block_validity,barrier,user_xattr)ext2ハードディスクが提供されます
Ciro Santilli冠状病毒审查六四事件法轮功

/dev/rootinitramfsの一部の実装で使用されていますが、他の実装では使用されていません。これらの場合、カーネルが原因ではありません。initramfsを使用しない場合、カーネルが使用するプレースホルダー値のようです。(多分それ以降のカーネルバージョンでは削除されるかもしれません)。 stackoverflow.com/questions/37310046/…–
sourcejedi


2

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

readlink /dev/rootまたはcat /proc/cmdlineを使用してroot、起動したカーネルのパラメータを確認し、その背後にある実際のデバイスを見つけます。

男から dracut(8)

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


/dev/rootRedHatベースのディストリビューションのアーティファクトであるかどうかは、完全にはわかりません 。
Rui F Ribeiro

まあ、私のDebian 8にはありません/dev/root/。古いCentOSでは、シンボリックリンクではなく実際のデバイスノードのようです。
ilkkachu

1
さて、OpenEmbeddedのbase-filesレシピのfstab言及は/dev/root、それを使用しているRed Hatに由来するディストリビューションだけではありません。
ACK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.