如何确定我的内核是否使用 initramfs?

如何确定我的内核是否使用 initramfs?

我正在读Debian wiki 上的 LAN 唤醒有一部分说:

如果您的内核使用 initramfs 映像(例如 Debian 库存内核),还可以运行update-initramfs -u(或update-initramfs -u -k all如有必要)重建内核初始 ramdisk。

如何确定我的内核是否使用 initramfs?

我安装了 LMDE v2,64 位,Mate。

答案1

虽然简洁,但 mikeserv 本质上是正确的 - Linux 已经使用了initramfs很长时间,从 2.6 天开始。如果您使用 GRUB(假设您有默认的 LMDE 安装,那么您会使用 GRUB),然后签出/boot/grub/grub.cfg

$ grep initr /boot/grub/grub.cfg 
    initrd  /boot/initrd.img-3.13.0-53-generic
    initrd  /boot/initrd.img-3.13.0-53-generic
    initrd  /boot/initrd.img-3.13.0-52-generic
    initrd  /boot/initrd.img-3.13.0-52-generic
    initrd  /boot/initrd.img-3.13.0-24-generic
    initrd  /boot/initrd.img-3.13.0-24-generic

尽管名称是initrd,但它是一个initramfs存档,您可以通过initramfs作为 CPIO 存档来测试它:

$ file - < /boot/initrd.img-3.13.0-24-generic
/dev/stdin: gzip compressed data, from Unix, last modified: Tue Sep 30 20:07:43 2014
$ gunzip < /boot/initrd.img-3.13.0-24-generic | file -
/dev/stdin: ASCII cpio archive (SVR4 with no CRC)

(镜像的名称initramfs取决于发行版。例如,Arch Linux 简单地称之为initramfs-linux.img。)

答案2

几乎所有 Linux 桌面都至少在默认配置下使用 initramfs,包括 LMDE v2,并且 initramfs 功能是内核内置的。

一些操作系统(如 Slitaz)和许多嵌入式系统操作系统(如 OpenWRT)不使用 initramfs 映像,它们在启动过程中通过内核启动参数跳过 initramfs 映像noinitrd。您可以在引导加载程序(GRUB)菜单中检查它,或者在引导后运行

cat /proc/cmdline如果您看到一个noinitrd单词,那么它不使用 initramfs 映像。您几乎 100% 的机会看不到noinitrd单词。

答案3

如果在启动过程中使用了initramfs(或initrd就此而言),日志应该有一堆initrd相关条目。

我盒子里的例子Arch Linux

$ sudo dmesg -T | grep "initrd"
[Tue Feb 15 12:58:58 2022] Freeing initrd memory: 31360K

或者,使用journalctl

$ journalctl -b --no-hostname | grep "initrd"                                                                                                                                                                                                                                                                                                                          
Feb 15 12:58:22 kernel: Freeing initrd memory: 31360K
Feb 15 12:58:29 systemd[1]: initrd-parse-etc.service: Deactivated successfully.
Feb 15 12:58:29 systemd[1]: initrd-cleanup.service: Deactivated successfully.
Feb 15 12:58:29 systemd[1]: initrd-udevadm-cleanup-db.service: Deactivated successfully.
Feb 15 12:58:30 systemd[1]: initrd-switch-root.service: Deactivated successfully.
Feb 15 13:00:00 systemd[1]: Startup finished in 16.502s (firmware) + 5.955s (loader) + 751ms (kernel) + 7.451s (initrd) + 1min 30.238s (userspace) = 2min 900ms.

相关内容