update-grub
오류 메시지와 함께 실패
# update-grub
bash: update-grub: command not found
@GAD3R 출력
# [ -d /sys/firmware/efi ] && echo EFI || echo legacy
legacy
참고 1amd64 CD iso 설치 프로그램을 사용하여 기본 설치를 사용하여 Debian 10 Buster Alpha 3 버전(Xfce)을 설치했습니다(제거 print server
및 추가 제외 ssh server
).
노트 2저는 루트 계정( su root
)을 사용하고 있습니다.
답변1
솔루션(최고 우선)
su - root
대신su root
- 최고의 솔루션입니다(Rui에게 감사드립니다)- /etc/environment 또는 ~/.bashrc 또는 유사한 구성 파일에서 일반 사용자에 대한 경로를 확장합니다.
- 명시적으로 명령을 호출합니다. 이 솔루션을 사용하려면 sbin에서 다른 명령을 호출하는 모든 스크립트를 수정해야 합니다(이것은 비실용적이지만 문제 해결 섹션에 예제가 있습니다).
발견하다
이는 PATH가 매우 이상한 방식으로 작동하기 때문에 발생합니다(실제로 설계된 대로 작동함).
regular user login
-> 환경 경로에 /usr/sbin이 포함되어 있지 않습니다 =>보다:설계된 대로 작동하며 매우 논리적입니다.su root
-> 관리자 권한이 있지만 환경에 /usr/sbin:/sbin이 부족합니다 =>보다:설계된 대로 작동하지만 의미가 없습니다.루트 액세스 권한이 있는 계정은 바이너리에 경로를 수동으로 추가하지 않고도 sbin에서 명령을 실행할 수 있어야 합니다.su - root
-> 관리자 권한, 해당 경로의 /usr/sbin =>보다:설계된 대로 작동하며 매우 논리적입니다.
더 많은 배경
/etc/login.defs에는 두 개의 PATH가 정의되어 있지만 시작하거나 su -
ENV_PATH su - root
를 얻지 않는 한. 실제 사용자의 환경을 보존하기 위해 의도적으로 설계된 것이라는 것을 알고 있지만 이 경우 성공 후 "일반 사용자" 경로 /usr/sbin
에 자동으로 추가되지 않는 이유가 정말 혼란스럽습니다./sbin
su root
# cat /etc/login.defs |grep PATH=
ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
문제 해결
update-grub
에서 명령을 찾았습니다 /usr/sbin
.
# find / -name update-grub
/usr/sbin/update-grub
다음 오류 메시지를 보려면 실행하세요.
# /usr/sbin/update-grub
/usr/sbin/update-grub: 4: exec: grub-mkconfig: not found
조금 검색한 결과 grub-mkconfig
아래에서 찾았습니다 /usr/sbin/grub-mkconfig
. 그리고 update-grub
대본이 어떻게 생겼는지 볼까요 ?
#cat /usr/sbin/update-grub |grep grub-mkconfig
exec grub-mkconfig -o /boot/grub/grub.cfg "$@"
grub-mkconfig
명시적 경로를 통해 호출되도록 /usr/sbin/update-grub을 수정하세요 ...
exec /usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg "$@"
...그리고 update-grub
명시적인 경로와 tada를 사용하여 호출했는데 작동했습니다!
# /usr/sbin/update-grub
Generating grub configuration file ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-4.18.0-2-amd64
Found initrd image: /boot/initrd.img-4.18.0-2-amd64
Found linux image: /boot/vmlinuz-4.16.0-2-amd64
Found initrd image: /boot/initrd.img-4.16.0-2-amd64
done
결론적으로
PATH에 관한 내용이어야 합니다.
답변2
이 방법:
#sudo update-grub
이 명령은 루트로 실행해야 합니다.
답변3
먼저 로컬 패키지 목록을 업데이트하세요.
sudo apt update && sudo apt upgrade
올바른 부팅 모드를 찾으세요:
[ -d /sys/firmware/efi ] && echo EFI || echo legacy
grub-legacy
그런 다음 이전 패키지와 efi용 grub 패키지를 강제로 다시 설치합니다 grub-efi
(부팅 모드가 EFI라고 가정합니다).
sudo apt install --reinstall grub-efi
sudo apt install grub-common
문제가 여전히 해결되지 않으면 다음을 시도해 보십시오.
sudo grub-mkconfig -o /boot/grub/grub.cfg
update-grub
grub-mkconfig
이 명령은 단순히 도구를 실행하여 grub.cfg 파일을 생성하는 스크립트입니다 . Archlinux GRUB 보기문서
인용하다:
답변4
강제로 다시 설치할 수 있습니다 grub
.
sudo apt-get install --reinstall grub