Kexec를 새 커널에 추가했지만 initramfs 프롬프트에 액세스할 수 없습니다!

Kexec를 새 커널에 추가했지만 initramfs 프롬프트에 액세스할 수 없습니다!

kexec를 사용하여 커널을 성공적으로 로드했지만 dmesg 줄만 인쇄됩니다. 이 문제를 어떻게 제거하고 initramfs 프롬프트로 들어가나요? Ctrl-Alt-F2는 검은색 화면만 로드하고 Ctrl-C는 아무 작업도 수행하지 않습니다.

이것은 내 kexec 명령줄입니다.

kexec -l $kernel --initrd=$initrd --command-line="root=UUID=... acpi=off ro text earlyshell debug showerr debuginitrd"

Earlyshell은 쉘에 대한 액세스를 제공해야 하지만 그렇지 않습니다. 해당 명령줄이 없으면 스크립트 루프에 갇혀 Ctrl-C를 눌러도 빠져나올 수 없습니다.

답변1

해결됨:

커널 매개변수:

earlyshell

실제로 쉘이 시작되지 않습니까? ? ? 하지만 매개변수를 사용하여 커널을 실행하면 다음과 같습니다.

break=premount

나에게 initramfs 쉘을 주었습니다.

이 리소스는 매우 유용합니다.https://wiki.debian.org/InitramfsDebug

답변2

kexec에 제공한 값이 정확 합니까 --initrd=?

방금 kexec를 설치하고 사용해 보았습니다. 내가 가면 효과가 있어

kexec -l /boot/vmlinuz --initrd=/boot/initrd.img --append=root=/dev/sda3 

그런 다음 kexec -e. (암호화 안했어요...)

처음에는 "사용" 프롬프트를 따르려고 했지만 /proc/cmdline성공하지 못했습니다. 제가 보기엔 추가 옵션을 제공해야 할 것 같습니다 --initrd=.

비밀번호를 제공하려면(암호화된 장치를 마운트할 수 있도록) "initramfs 프롬프트"가 필요합니까?

보통 내 /proc/cmdline모습은 이렇다

vmlinuz initrd=initrd.cpio.gz root=/dev/sda3

위의 kexec를 실행하고 다시 시작하면 /proc/cmdline다음과 같습니다.

root=/dev/sda3

커널 및 initrd 이름이 누락되었습니다! 오직- 추가의그것의 일부가 남아 있습니다. 이것은 나를 너무 혼란스럽게 하지도 않습니다. 단지 질문에 새로운 측면을 추가할 뿐입니다. 커널 이미지와 initrd 이미지가 있습니까?커널 옵션? 그것들은 (커널)의 일부입니까?명령줄?

부팅에는 uefi 쉘을 사용합니다. 나는 이 "initrd="가 얼마나 중요한지 알고 있습니다. 부트로더(grub)를 사용하면 동일하게 작동합니다. 이는 커널, initrd(필요하거나 원할 경우), 루트, init 및 모든 일반 "커널 옵션"(간접적으로)을 선택하는 다른 방법일 뿐입니다.

표준 initrd는 다음을 수행합니다.

  • 루트 디렉터리에 액세스하기 위한 모듈 로드(제 경우: SIMPLE SSD 드라이브는 sata, ahci입니다)

  • 장치 마운트(root=/dev/xxx에서 제공)

  • "switch_root"(/sbin/init 실행 포함)

귀하의 경우에는 SATA 모듈이 아닌 비밀번호 프롬프트(?)가 필요합니다. 그러나 결과는 동일합니다. 루트를 마운트할 수 없습니다.

부트로더가 어떻게 성공적으로 부팅되는지 이해한 다음 kexec를 사용하여 이를 모방해 보십시오.


다음에 추가:

initrd(이름은 중요하지 않습니다...)는 기본적으로 스크립트로 시작합니다 /init( rdinit=시작 옵션 참조). 이것은 earlyshell에 해당하는 "초기 사용자 공간"입니다. 이렇게 하면 initramfs-tool/init 및 호출되는 스크립트를 제어할 수 있는 충분한 중단점이 있는 것처럼 보입니다 .

그렇지 않으면 initrd를 추출하고( gzip및 사용 cpio) /init를 변경하고(또는 /init_new를 추가하고 부팅 옵션으로 rdinit=/init_new로 이동) 폴더를 다시 보관할 수 있습니다. 나는 이전에 이 cpio 명령을 사용해 본 적이 없지만 실제로는 tar보다 더 간단합니다. 조금 다릅니다.

mkinitcpio도구입니다. 초기 사용자 공간과 암호화에 대해 언급하는 것으로 시작됩니다. 나는 이것이 아치리눅스의 일이고 후기 및 초기 "후크"도 있다는 것을 방금 읽었습니다. initramfs-tools와 동일한 작업을 수행하는 것 같습니다.

관련 정보