カーネルはファイルシステムを見つける場所をどのように知っていますか?

カーネルはファイルシステムを見つける場所をどのように知っていますか?

私はLinux、特に組み込みLinuxに初めて触れました。

私は、ルートファイルシステムタイプが圧縮された読み取り専用ファイルシステムタイプのSquashFSである組み込みデバイスで開発されたプロジェクトを進めています。

カーネルが起動するとき、特に通常のEXT4タイプではなくSquashFSタイプの場合、ルートファイルシステムを見つけてマウントする方法をどのように知ることができますか?よろしくお願いします。

答え1

これを行う方法は2つあります。

  • ルートデバイス名を引数()としてカーネルに渡すと、rootカーネルはストレージデバイスを見つけて起動するためのファイルシステムを識別してマウントするために必要なすべてのモジュールを組み込む必要がありますinit。カーネルにどのファイルシステムを使用するように指示できますが、rootfstypeそれが必須かどうかはわかりません。

  • 今日のほとんどのシステムで使用されているのinitramfsは、カーネルに貼り付けるか、ブートローダによって参照される小さなファイルシステムイメージで、プロセスルートに制御を渡す前に準備(必要な場合)してユーザーモードでマウントするために使用されます。ファイルシステムinit。操作が実行された後の実際のルートファイルシステムswitch_root

答え2

概念があるマジックナンバーこれを参考にしてください。

次に定義されるマジックナンバーのリスト魔法.hヘッドファイル

たとえば、ディスクを確認する場合:

sudo file -Ls /dev/mapper/vg-home               
/dev/mapper/vg-home: Linux rev 1.0 ext4 filesystem data, UUID=fd8eb0e8-073d-4ae3-810a-87e8af0981d7 (needs journal recovery) (extents) (64bit) (large files) (huge files)

このfileコマンドは、マジックナンバーに基づいてタイプを照合します。 hexdumpツールを使用して、次の値を表示できます。

sudo hexdump /dev/mapper/vg-home -C  | grep "53 ef"
00000430  1b da d0 5e 49 00 ff ff  53 ef 01 00 01 00 00 00

ここ0x53efext4 ファイルシステムのマジックナンバーです。

squashfsマジックナンバー0x73717368)

sudo hexdump /dev/somedisk -C  | head -n 1    
0000000  73 71 73 68 00 00 14 7e  01 ea 27 0d 00 01 00 00 |sqsh...~..'.....|

関連情報