`install-grub`은 여러 개의 partiton 레이블이 있으며 포함이 불가능하다고 주장합니다.


19

부팅하지 않는 데스크탑 컴퓨터에 GRUB을 설치하려고하는데 몇 가지 오류가 발생합니다. 이러한 오류를 논의하는 다른 소스는 첫 번째 파티션 이전에 사용 가능한 디스크 공간이 부족하거나 (필요한 여유 공간이 있음) 문제로 인해 발생했습니다 /boot/grub/grub.cfg(파일을 올바르게 재생성 한 후에도 문제가 지속됨).

라이브 USB로 부팅하고 다음 명령을 사용하여 GRUB을 다시 설치하려고 시도했지만 오류가 발생하여 작동하지 않습니다.

$ sudo 마운트 / dev / sda1 / mnt
$ sudo grub-install --root-directory = / mnt / dev / sda
i386-pc 플랫폼 용 설치
grub-install : 경고 : 여러 파티션 레이블이있는 디스크에 GRUB을 설치하려고합니다. 아직 지원되지 않습니다 ..
grub-install : 경고 : 포함 할 수 없습니다. GRUB은이 설정에서만 차단 목록을 사용하여 설치할 수 있습니다. 그러나 차단 목록은 신뢰할 수 없으며 사용을 권장하지 않습니다.
grub-install : error : 차단 목록을 진행하지 않습니다.

그러나 /dev/sdagrub 설치를 위해 올바르게 포맷 된 것 같습니다 :

$ sudo fdisk -l / dev / sda

디스크 / dev / sda : 111.8 GiB, 120034123776 바이트, 234441648 섹터
단위 : 1 * 512 = 512 바이트의 섹터
섹터 크기 (논리 / 물리) : 512 바이트 / 512 바이트
I / O 크기 (최소 / 최적) : 512 바이트 / 512 바이트
디스크 라벨 유형 : dos
디스크 식별자 : 0x8d91017b

장치 부팅 시작 엔드 섹터 크기 ID 유형
/ dev / sda1 * 2048 234440703 234438656 111.8G 83 Linux

$ blkid / dev / sda1
/ dev / sda1 : UUID = "84e9ff65-c4ba-42eb-8a6d-ebc703fae1f7"TYPE = "ext4"PARTUUID = "8d91017b-01"

처음에는 표준 1MiB 여유 공간이 있으며 /dev/sda1올바르게 포맷되어 있습니다. grub-mkconfig구성 파일을 다시 작성하는 데 사용하려고했습니다 .

proc sys dev dev / pts에서 f의 경우 $ sudo mount --bind / $ f / mnt / $ f; 끝난
$ sudo chroot / mnt
# grub-mkconfig -o /boot/grub/grub.cfg
GRUB 구성 파일 생성 ...
발견 된 리눅스 이미지 : /boot/vmlinuz-3.19.0-26-generic
initrd 이미지를 찾았습니다 : /boot/initrd.img-3.19.0-26-generic
발견 된 리눅스 이미지 : /boot/vmlinuz-3.19.0-23-generic
initrd 이미지를 찾았습니다 : /boot/initrd.img-3.19.0-23-generic
EFI 펌웨어 구성을위한 부팅 메뉴 항목 추가
끝난

그러나 환경 grub-install내부 또는 외부에서를 실행할 때 여전히 동일한 오류 메시지가 나타납니다 chroot.

레거시 모드에서 라이브 USB를 부팅하면 동일한 오류가 발생합니다. 유일한 차이점은 환경 grub-mkconfig에서 실행 한 결과 chroot입니다.

