다음 명령을 사용하여 이미지 파일을 만들었습니다.
dd if=/dev/zero of=linux.img bs=16M count=1024
cfdisk linux.img
mkfs.ext4 linux.img
그리고 "Linux From Scratch 11.3" 책의 지침에 따라 Linux 시스템을 설치했습니다. chroot를 통해 시스템에 액세스할 수 있지만 다음을 사용하여 실행하려고 하면:
qemu-system-x86_64 -hda linux.img -vga std -m 4G
이 질문 제목에 설명된 오류로 인해 시스템 초기화가 중단되었습니다. 내 파일은 /boot/grub/grub.cfg
다음과 같습니다.
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5
insmod ext4
#set root=(hd0,2)
menuentry "GNU/Linux, Linux 6.1.11-lfs-11.3" {
linux /boot/vmlinuz-6.1.11-lfs-11.3 root=/dev/hda1 ro
내가 시도한 것:
grub 부팅 화면 다음에 나오는
set root=(hd0,2)' and trying the values
hd0,0or
hd0,1 hd0,X notfound 라인의 주석 처리를 제거하세요.(the system not even initialize with this, and I got the error
메뉴 항목 옵션에서 linux로 시작하는 줄의 루트 값을 /dev/loopXX로 변경합니다(동일한 오류가 발생했습니다).
linux로 시작하는 줄의 메뉴 항목 옵션에서 루트 값을 /dev/sda1로 변경합니다(이 경우 메시지는 동일하지만 블록은 입니다
(8,1)
).
이 문제를 해결하기 위해 내가 무엇을 할 수 있는지 말해 줄 수 있는 사람이 있습니까?
답변1
이 오류 메시지는 hd0,X not found
GRUB에서 발생하며 GRUB 구성 파일에 오류가 있고 존재하지 않거나 GRUB을 읽을 수 없는 파티션을 가리킨다는 것을 나타냅니다.
제목 오류 메시지 Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
는 GRUB를 통해 Linux 커널을 입력했지만 커널이 루트 파일 시스템에 대해 지정된 장치를 찾을 수 없음을 의미합니다. 즉, 커널(또는 이를 사용한 경우 initramfs)에 포함되어야 하는 드라이버가 누락되었습니다. . 그러나 LFS는 그렇지 않음) 또는 root=/dev/...
커널 부팅 옵션이 올바르지 않습니다.
더 구체적으로 말하자면, unknown-block(0,0)
루트 파일 시스템이 어느 블록 장치에 있어야 하는지 커널이 알지 못한다는 의미입니다. unknown-block(8,1)
즉, 사용자가 지정했고 /dev/sda1
커널이 파티션을 이해하지만 그러한 파티션을 찾을 수 없다는 의미입니다. 이 번호는 장치 노드의 주요 및 부 장치 번호를 나타냅니다.
ls -l /dev/sda1
brw-rw---- 1 root disk 8, 1 May 4 07:56 /dev/sda1
^^^^^
첫 번째 오류는 다음과 같습니다.
cfdisk linux.img
mkfs.ext4 linux.img
이는 먼저 분할된 테이블(알 수 없는 유형의 지정되지 않은 수의 파티션 포함)을 생성한 다음파티션 테이블 덮어쓰기전체 이미지를 단일 ext4
파일 시스템으로 초기화합니다.
따라서 파티션 이 전혀 없습니다. GRUB 용어로 , (hd0,0)
둘 중 하나도 없고 (hd0,1)
단지 (hd0,2)
. (hd0)
또한 MBR 파티션 테이블과 GRUB 코어 이미지에 포함된 첫 번째 파티션의 시작 부분 사이에 할당되지 않은 공간이 없으므로 GRUB를 설치할 때 몇 가지 경고가 표시될 수 있습니다. 설치자는 현재의 이전 설치 방법으로 되돌려 이러한 상황에 적응할 수 있습니다.진지하게낙담.
전체 디스크 이미지를 생성하려면 다음 프로세스를 권장합니다.
dd if=/dev/zero of=linux.img bs=16M count=1024
cfdisk linux.img
losetup -P /dev/loop0 linux.img
ls /dev/loop0* #you should see loop0 and the first partition as loop0p1
mkfs.ext4 /dev/loop0pX # replace X with partition number
mkswap /dev/loop0pY # if you created a swap partition, use this for it and replace Y
... # LFS 11.3 chapter 2.6 and the 1st command of chapter 2.7
mount -v -t ext4 /dev/loop0pX $LFS # the 2nd command of LFS 11.3 chapter 2.7
... # continue according to the book
이제 grub.cfg
파일 에서 항목은 Linux가 1부터 파티션을 계산하기 시작하지만 GRUB는 0부터 계산하기 시작하므로 set root=
다음 형식이어야 합니다 . 따라서 파티셔닝 (hd0,<X-1>)
에 을 사용하는 경우 GRUB를 사용하십시오 ./dev/loop0p1
ext4
set root=(hd0,0)
또한 온라인은 linux
더 이상 사용되지 않는 PATA 디스크 컨트롤러에 대한 root=/dev/hda1
더 이상 사용되지 않는 비드라이버를 나타냅니다 . libata
대부분의 최신 Linux 디스크 컨트롤러 드라이버는 이제 /dev/sdXN
스타일 이름을 사용합니다. 따라서 /dev/loop0p1
LFS 이미지를 사용하여 ext4 파일 시스템을 생성했더라도 해당 이미지가 QEMU VM에서 가상 하드 디스크로 표시되면 /dev/sda1
커널 구성에서 이상한 선택을 하고 다른 QEMU 옵션을 사용하지 않는 한 커널은 이름을 지정합니다. . 따라서 마지막 줄은 다음 grub.cfg
과 같아야 합니다.
linux /boot/vmlinuz-6.1.11-lfs-11.3 root=/dev/sda1 ro
(현재 준비가 되어 있지 않은 상황에서는 재미로 linux.img
시도해 볼 수도 있고 root=/dev/sda
작동하지 않을 수도 있습니다.)