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에서 실행되는 손상된 듀얼 부팅 시스템을 복구합니다.
댓글
답변
다음 단계를 따르세요.
-
Live Linux 세션으로 부팅합니다.
-
설치된 OS의
/
파티션을/mnt
-
chroot
환경 설정 :sudo chroot /mnt
-
이제
/mnt
를/
로 취급하는 “가짜”Linux 설치 상태입니다. . 즉, GRUB에 필요한 모든 파일이 시스템이 예상하는/boot
에 있으며 실제로 설치된 시스템을 실행하는 것처럼 GRUB를 설치할 수 있습니다.sudo update-grub sudo grub-install /dev/sda
이제 재부팅하면 GRUB 메뉴가 정상적으로 표시됩니다.
댓글
- ' USB 장치에서 설치 하려고합니다. 어쨌든 마운트하지 않고 시도했습니다-같은 오류. 오류를 설명해 주시겠습니까?
- @elyashiv 질문을 수정 하고 시도하고있는 문제를 설명해주세요. 고장난 시스템을 구하려고합니까? USB에서 라이브 시스템을 부팅하고 있습니까? 그렇다면 알려주세요 . 어떤 OS를 사용하고 있습니까? GRUB에
root-device
옵션이 있다고 생각하는 이유는 무엇이며이 옵션이 수행 할 작업은 무엇입니까?chroot
환경을 설정 했습니까? 질문 할 때마다 무엇을 하려는지 정확히 설명해야합니다. ' 추측하지 않습니다. - 죄송합니다. -root를 의미했습니다. -directory
- @elyashiv there '도
--root-directory
가 아닙니다. GRUB 재설치 방법을 설명하는 내 답변 여기 를 읽어보세요. - 첫 번째 답변보기 here
Answer
Grub이 무언가의 표준 경로를 확인할 수 없다고 말하는 경우 , 존재하지 않거나 realpath()
실패했음을 의미합니다.
이 경우 시도해보세요.
$ realpath /cow $ ls -la /cow
두 명령 모두 “파일 또는 디렉토리를 찾을 수 없음”이라고 표시되면 하나를 만들어야합니다.
두 번째 명령은 작동하지만 첫 번째 명령은 작동하지 않는 경우 realpath()
가 작동하지 않습니다. 그 이유 중 하나는 /proc
가 마운트되지 않았기 때문일 수 있습니다. libc의 일부 구현에서 /proc/self/fd
는 파일의 표준 경로를 가져 오는 데 사용됩니다.
댓글
- 첫 번째 명령은 작동하지만 두 번째 명령은 작동하지 않습니다.
- ME : root @ ubuntu : / # realpath / cow TERMINAL : / cow ME : # ls -la / cow TERMINAL : ls : 불가능합니다 access ' / cow ' : 이러한 종류의 파일 또는 폴더가 없습니다 (대략 번역됨).
답변
저도이 오류가 발생하는데 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/sda
또는 Debian Stretch로 디 부트 스트랩 된 Pi의 USB 용. 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
컨테이너 밖에서 실행 중입니다. 이 명령은 Raspbian에 grub-uboot
가 설치되어 있고 Debootstrap 된 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 용으로 비공식적으로 사용 가능한 이미지 중 하나를 사용하여 발생하지만, 이는 아직 debootstrapping에 아직 사용할 수없는 사용자 정의입니다.
문제 해결
정말 단순히 경로를 만드는 것이 더 나은 경우가 있습니다. 유일한 다음 가능성 (그리고 가능한 가능성)은 단순히 GRUB를 작성하는 것입니다. 이를 위해이 페이지를 읽어 보겠습니다.
https://www.dedoimedo.com/computers/grub-2.html
이 문제에 대해 공유하고 싶은 또 다른 것은 작동 할 수 있지만 microSD 카드가 매우 민감하다는 것을 깨닫는 솔루션입니다. 나는 내 자신의 Linux 이미지를 구축하고 있으며 이것을 빨리 배웠습니다. 가장 좋은 방법은 가능할 때마다 Qemu를 사용하는 것입니다.하지만 이전 파티션 테이블을 지우려면 드라이브에서 sgdisk --zap-all
를 실행 해보세요.
sgdisk --zap-all /dev/sdd
사실 처음에 오류가 발생하지만 오류가 아니라 읽기 전용 오류 인 경우 다시 실행할 수 있으며 마침내 모든 파티션 테이블이 새롭거나 오래된 것입니다.
그리고 Qemu를 사용하여 Raspberry를 에뮬레이션 할 수 있습니다. 표준 AMD / Intel 기반 PC의 Pi . 나는 그것을 추천 할 것입니다. 나는 이것이 원래 게시물과 관련된 것보다 더 많은 정보라는 것을 알고 있지만 이것이이 오류가 파생 된 방법이라고 생각합니다. 컨테이너 사용 기간입니다.
답변
작성된 내용에 따르면 GRUB를 설치하려는 것 같습니다. / dev / sda. 디스크를 마운트하고 싶지 않습니다.
다음을 찾고있을 것입니다. grub-install /dev/sda
GRUB man 페이지 참조하거나 시스템에서 man grub-install
를 사용할 수 있습니다. http://linux.die.net/man/8/grub-install
코멘트
- 이미 grub-install 명령 (dev.sda1에서)을 입력했지만 블록에 대해 이야기하는 동안 오류가 발생했습니다. 그리고 " grub-install –recheck와 함께 " cow " 오류가 발생했습니다. –root-directory = / mnt / dev / sda1 " 명령.
답변
실시간 USB 또는 기타 chroot 수단을 사용하여 grub을 다시 설치하거나 설치하려는이 문제로 어려움을 겪고있는 사람을 위해-몇 번이 문제를 처리했으며 이전에 문서화하는 것을 잊었습니다. .
문제는 grub이 소스 (/ boot) 또는 대상 (시스템과 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를 바인딩해야합니다.
코멘트
- 질문이 '이 아닌데
chroot
에 대해 말하는 이유 chroot ? - OP는 " 리눅스 민트가 포함 된 USB에서 실행 "라고 말합니다. 그것은 chroot입니다.
sda6
에서 부팅합니까? 내 답변이 여기 에서 도움이 되나요?/cow
가 Copy-on-write 파일 시스템은 CD 또는 USB에서 부팅 할 때/
에 마운트됩니다.