启动后可以访问 initrd 文件系统吗?

启动后可以访问 initrd 文件系统吗?

许多 Linux 系统启动到 initrd/initramfs,然后挂载真正的根文件系统,chroot 到它,然后继续启动。从技术上讲,我的 initrd 仍处于挂载状态,但我该如何访问它呢?如果我修改我的 initrd 以将其自身绑定挂载到新的根目录中,那么我就可以看到它了。但是,不执行这些步骤是否可以访问它?是否有与 initrds 关联的特定设备文件可供我绑定挂载?

关于我为什么想要这个...

我有一个嵌入式系统,其中根文件系统是 tmpfs 的覆盖层,位于 squashfs 映像之上。我想在系统上工作,然后查看 tmpfs 以查看我对文件系统做了哪些更改。在正常操作下,如果我没有修改启动,一旦系统切换到覆盖根目录,tmpfs 和 squashfs 层的挂载就会被隐藏/丢失。

答案1

来自 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年前就玩过这个,不知道现在是否还有效。

相关内容