Arch Linux를 설치한 후 "부팅 가능한 장치를 찾을 수 없습니다"라는 텍스트만 표시됩니다.

Arch Linux를 설치한 후 "부팅 가능한 장치를 찾을 수 없습니다"라는 텍스트만 표시됩니다.

아치리눅스(Arch Linux)를 설치하려고 했습니다. 설치가 완료되면 BIOS 화면이 표시되고 "부팅 가능한 장치를 찾을 수 없습니다."라는 메시지가 표시됩니다.

전체 시나리오를 몇 번 다시 시도했지만 여전히 동일한 메시지가 표시됩니다.

설치할 때 ArchLinux 위키의 비공식 초보자 가이드를 따랐습니다.

내가 한 일은 다음과 같습니다.

먼저 하드 드라이브를 지우고(지우기 전에 Windows Vista가 설치되어 있음) gdisk를 사용하여 GPT를 넣었습니다. 그런 다음 일부 파티션을 설정했는데 이제 다음과 같습니다(parted의 출력).

Model: ATA ST9160310AS (scsi)
Disk /dev/sda: 160GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system     Name                 Flags
 1      1049kB  2097kB  1049kB                  BIOS boot partition  bios_grub
 2      2097kB  107MB   105MB   ext2            Linux filesystem     
 3      107MB   21.6GB  21.5GB  ext4            Linux filesystem     
 4      21.6GB  30.2GB  8590MB  linux-swap(v1)  Linux swap           
 5      30.2GB  160GB   130GB   ext4            Linux filesystem     

그런 다음 루트 파티션(sda2)을 /mnt에 마운트한 다음 부팅 및 기본 파티션(sda3 및 sda5)도 /mnt/boot 및 /mnt/home에 마운트하고 마지막으로 스왑 파티션(sda4)을 포맷하고 활성화했습니다.

이제 기본 시스템 설치를 시작합니다. 이미지를 선택한 후 base와 base-devel을 설치했습니다.

설치가 끝나면 fstab을 생성했습니다.

그런 다음 결국 /mnt로 루트를 지정하고 일부 로케일 설정을 설정하고 루트 비밀번호를 설정한 다음 설명된 대로 Grub2를 설치 및 구성했습니다.여기.

마지막으로 chroot 환경을 종료하고 파티션을 마운트 해제한 후 재부팅했습니다. 나머지는 아시겠지만...부팅 가능한 장치를 찾을 수 없다는 메시지만 표시됩니다.

그런데, 설치해 보았습니다.이것컴퓨터.

답변1

동일한 문제가 발생했습니다. 검색을 통해 grub.cfg의 루트/파티션 uuid가 잘못되었음을 발견했습니다. 다음을 시도해 볼 수 있습니다.

  1. 라이브 Archlinux 미디어에서 부팅
  2. mount /dev/sdxx /mnt(sdxx는 루트 파티션입니다)
  3. arch-chroot /mnt
  4. grub-mkconfig -o /boot/grub/grub.cfg
  5. grub-install

마치다.

답변2

좋아요 댓글이 좀 길어지네요. 이것은 직접적인 관련은 없으며 단지 aa55의견을 설명하기 위한 것입니다.

언제. . . 언제기본 입출력 시스템(BIOS)가 시작하면 실행됩니다.전원 켜기 자체 테스트(POST), 하드웨어 확인 등 그런 다음 CMOS에서 제공한 명령(BIOS에서 사용자가 구성한 대로)을 기반으로 부팅 가능한 활성 장치를 찾습니다.상호 보완 산화철 반도체). 오프셋 510에서 디스크를 찾으면 0xaa55디스크의 해당 부분(섹터 1)을 메모리에 로드하고 제어권을 주소 0x00000의 코드에 맡깁니다. 이 512바이트는마스터 부트 레코드(마스터 부트 레코드).

이 경우 코드는 "GRUB -시작", BIOS에 다양한 정보를 요청하는 것 외에도 이러한 512의 개별 바이트도 확인합니다. 이 과정에서 GRUB의 나머지 부분이 있는 디스크를 찾아 디스크의 해당 부분을 메모리에 로드한 다음 코드의 해당 부분을 제어합니다. 그 사람은 커널 등을 설치하고 제어권을 넘겨줍니다.

GPT를 사용하면 MBR 내에서 로드된 GRUB 이미지가 bios_grub 사용자가 소유한 파티션에 있고 크기가 충분히 크기 때문에 이것이 어떻게 잘못되었는지 확인할 방법이 없습니다.


존재하다"부팅 가능한 장치를 찾을 수 없습니다."BIOS 메시지 – 부팅 디스크의 MBR이 손상된 상황이 발생할 수 있습니다. MBR이 끝나고 0xaa55MBR이 손상된 경우 일반적으로 다른 오류가 발생하거나 시스템이 중단됩니다.


그래도. 이것은 매우 이상합니다. 다음과 같이 표시된 파티션이 없는 것으로 나타났습니다."시작하다". GPT를 사용하는 것이 맞지만, 이는 금지되어 있지만 sda5실행용으로 표시해 볼 수 있습니다. gparted에서: ((g)parted도 원치 않는 GPT를 변경했음을 알게 됨) fdisk:

# Toggle bootable:
a [DISK NUMBER]
# Check (could be an asterisk marking boot partition):
p
# Save changes:
w

BIOS가 필요한 것보다 더 많은 작업을 수행하고 MBR의 파티션 테이블을 확인하고 있을 가능성이 있습니다.


편집 - 업데이트된 댓글:

