답변:
이 단계를 따르세요:
Live Linux 세션으로 부팅하십시오.
/
설치된 OS 의 파티션을/mnt
sudo mount /dev/sda6 /mnt
chroot
환경을 설정하십시오 .
sudo chroot /mnt
이제는 "가상"Linux 설치로 처리 /mnt
됩니다 /
. 이는 GRUB에 필요한 모든 파일 /boot
이 시스템 이 원하는 위치에 있으며 실제로 설치된 시스템을 실행하는 것처럼 GRUB을 설치할 수 있음을 의미합니다.
sudo update-grub
sudo grub-install /dev/sda
이제 재부팅하면 GRUB 메뉴가 정상적으로 나타납니다.
grub이 정식 경로를 해결할 수 없다고 말하면 존재하지 않거나 realpath()
실패했음을 의미합니다 .
이 경우 다음을 시도하십시오.
$ realpath /cow
$ ls -la /cow
두 명령 모두 "파일 또는 디렉토리를 찾을 수 없습니다"라고 표시되면 하나를 작성해야합니다.
두 번째 명령은 작동하지만 첫 번째 명령은 작동하지 않으면 왜 realpath()
작동하지 않는지 확인하십시오 . 이유 중 하나가 /proc
마운트되지 않았기 때문일 수 있습니다 . libc의 일부 구현에서는 /proc/self/fd
파일의 정식 경로를 얻는 데 사용됩니다.
작성된 내용에 따라 GRUB을 / dev / sda에 설치하려고하는 것 같습니다. 디스크를 마운트하지 않으려 고합니다.
당신은 아마 찾고 있습니다 :
grub-install /dev/sda
GRUB 매뉴얼 페이지를 참조하거나 man grub-install
시스템에서 사용할 수 있습니다 :
http://linux.die.net/man/8/grub-install
이 오류도 발생하며 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-grub
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
컨테이너 외부 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를 에뮬레이션 할 수 있습니다 . 나는 그것을 추천 할 것입니다. 나는 이것이 원래 게시물과 관련된 것보다 더 많은 정보라는 것을 알고 있지만,이 오류가 어떻게 파생 될 수 있다고 생각합니다. 컨테이너 시대입니다.
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 ''에 관한 것이 아닐 때 왜 이야기하고 있습니까?
sda6
되나요? 내 대답 이 도움이 되나요?