grub-probe : 오류 : / cow의 정식 경로를 가져 오지 못했습니다.


15

USB 드라이브에서 GRUB을 다시 설치하려고합니다. 나는 다음을 실행한다.

sudo mount /dev/sda6 /mnt
sudo grub-install --root-directory=/mnt /dev/sda

다음과 같은 오류가 발생합니다.

grub-probe: error: failed to get canonical path of /cow.

누군가 오류를 설명하고 어떻게 해결할 수 있습니까?

편집하다

리눅스 민트가 들어있는 USB에서 실행되는 손상된 듀얼 부팅 시스템을 복구하려고합니다.


그 편집은 올바른 방향의 단계입니다. Linux 시스템이 이미 설치되어 있다고 가정합니까? 부팅이 sda6되나요? 내 대답 도움이 되나요?
terdon

답변:


10

이 단계를 따르세요:

  1. Live Linux 세션으로 부팅하십시오.

  2. /설치된 OS 의 파티션을/mnt

    sudo mount /dev/sda6 /mnt
    
  3. chroot환경을 설정하십시오 .

    sudo chroot /mnt
    
  4. 이제는 "가상"Linux 설치로 처리 /mnt됩니다 /. 이는 GRUB에 필요한 모든 파일 /boot이 시스템 이 원하는 위치에 있으며 실제로 설치된 시스템을 실행하는 것처럼 GRUB을 설치할 수 있음을 의미합니다.

    sudo update-grub
    sudo grub-install /dev/sda
    

이제 재부팅하면 GRUB 메뉴가 정상적으로 나타납니다.


USB 장치 에서 설치하려고합니다 . 어쨌든, 나는 같은 오류없이 마운트하지 않고 시도했다. 오류를 설명 할 수 있습니까?
elyashiv

@elyashiv 질문을 편집 하고 시도중인 내용을 설명하십시오. 고장난 시스템을 구출하려고하십니까? USB에서 라이브 시스템을 부팅하고 있습니까? 그렇다면 알려주십시오 . 어떤 OS를 사용하고 있습니까? GRUB에 root-device옵션 이 있다고 생각하는 것은 무엇 이고 그 옵션이 무엇을 할 것으로 기대하십니까? chroot환경 을 설정 했습니까 ? 당신이 질문을 할 때마다, 당신이 무엇을하려고하는지 정확하게 설명해야합니다. 우리는 추측 할 수 없습니다.
terdon

죄송합니다. -root-directory
elyashiv

@elyashiv도 없습니다 --root-directory. 이동 내 대답을 읽어 여기에 GRUB을 다시 설치하는 방법을 설명하는.
terdon

첫 번째 대답 보면 여기
elyashiv

1

grub이 정식 경로를 해결할 수 없다고 말하면 존재하지 않거나 realpath()실패했음을 의미합니다 .

이 경우 다음을 시도하십시오.

$ realpath /cow
$ ls -la /cow

두 명령 모두 "파일 또는 디렉토리를 찾을 수 없습니다"라고 표시되면 하나를 작성해야합니다.

두 번째 명령은 작동하지만 첫 번째 명령은 작동하지 않으면 왜 realpath()작동하지 않는지 확인하십시오 . 이유 중 하나가 /proc마운트되지 않았기 때문일 수 있습니다 . libc의 일부 구현에서는 /proc/self/fd파일의 정식 경로를 얻는 데 사용됩니다.


0

작성된 내용에 따라 GRUB을 / dev / sda에 설치하려고하는 것 같습니다. 디스크를 마운트하지 않으려 고합니다.

당신은 아마 찾고 있습니다 : grub-install /dev/sda

GRUB 매뉴얼 페이지를 참조하거나 man grub-install시스템에서 사용할 수 있습니다 : http://linux.die.net/man/8/grub-install


0

이 오류도 발생하며 chroot에서 발생한다고 생각하지 않습니다.

배경

systemd가 경로에 마운트되어 경로를 찾을 수 없을 때라고 생각합니다. 따라서 chroot를 설정하면 드라이브를 포함하여 하드웨어에 대한 액세스를 이미 구성합니다.

Systemd 내에서이 액세스를 구성 할 수 있다고해서 동일한 방식으로 해당 드라이브에 대한 권한을 구성 할 수있는 것은 아닙니다.

예를 들어이 파일을 만들었습니다.

/etc/systemd/system/systemd-nspawn@.service.d/override.conf

그리고 다음 설정이 포함되어 있습니다.

[Service]
DeviceAllow=char-usb_device rwm
DeviceAllow=char-usb
[Files]
Bind=/var/cache/apt/pkgcache.bin
Bind=/var/cache/apt/srcpkgcache.bin

데비안 스트레치 (Debian Stretch)로 부트 된 USB에서 Pi를 사용 grub-install /dev/sda하거나 update-grubUSB를 사용할 때는 여전히 작동하지 않습니다 . grub-uboot 및 grub-efi-arm을 사용하더라도 grub-probe정식 경로를 찾을 수 없다는 오류가 여전히 있습니다.

그뿐만 아니라 update-grub운영 체제가 무엇인지보고 알 수 있지만 grub-install데비안 운영 체제가 USB에 있다는 것을 흥미롭게 인식하지 못합니다.

root@raspixmc:/home/pi# grub-install /dev/sda
Installing for arm-uboot platform.
grub-install: warning: no hints available for your platform. Expect 
reduced performance.
grub-install: warning: WARNING: no platform-specific install was 
performed.
Installation finished. No error reported.
root@raspixmc:/home/pi#

