kexec:initrd 是完全固定在内存中还是仍然由存储支持?

kexec:initrd 是完全固定在内存中还是仍然由存储支持?

我有一个在 eMMC 上启动的嵌入式系统,出于实际原因,我希望有一种简单的方法可以通过 ssh 刷新整个 eMMC,而不必依赖 PXE 启动或类似的东西。

我可以轻松地在分区上删除一个新内核和一个包含整个 rootfs 的新 initrd CPIO /,然后执行以下操作:

kexec -l /home/root/bzImage --initrd=/home/root/initrd.cpio.gz
systemctl kexec

它按预期工作,我在之后断开了 SSH 连接,systemctl kexec并可以在几秒钟后登录到新的“实时”系统。

我看到mount输出:

rootfs on / type rootfs (rw,size=3913004k,nr_inodes=978251,inode64)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=4096k,nr_inodes=131072,mode=755,inode64)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,inode64)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,size=1595352k,nr_inodes=819200,mode=755,inode64)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k,inode64)
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot)
efivarfs on /sys/firmware/efi/efivars type efivarfs (rw,nosuid,nodev,noexec,relatime)
bpf on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=29,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,nosuid,nodev,noexec,relatime)
none on /run/credentials/systemd-sysusers.service type ramfs (ro,nosuid,nodev,noexec,relatime,mode=700)

所以看起来一切都在 RAM 中,我现在可以安全地执行诸如dd if=stuff.img of=/dev/mmcblk0更改和格式化新分区等操作。

然而,当查看free -m输出时,我看到:

               total        used        free      shared  buff/cache   available
Mem:            7789          89        7217         473         483        7158
Swap:              0           0           0

我对这个值感到困惑used,我希望它至少是我的完整未压缩实时 rootfs 的大小(~ 500 Mb)。它是标记为的东西吗shared

在这种状态下直接在我的 eMMC 上写入是否安全?

编辑:

我刚刚意识到加载到内存中的是 gzipped CPIO,然后由下一个内核解压缩。所以,之后kexec,一切显然都在内存中,eMMC 上的原始文件不再重要了。

我现在的猜测是,这个易失性 rootfs 实际上被视为,实用程序tmpfs报告为。sharedfree

我对么?

相关内容