我正在读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.