흥미롭게도, chroot를 생성하고 실행할 수있을 때 update-grub, USB 자체로 부트 스트랩 한 운영 체제에 있어도 자체 운영 체제를 볼 수 없습니다!

root@raspixmc:/home/pi# mount /dev/sda1 /mnt
root@raspixmc:/home/pi# cd /mnt
root@raspixmc:/mnt# mount --bind /dev dev/
root@raspixmc:/mnt# mount --bind /sys sys/
root@raspixmc:/mnt# mount --bind /proc proc/
root@raspixmc:/mnt# mount --bind /dev/pts dev/pts
root@raspixmc:/mnt# chroot . bin/bash
root@raspixmc:/# update-grub
Generating grub configuration file ...
Found Raspbian GNU/Linux 9 (stretch) on /dev/mmcblk0p2
done
root@raspixmc:/#

Raspbian 만 보입니다. 이것은 컨테이너 내부에 GRUB을 설치하고 업데이트하려고 할 때만 발생하지만 chroot를 종료 할 때 발생합니다.

chroot 디렉토리를 마운트 해제하지 않았으므로 어떻게 작동하는지 살펴보십시오.

/dev dev/
/sys sys/
/proc proc/
/dev/pts dev/pts

컨테이너 외부 grub-uboot에서 Raspbian에 설치하고 debootstrapped 데비안을 포함하는 USB에는 Grub을 설치하지 않고이 명령을 실행 하고 있습니다.

root@raspixmc:/mnt# update-grub
Generating grub configuration file ...
Found Raspbian GNU/Linux 9 (stretch) on /dev/mmcblk0p2
Found Debian GNU/Linux 9 (stretch) on /dev/sda1
done
root@raspixmc:/mnt#

이것은 비공식적으로 데비안 ARM 용 이미지 중 하나를 사용하여 발생하지는 않지만 아직 부트 스트랩에 사용할 수없는 사용자 정의입니다.

문제 해결

실제로 경로를 만드는 것이 더 좋은 경우가 있습니다. 다음으로 가능한 유일한 가능성은 GRUB을 작성하는 것입니다. 이를 위해이 페이지를 읽겠습니다.

https://www.dedoimedo.com/computers/grub-2.html

이 문제에 대해 공유하고 싶은 또 다른 것은 작동 할 수있는 솔루션이지만 microSD 카드는 매우 민감합니다. 나는 내 자신의 리눅스 이미지를 구축하고 이것을 빨리 배웠다. 가장 좋은 방법은 가능할 때마다 Qemu를 사용하는 것이지만 오래된 파티션 테이블을 지우려고 시도 sgdisk --zap-all하면 드라이브에서 실행 해 볼 수 있습니다 .

sgdisk --zap-all /dev/sdd

실제로, 처음 오류가 발생하고 읽기 전용 오류 가 아닌 경우, 다시 실행할 수 있으며 마지막으로 모든 파티션 테이블이 새롭거나 오래된 것입니다.

Qemu를 사용 하여 표준 AMD / Intel 기반 PC에서 Raspberry Pi를 에뮬레이션 할 수 있습니다 . 나는 그것을 추천 할 것입니다. 나는 이것이 원래 게시물과 관련된 것보다 더 많은 정보라는 것을 알고 있지만,이 오류가 어떻게 파생 될 수 있다고 생각합니다. 컨테이너 시대입니다.


0

grub을 다시 설치하거나 설치하기 위해 라이브 USB 또는 다른 chroot 수단을 사용하려고 시도하는 사람에게 어려움을 겪고있는 사람들에게-나는 이것을 몇 번 다루었 고 의도했지만 문서화를 잊어 버렸습니다.

문제는 grub이 소스 (/ boot) 또는 대상 (시스템 및 chroot /dev/sda가 예를 들어 볼 수 있습니까?) 또는 둘 다 라고하는 경로에 액세스 할 수 없다는 것 입니다. chroot를 준비 할 때 chroot 환경에서 액세스 할 수있는 바인드 마운트를 작성하거나 mount -t를 사용하여 chroot 내에서 바인드 마운트를 작성하십시오. 온라인으로 너무 많은 가이드가 있습니다.

/ dev 또는 / boot에 부트 파일을 포함하는 특정 파티션 (예 : / dev / sda1) 만 바인드해야합니다. / boot는 별도의 파티션이거나 /의 디렉토리입니다. chroot는 grub을 설치하려는 드라이브에 액세스해야합니다. chroot에서 fdisk -l을 수행하면 출력에 나열된 장치를 볼 수 있습니다. 또한 별도의 부팅 파티션이 없지만 / root에 부팅 파일이있는 부팅 디렉토리 (마운트 지점이 아님)가있는 경우 루트가 포함 된 파티션 만 마운트하면됩니다. 그런 다음 / root / boot에 마운트 할 필요가 없습니다.

또한 proc 파일 시스템과 sys 파일 시스템을 바인딩해야하지만 내가 본 모든 가이드에는 두 가지가 있습니다. 방금 / dev가 누락되는 것을 보았습니다. 당신이 그것을 필요로하지 않는 경우가있을 수 있지만, 나는 그것들을 모른다.

tl; dr : 마운트 / dev를 바인딩해야합니다


chroot질문이``chroot ''에 관한 것이 아닐 때 왜 이야기하고 있습니까?
G-남자 '는 분석 재개 모니카'말한다

OP는 "리눅스 민트를 포함하는 USB에서 실행"이라고 말합니다. 그것은 chroot가 될 것입니다.
Daira Hopwood
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.