grub-probe: 오류: /cow에 대한 정식 경로를 가져올 수 없습니다.

grub-probe: 오류: /cow에 대한 정식 경로를 가져올 수 없습니다.

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.

누군가 이 오류와 해결 방법을 설명할 수 있습니까?

편집하다

저는 Linux Mint가 포함된 USB에서 실행되는 손상된 이중 부팅 시스템을 수리하려고 합니다.

답변1

이 순서대로:

  1. 라이브 Linux 세션으로 부팅합니다.

  2. /운영 체제가 설치된 파티션을 마운트합니다./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 메뉴가 정상적으로 표시됩니다.

답변2

나를 위한

sudo touch /cow

문제를 해결했습니다.

답변3

나에게도 이 오류가 발생하는데 chroot에서는 그런 일이 발생하지 않는 것 같습니다.

배경

이것이 디렉토리에 설치되어 있기 때문에 systemd가 경로를 찾을 수 없는 이유라고 생각합니다. 따라서 차이점은 chroot를 설정할 때 드라이브를 포함한 하드웨어에 대한 액세스를 구성했다는 것입니다.

Systemd 내에서 이 액세스를 구성할 수 있지만 이것이 이러한 드라이브에 대한 권한을 동일한 방식으로 구성할 수 있다는 의미는 아닙니다.

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

/etc/systemd/system/[email protected]/override.conf

여기에는 다음 설정이 포함됩니다.

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

grub-install /dev/sdaupdate-grubDebian Stretch를 통해 부팅되지 않는 Pi에서 USB를 사용하거나 사용할 때는 여전히 작동하지 않습니다. grub-uboot 및 grub-efi-arm을 사용해도 grub-probe표준 경로를 찾을 수 없다는 오류가 여전히 발생합니다.

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

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-grubUSB 자체에서 부팅한 OS를 사용하더라도 자체 OS가 표시되지 않습니다!

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-ubootRaspbian이 설치되어 있고 Debian이 부팅된 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#

다음 중 하나를 사용하면 이런 일이 발생하지 않습니다.비공식적으로 사용 가능한 Debian ARM용 미러, 그러나 분명히 이것은 아직 디부트스트랩핑에 사용할 수 없는 사용자 정의입니다.

문제 해결

실제로 때로는 경로를 만드는 것이 더 나을 때도 있습니다. 다음 유일한 가능성은 GRUB를 작성하는 것입니다. 그러기 위해 나는 이 페이지를 읽을 것이다.

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

이 문제와 관련하여 제가 공유하고 싶은 또 다른 사항은 작동할 수 있는 솔루션이지만 microSD 카드는 매우 민감하다는 점에 유의하세요. 나는 나만의 Linux 이미지를 구축해 왔으며 빠르게 배우고 있습니다. 가장 좋은 방법은 가능하면 Qemu를 사용하는 것이지만, 이전 파티션 테이블을 지우려면 sgdisk --zap-all드라이브에서 실행해 볼 수 있습니다.

sgdisk --zap-all /dev/sdd

실제로 처음에 오류가 발생하는 경우가 있습니다.아니요읽기 전용 오류입니다. 다시 실행하면 새 파티션 테이블이나 기존 파티션 테이블이 모두 종료됩니다.

당신은 할 수Qemu를 사용하여 Raspberry Pi 에뮬레이션표준 AMD/Intel 기반 PC에서. 나는 그것을 추천하고 싶습니다. 이것이 원래 게시물보다 더 많은 정보라는 것을 알고 있지만 이것이 이 오류의 원인일 가능성이 가장 높다고 생각합니다. 바야흐로 컨테이너 시대입니다.

답변4

라이브 USB 또는 기타 chroot 방법을 사용하여 grub을 다시 설치하거나 설치하려는 분들을 위해 이 문제를 몇 번 다루었지만 의도했음에도 불구하고 이전에 문서화하는 것을 잊어버렸습니다.

직면한 문제는 grub이 참조하는 소스 경로(/boot)나 대상 경로( /dev/sda예: 시스템과 chroot가 볼 수 있습니까?) 또는 둘 다에 액세스할 수 없다는 것입니다. chroot를 준비할 때 chroot 환경 내에서 액세스할 수 있는 바인드 마운트를 생성하거나 mount -t를 사용하여 chroot 내에서 이를 수행합니다. 두 가지 방법 중 하나에 대한 온라인 가이드가 많이 있습니다.

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

또한 proc 파일 시스템과 sys 파일 시스템을 바인딩해야 하지만 내가 본 모든 가이드에는 /dev가 때때로 필요하지 않은 경우가 있을 수 있습니다. , 하지만 나는 그들에 대해 모른다.

tl;dr: /dev가 바인드 마운트되었는지 확인하세요.

관련 정보