web-dev-qa-db-ja.com

ブート後にinitrdファイルシステムにアクセスすることは可能ですか?

多くのLinuxシステムはinitrd/initramfsでブートし、次に実際のルートファイルシステムをマウントし、そこにchrootして、ブートを続行します。私のinitrdはまだ技術的にマウントされていますが、どうすればそれを取得できますか? initrdを変更してマウント自体を新しいルートにバインドすると、表示されます。しかし、それらの手順を踏まずにアクセスすることは可能ですか? mountをバインドできるinitrdに関連付けられた特定のデバイスファイルはありますか?

なぜこれが欲しいのか...

ルートファイルシステムが、squashfsイメージの上にあるtmpfsのオーバーレイである組み込みシステムがあります。システムで作業したいので、tmpfsを見て、ファイルシステムの変更内容を確認します。ブートを変更しない通常の操作では、tmpfsおよびsquashfsレイヤーのマウントは、システムがオーバーレイルートに切り替わると非表示/失われます。

1
Harvey

linux/Documentation/initrd.txtの下のLinuxカーネルドキュメントから:

  noinitrd

    initrd data is preserved but it is not converted to a RAM disk and
    the "normal" root file system is mounted. initrd data can be read
    from /dev/initrd. Note that the data in initrd can have any structure
    in this case and doesn't necessarily have to be a file system image.
    This option is used mainly for debugging.

    Note: /dev/initrd is read-only and it can only be used once. As soon
    as the last process has closed it, all data is freed and /dev/initrd
    can't be opened anymore.

つまり、起動オプションでnoinitrdを指定すると、pivot_rootが「実際の」ルートに切り替わった後、/initrdマウントポイントで元のinitrdにアクセスできることになります。おそらく20年前にこれで遊んでみたが、まだうまくいくかどうかわからない。

1
jcomeau_ictx