GRUB 명령줄에서 부팅하면 파티션이 존재하지 않는 것으로 표시됩니다.

GRUB 명령줄에서 부팅하면 파티션이 존재하지 않는 것으로 표시됩니다.

몇 가지 관련 질문을 찾았지만 그 중 어느 것도 내 문제를 해결하지 못했습니다.

Windows 하드 드라이브가 장착된 노트북이 있습니다. 나는 두 번째 하드 드라이브에 데비안을 설치하고 싶었기 때문에 캐디를 연결하고 Windows 하드 드라이브를 제거했습니다(만약에 대비해). 그런 다음 데비안을 성공적으로 설치하고 당시 유일한 디스크였기 때문에 동일한 디스크에 GRUB를 설치했습니다. 그런 다음 Windows 하드 드라이브를 다시 넣었습니다.

이제 BIOS에서 부팅할 드라이브를 선택할 수 있습니다. Windows 드라이브는 완벽하게 부팅되지만 Debian 드라이브에서 부팅하도록 선택하면 GRUB 메뉴가 표시되고 대시가 깜박이는 검은색 화면이 표시됩니다.

Windows 하드 드라이브를 제거하면 Debian을 성공적으로 부팅할 수 있으므로 GRUB 구성에 문제가 있는 것 같습니다.

따라서 저는 GRUB 콘솔을 선택합니다. Linux가 (hd0,5) 파티션에 있고 vmlinuz 및 initrd가 루트에서 액세스할 수 있다는 것을 감지하여 일반적인 작업을 수행했습니다.

grub> set root=(hd0,5)
grub> linux /vmlinuz root=/dev/sda5
grub> initrd /initrd.img
grub> boot

그런 다음 많은 initrd 출력과 여러 메시지를 볼 수 있으며 마지막으로 다음과 같은 메시지 Begin: Running /scripts/local-block ... done.와 함께 실패합니다 . sda5 doesn't exists. Dropping to a shell하지만 뭐... 있잖아요... 그런 게 존재해서 차단됐어요.

답변1

드라이브 식별과 파티션 식별이라는 두 가지 문제가 있습니다.

Grub은 0부터 파티션 계산을 시작하고 Linux는 1부터 파티션 계산을 시작합니다. 따라서 Grub이 hd0Linux용 이라면 sdaGrub은 (hd0,5)Linux용입니다 sda6.

Grub에서 "루트"로 선택한 파티션이 반드시 Linux의 루트 파티션일 필요는 없습니다. Grub에서 "루트"는 바로 가기일 뿐이므로 파일 이름 앞에 파티션 이름을 입력할 필요가 없습니다. 별도의 파티션이 있는 경우 Grub은 해당 내용 (커널 이미지 및 초기 램디스크 이미지) /boot에만 관심이 있으므로 일반적으로 이를 Grub 루트로 설정합니다 . Linux는 업그레이드하는 것 외에는 /boot내부 내용에 관심이 없습니다 ./boot

Grub과 Linux 사이의 드라이브 번호가 일치하지 않을 수 있습니다. Grub은 컴퓨터의 BIOS를 사용하여 드라이브를 열거합니다. Linux에는 자체 드라이버가 있습니다. 디스크가 서로 다른 인터페이스를 통해 연결되면 어떤 디스크 컨트롤러가 더 빠르게 응답하는지에 따라 나열되는 순서를 예측하기 어렵습니다. 따라서 Grub이 hd0반드시 Linux일 필요는 없습니다 sda.

컴퓨터가 안정적으로 부팅되도록 하려면 디스크 연결 방식과 컨트롤러의 응답 시간에 관계없이 영숫자 지정 대신 레이블이나 UUID를 사용하십시오. 일단 시작되면 실행하세요 . 일반적으로 UUID가 포함된 파일을 생성 update-grub해야 합니다 . /boot/grub/grub.cfgGrub과 Linux는 모두 시작 시 사용 가능한 파티션을 열거하고 해당 UUID를 기억합니다. grub.cfg다음과 같은 줄이 보일 것입니다 .

search --no-floppy --fs-uuid --set=root 82aecd65-6423-4d95-9319-3034263ee747

그리고

linux /vmlinux root=UUID=82aecd65-6423-4d95-9319-3034263ee747 ro

관련 정보