# grub-mkconfig -o /boot/grub/grub.cfg
GRUB 구성 파일 생성 ...
발견 된 리눅스 이미지 : /boot/vmlinuz-3.19.0-26-generic
initrd 이미지를 찾았습니다 : /boot/initrd.img-3.19.0-26-generic
발견 된 리눅스 이미지 : /boot/vmlinuz-3.19.0-23-generic
initrd 이미지를 찾았습니다 : /boot/initrd.img-3.19.0-23-generic
memtest86 + 이미지를 찾았습니다 : /boot/memtest86+.elf
memtest86 + 이미지를 찾았습니다 : /boot/memtest86+.bin
/ dev / sdc1에서 Windows 7 (로더)을 찾았습니다.
끝난

GRUB을 올바르게 설치하려면 어떻게해야합니까?

답변:


25

부팅 섹터와 첫 번째 파티션 사이의 격차를 줄입니다.

# dd if=/dev/zero of=/dev/sdX seek=1 count=2047

첫 번째 파티션이 2048 섹터에서 시작하는 경우에 해당됩니다. 일부는 특히 Windows에 의해 파티션 된 드라이브에서 더 일찍 시작됩니다. 확실하게 실행

# fdisk -l /dev/sdX

시작하기 전에 첫 번째 파티션이 시작되는 위치를 확인하십시오. 사용 count=S-1S는 첫 번째 파티션의 시작이다.


이것은 나를 위해 일했습니다. 별도의 ext4 / boot 파티션과 함께 BTRFS를 사용하려고합니다. 감사.
Thales Ceolin

이렇게하면 GPT 레이아웃이 지워집니다. 그래도 백업에서 복구 할 수 있습니다.
CR.

GPT를 사용하는 경우 BIOS BOOT PARTITION을 초기화해야합니다. 어디에 디스크를 배치했는지에 따라 다릅니다. 첫 번째 "실제"파티션이 블록 2048에서 시작된다고 가정하고 블록 34와 2047 사이에 GPT 뒤에 왔습니다. 주어진 명령 줄을 수정하여 사용할 수 있습니다 seek=34 count=2014.
starfry

완벽하게 작동합니다 !!!!
그래 브는

1
예, 당신은 그렇게 생각할 것입니다, @brauliobo, GRUB은 총 쓰레기입니다. 더 이상 사용하지 않습니다. 요즘에는 mbr에는 syslinux를, gpt에는 systemd-boot를 사용합니다.
enigmaticPhysicist

3

GPT 레코드가있는 새 파티션을 만든 다음를 사용하여 지울 수 dd있습니다. 그렇게하면 MBR 레코드 만 남게됩니다.

문제 장치가 있다고 가정 /dev/sda:

초기 1MiB에서 새 파티션 생성

$ parted /dev/sda
$ mkpart primary ext4 0MiB 1MiB
$ quit

그런 다음 새로 만든 파티션을 0으로 만듭니다.

$ dd if=/dev/zero of=/dev/sda2

그런 다음 파티션을 삭제하십시오.

$ parted /dev/sda
$ rm 2
$ quit

grub-install 이제 예상대로 작동합니다.


제발 편집 이 코드가 무엇을 정당화하기 위해 답변을, 그리고 당신이 생각하는 이유는 해결책이 될 수 있습니다.
Martin Thornton

나를 위해 일했다. 명확성을 위해 편집 됨
Nitz

3

여러 파티션 레이블과 비슷한 문제가 있었지만 실제로는 그렇지 않습니다.

sudo grub-install target=i386-pc /dev/sda --force

내가이 문제를 해결하는 데 사용했던 것입니다. 에 대한 태킹 --force은 "권장"솔루션은 아니지만 지금까지 아무런 문제가 없었습니다. = P


1

다음은 내가 다시 한 일입니다.

사용 된 gdisk빈 공간에 파티션 삽입, GPT로 (유형 EF02 "BIOS 부팅 파티션을") MBR 파티션을 변환, 내 원래의 파티션과 해당 항목을 전치하고, 기존의 BIOS 부팅로 플래그.

그런 다음 달렸다

$ sudo 마운트 / dev / sda1 / mnt
$ sudo grub-install --root-directory = / mnt / dev / sda

그런 다음 성공적으로 설치되었으며 주 드라이브로 부팅 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.