AFAIK, 실제로 사용되지 않기 때문에 어느 것을 설정해도 상관 없습니다. 요점은 누구에게 거절해야 하느냐는 것입니다."부팅 가능한 장치를 찾았습니다.", 그들은 만족할 것입니다. 이는 sda1전통적인 의미의 부팅 파티션이 아니라 GRUB 부팅 파일을 위한 공간입니다.

GPT가 아닌 기존 파티션 레이아웃에는 일반적으로 다음과 같은 내용이 있습니다.

0x000 [Master Boot Record] <- Partition table say Partition 2 is active
                                                       |
0x200 [ GRUB module 1    ] <- core.img from GRUB       |
                                                       |
0x400 [ Partition 1 Swap ]                             |
      |                  |                             |
      |                  |                             |
      |__________________|                             |
                                                       |
0x... [ Partition 2 ext4 ]                             |
      | * Active         | <- AKA boot ----------------+
      |                  |
      |__________________|

0x... [ Partition 3 ext4 ]
      |                  |
      |                  |
      |__________________|

이는 3개의 파티션을 의미합니다. 오프셋 0x400 이전의 HDD i에 있는 모든 것원시 바이트– 어떠한 파티션에도 속하지 않는 경우 등

여기시작하다파티션은파티션 2이것은 리눅스의 시스템 파티션입니다.

GRUB 모듈 1 파일은 MBR 뒤, 첫 번째 파티션 앞에 위치합니다. 어디에나 위치할 수 있지만 일반적으로 MBR 디스크의 오프셋 512에 있는 동일한 디스크에 위치합니다.

또한 GPT 시스템에서는 GPT가 디스크의 해당 부분을 자체적으로 사용하므로 이러한 GRUB 파일을 다른 위치로 이동해야 합니다. 이것이 바로 GRUB 2 bios_grub의 용도입니다.core.img


이것"시작 플래그 설정"그냥 맹목적으로 시도해 봤는데 효과가 있으면 놀랄 것 같아요. 하지만 시작이 있어야 합니다.


편집 2:

이렇게 하면 어떻게 될까요?

  1. 현재 MBR을 백업합니다.

      dd if=/dev/sda of=/path/mbr-backup bs=512 count=1
    
  2. 아래에서 이미지를 생성하고 Code TEST파일에 저장합니다 test.s.

    as -o test.o test.s
    objcopy -O binary test.o test.img
    
  3. test.imgMBR에 파일 복사 :

    dd if=test.img of=/dev/sda bs=512 count=1
    
  4. 전원 켜짐

코드 테스트:

    .file "test.s"
    .text
    .code16
.globl start, _start
start:
_start:
    jmp go
    nop
go:
    movb $0x48, %al
    call prnt_chr
    movb $0x65, %al
    call prnt_chr
    movb $0x6c, %al
    call prnt_chr
    movb $0x6c, %al
    call prnt_chr
    movb $0x6f, %al
    call prnt_chr
    movb $0x21, %al
    call prnt_chr
    ret
prnt_chr:
    movb $0x0e, %ah
    int  $0x10
    ret
    . = _start + 0x1fe 
    .word   0xaa55

MBR을 복원하려면 다음을 수행하십시오.

dd if=/path/mbr-backup of=/dev/sda bs=512 count=1

이는 단순히 "Hello!"를 인쇄한 다음 MBR이 로드되면 중지됩니다. qemu-system-x86_64, qemu-system-i386, VirtualBox, 고정 Intel PC 32 및 64비트에서 실행하여 테스트되었습니다.


답변3

내가 틀릴 수도 있고 옳은 일을 하지 않을 수도 있지만, 나도 처음에 당신과 같은 문제를 겪었습니다. 시간이 좀 흐른 뒤에야 찾았어요여기저것 GRUB has to have a 512MB EFI partition, with a vfat filesystem. 시스템을 EFI로 설치한 경우:

EFI의 경우 vfat 파일 시스템이 있고 부팅 플래그가 활성화된 작은 파티션(512MiB 이하)을 찾고 있습니다.

이는 파티션을 생성할 때 이 사실을 예상해야 함을 의미합니다. 이를 수행할 때(예: cfdisk 사용) /dev/sdX1을 EFI로 설정한 다음 FAT32 파일 시스템으로 포맷해야 합니다( mkfs.vfat -F32 /dev/sdX1설치 중에 이 명령을 사용하십시오). 이 방법으로만 grub을 인식할 수 있습니다.

나는 Syslinux가 당신의 ext2 파티션과 함께 작동할 수 있다고 생각합니다. 만약 당신이 그것을 시도하고 싶다면.

Arch를 EFI로 설치하지 않았다면 아마도 위키에서 확인할 수 있을 것입니다. 이 상황에서는 더 이상 도움을 드릴 수 없습니다.

이 게시물이 오래되었다는 것을 알고 있지만 누군가 여기에 와서 해결책을 찾고 싶어하는 경우를 대비해 게시합니다.

답변4

이는 몇 가지 이유로 인해 발생할 수 있습니다.결함이 있는 UEFI 구현.

--removable이 문제를 해결한 한 가지 해결 방법은(다른 방법이 없을 때) 다음 과 같이 옵션을 사용하는 것이었습니다 grub-install.

# grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=GRUB --removable

grub-mkconfig -o /boot/grub/grub.cfg재부팅하기 전에 다시 실행합니다. 이것이 필요한지 확실하지 않지만 아프지는 않습니다.

원천: Arch BBS: [해결됨] uefi가 시작될 때 부팅 가능한 장치가 없습니다

관련 정보