Linux 부팅 프로세스를 이해하기 위해 grub을 디스크 이미지 파일에 넣고 qemu로 부팅을 시도했습니다. 아직 커널 이미지를 드라이브에 넣지 않았습니다. 그냥 grub입니다. 나는 다음을 사용하여 grub을 설치했습니다.
kpartx -av mydrive.img
losetup /dev/loop1 /dev/mapper/loop0p1
mount /dev/loop1 mnt/mydrive/
cd mnt/mydrive/boot
grub-install --no-floppy --boot-directory=. -v /dev/loop0
부팅 순서를 단계별로 진행하고 싶기 때문에 grub에서 커널이 누락되었다고 주장한 다음 커널을 설치하고 X까지 계속해서 항목을 추가하여 문제를 해결하고 싶습니다.
지금은 이해
오류: 해당 장치가 없습니다
하지만 예상된다
오류: 구성 파일이 없습니다.
구조 메시지를 작성하고 ls
제공하세요.
(hd0) (fd0)
질문: *grub이 찾고 있는 장치는 무엇입니까? 이는 호스트 시스템을 의미합니까? [일부 해결됨, UUID가 가상 파일 시스템의 UUID와 동일함] * Grub이 장치를 찾지 못하는 이유는 무엇입니까?
VM 내부의 live-cd에서 grub(grub만 설치)을 설치하면(작은 바이너리 배포판이기 때문에 Bodhi-linux를 선택했습니다) 모든 것이 잘 작동합니다. qemu는 부팅 파티션에 외부에서 사용되는 것과 다른 uuid를 제공합니까?
다음은 가상 드라이브의 파티션 테이블입니다.
Disk mydrive.img: 264 MB, 264241152 byte
32 huvuden, 63 sektorer/spår, 256 cylindrar, totalt 516096 sektorer
Enheter = sektorer av 1 · 512 = 512 byte
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Diskidentifierare: 0xebe6ebdb
Enhet Start Början Slut Block Id System
mydrive.img1 2048 516095 257024 83 Linux
답변1
grub은 기본적으로 이 파티션 유형에 대한 모듈을 설치하지 않는 것 같습니다(DOS/MBR 파티션 레이블이라고 가정합니다).core.img.
다음 명령을 사용하여 필수 모듈을 설치할 수도 있습니다.
grub-install --modules part_msdos --root-directory=. /dev/loop0
그런 다음 grub은 파티션 테이블, 파일 시스템 및 mnt/mydrive/boot
.
따라서 grub 명령은 ls
다음을 출력해야 합니다.
(hd0) (hd0,msdos1) (hd0)
답변2
Giles가 지적했듯이 이는 x86 아키텍처에만 적용됩니다.
배경
올바른 순서를 알고 싶다면 커널을 설치하기 전에 QEMU에 호스트 시스템을 설치해야 합니다. 이 접근 방식은 시작 프로세스를 이해하는 데 있어 직관에 반하는 것처럼 보일 수 있지만 유일하게 유효한 접근 방식입니다. 설명하겠습니다.
모든 운영 체제의 실행 시스템은 최소한 3개의 부분으로 구성됩니다.
- 커널
- 짐을 싣는 사람
- 최종 부팅 운영 체제.
컴퓨터는 두 가지 모드로 작동합니다.
모든 x86 프로세서는 실행 속도가 아무리 복잡하거나 빠르더라도 이 두 가지 모드의 어떤 형태로든 작동합니다. 자세한 내용은 제가 링크한 Wikipedia 기사 오른쪽에 있는 목록을 참조하세요.
어떻게 작동하나요?
- 모든 컴퓨터는 리얼 모드에서 시작됩니다.
- 리얼 모드에서는 BIOS 설정 확인, 모든 장치 연결 확인, 클럭 타이밍 제어 등의 작업을 수행할 수 있습니다.
- 리얼 모드가 검사를 완료하면 제어권이 부트 로더라고도 알려진 로더로 전달됩니다. 부트로더는 PC 제어를 리얼 모드에서 보호 모드로 전환하기에 충분한 코드 세그먼트를 로드하여 이름에서 알 수 있듯이 정확하게 수행합니다. 일부 부트로더는 "인계" 시작 시 이 전송을 구현하고 일부는 마지막에 구현하지만 대부분은 단계적으로 수행합니다. 가이드 보기.
- 부트로더가 로딩 단계를 완료하면 운영 체제는 이제 다음 재부팅 때까지 PC가 "영구 보호 모드"에 있으므로 다른 모든 작업을 안전하고 효율적으로 처리할 수 있습니다.
이것이 Grub과 어떤 관련이 있습니까?
Grub이 올바르게 설치되었을 때 복사된 파일을 보면 Stage.라는 텍스트가 포함된 파일을 볼 수 있습니다. 3개가 있어야 합니다. Stage1*, Stage1_5* 및 Stage2*
- Stage1 로드는
boot.img
MBR/EFI에 내장되어 있습니다. 디스크에 연결하고 마지막에 로드하도록 구성됩니다.core.img
core.img
Stage1_5는 종종 BootSector라고 불리는 섹터 0-62를 로드하는 데 사용됩니다 . 관례적으로 이러한 섹터에는 아무 것도 포함되어 있지 않으므로 해당 섹터에 있는 항목은 덮어쓰이거나 자동으로 업데이트되지 않습니다.- Stage_2가 시작되면 처음 62개 섹터와 커널 경로가 결정됩니다. Stage_2는 커널과 도움말 파일을 가장 자연스럽게 로드합니다.초기 RAM 디스크기억을 입력하세요. 그런 다음 RAM 디스크와 커널의 압축을 풀고 시스템을 설정하고 선택한 Linux 운영 체제로 제어권을 전송하는 데 사용됩니다.
바라보다GNU 그럽
이제 내가 이것을 말하는 이유는 직관에 어긋납니다."이것은 어떻게 작동합니까?"의 3단계부터 시작한 다음 "이것이 Grub과 어떤 관련이 있습니까?"를 통해 작업할 수는 없습니다.. Stage1.5가 완료되면 Stage_2는 커널 및 초기 RAM 디스크(있는 경우)와 같은 복구 프롬프트를 보내며, 이 경우 압축을 푼 후에는 장치를 설정할 필요가 없습니다 hd0
. Grub이 보고한 버그도 정확합니다.
오류: 해당 장치가 없습니다
hd0
맞습니다 . 설정할 운영 체제가 없으므로 Grub Stage_2에게 "야, 내가 로드해야 하는 운영 체제입니다."라고 말할 운영 체제가 없기 때문 입니다. 먼저 운영 체제를 설치한 다음 커널을 설치하고 마지막으로 부트로더를 설치합니다. 귀하의 경우 LiveCD의 ISO 이미지를 CDROM으로 마운트하도록 QEMU를 구성한 다음 가상 디스크에 운영 체제를 설치하고 hd0
부트로더를 구성해야 합니다. LiveCD 목록은 다음을 참조하세요.DistroWatch 주요 릴리스. 부풀림이 덜한 것이 더 편하다면 소스 기반 배포판을 사용해 보십시오.젠투처럼.