kexec:initrd가 메모리에 완전히 고정되어 있습니까, 아니면 여전히 스토리지에서 지원됩니까?

kexec:initrd가 메모리에 완전히 고정되어 있습니까, 아니면 여전히 스토리지에서 지원됩니까?

나는 eMMC에서 부팅되는 임베디드 시스템을 가지고 있으며 실용적인 이유로 PXE 부팅이나 이와 유사한 것에 의존하지 않고도 SSH를 통해 전체 eMMC를 플래시하는 쉬운 방법을 원합니다.

파티션에 새 커널과 전체 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(~500Mb)의 크기가 되기를 바랍니다. 로 표시된 것이 있나요 shared?

이 상태에서 eMMC에 직접 써도 안전한가요?

편집하다:

방금 메모리에 로드된 것이 gzip으로 압축된 CPIO이고 다음 코어에서 압축이 풀린다는 것을 깨달았습니다. 따라서 그 후에는 kexec모든 것이 분명히 메모리에 있으며 eMMC의 원본 파일은 더 이상 중요하지 않습니다.

지금 내 생각에는 이 휘발성 rootfs가 실제로 유틸리티가 tmpfs보고하는 대로 처리되는 것 같습니다.sharedfree

내가 맞나요?

관련 정보