동일한 커널 버전의 두 컴파일: 하나는 부팅 중이고 다른 하나는 루트 장치를 찾을 수 없습니다.

동일한 커널 버전의 두 컴파일: 하나는 부팅 중이고 다른 하나는 루트 장치를 찾을 수 없습니다.

동일한 커널 버전(4.0.5+gentoo 패치)의 두 빌드가 있습니다. 하나는 올바르게 부팅되지만 여러 커널 CONFIG 플래그가 누락되었습니다.

이러한 플래그를 추가하고 실행하면 make all && make install"루트 장치 /dev/sda4를 찾을 수 없습니다" 오류가 발생합니다.

나는 늪지 표준을 가지고 있습니다 /etc/fstab:

/dev/sda1               /boot           ext2         noauto,noatime,discard  0 2
/dev/sda4               /               ext4         noatime,discard         0 1
/dev/sda3               none            swap            sw              0 0
/dev/cdrom              /mnt/cdrom      auto            noauto,ro       0 0
/dev/fd0                /mnt/floppy     auto            noauto          0 0

Google을 확인해 보면 이것이 initramfs의 일부 구성 때문인 것으로 나타났습니다. 이는 흥미롭습니다(그리고 내가 아는 한 디버깅하기 어렵습니다!).

저는 Grub 1을 사용하고 있으며 다음과 같은 구성을 가지고 있습니다.

title Gentoo Linux 4.0.5 - no docker, has X.
root (hd0,0)
kernel /boot/vmlinuz-4.0.5-gentoo-x root=/dev/sda4 rootfstype=ext4
initrd /boot/initramfs-genkernel-x86_64-4.0.5-gentoo

title Gentoo Linux 4.0.5 - latest build.
root (hd0,0)
kernel /boot/vmlinuz-4.0.5-gentoo root=/dev/sda4 rootfstype=ext4
initrd /boot/initramfs-genkernel-x86_64-4.0.5-gentoo

첫 번째 항목은 부트스트랩 빌드이고 두 번째 항목은 비부트스트랩 빌드입니다.

내 거의심하다예, 커널 + initramfs에는 바이너리 일치 요구 사항이 있으며 새 버전에서는 바이너리 위치를 변경하여 펌웨어 로드에 실패합니다.

누군가 권위 있는 문서에 대한 링크가 있거나 커널/initramfs/루트 장치 상호 작용에 대한 권위 있는 답변이 있다면 크게 감사하겠습니다.

UUID=<uuid>편집: 이 문제를 조사하는 데 시간을 투자한 결과 이것도 도움이 되지 않는 것으로 나타났습니다 . 그러나 제대로 작동하지 않는 부팅에서 initramfs 셸을 입력하면 해당 셸이 존재하지 않음을 나타내는 것 같습니다 /dev/sda<1-4>(이것이 제가 찾으려는 것입니다). 음.

답변1

두 코어 모두에 동일한 initramfs를 사용하고 있는 것 같습니다. initramfs에는 거기에서 로드해야 할 수 있는 커널 모듈이 포함되어 있으며, 커널 구성의 차이에 따라 이것이 문제가 될 수도 있고 아닐 수도 있습니다.

일반적으로 말하면 두 커널이 동일한 소스 트리에 구축되고 커널이 두 번째 컴파일될 때 모듈이 다시 컴파일되지 않는 경우에만 두 커널이 "호환 가능"하다고 생각합니다. 따라서 추가 모듈을 활성화하면(기존 모듈이 재컴파일되지 않음) "호환 가능한" 커널이 되는 반면, CONFIG 플래그를 변경하면 기존 모듈이 재컴파일되어 "호환되지 않는" 커널이 됩니다. 호환되지 않는 커널 간에 모듈을 혼합하는 데 문제가 있을 수 있습니다. 따라서 호환되지 않는 커널 구성 변경에 대해 새로운 initramfs를 생성해야 합니다. 또한 동일한 버전 문자열을 가진 두 개의 호환되지 않는 커널을 동일한 시스템에 설치하면 마치 두 커널의 모듈이 동일한 위치에 있는 것처럼 문제가 발생할 수 있습니다 /lib/modules/<version>. 하지만 둘 중 하나의 모듈만 배치할 수 있습니다. EXTRAVERSION=커널 버전 문자열을 고유하게 만들려면 커널 트리의 루트 Makefile에 문자열을 추가하세요 .

관련 정보