내 컴퓨터 중 하나에서 dpkg가 grub의 설치/구성을 완료하지 못하고 다음 오류 메시지만 표시됩니다.
하위 프로세스 설치를 위한 설치 후 스크립트가 오류 종료 상태 255를 반환합니다.
전체 출력:
# dpkg --configure grub-pc
Setting up grub-pc (1.99-27+deb7u3) ...
device node not found
device node not found
device node not found
device node not found
Installation finished. No error reported.
Installation finished. No error reported.
dpkg: error processing grub-pc (--configure):
subprocess installed post-installation script returned error exit status 255
Errors were encountered while processing:
grub-pc
추가 단서를 제공하는 로그 파일에는 아무것도 없습니다.
일부 디버깅 옵션을 사용하여 dpkg를 실행하면 더 많은 정보를 확인할 수 있습니다.
# dpkg -D10113 --configure grub-pc
Setting up grub-pc (1.99-27+deb7u3) ...
D000002: fork/exec /var/lib/dpkg/info/grub-pc.postinst ( configure )
device node not found
device node not found
device node not found
device node not found
Installation finished. No error reported.
Installation finished. No error reported.
dpkg: error processing grub-pc (--configure):
subprocess installed post-installation script returned error exit status 255
D010000: trigproc_run_deferred
Errors were encountered while processing:
grub-pc
이제 문제가 스크립트 어딘가에 있다는 것을 알았지 /var/lib/dpkg/info/grub-pc.postinst configure
만 스크립트에는 자세한 내용이나 디버깅 옵션이 없는 것 같고 코드가 거의 700줄로 너무 커서 읽을 수 없습니다. 해당 스크립트는 어떤 호출도 하지 않으므로 exit 255
문제가 거기에 있지 않고 호출되는 다른 스크립트에 있다고 믿고 싶습니다.
커널 프로세스의 구성 작업도 실패합니다.
# dpkg --configure linux-image-3.16.0-0.bpo.4-amd64
Setting up linux-image-3.16.0-0.bpo.4-amd64 (3.16.39-1+deb8u1~bpo70+1) ...
vmlinuz(/boot/vmlinuz-3.16.0-0.bpo.4-amd64
) points to /boot/vmlinuz-3.16.0-0.bpo.4-amd64
(/boot/vmlinuz-3.16.0-0.bpo.4-amd64) -- doing nothing at /var/lib/dpkg/info/linux-image-3.16.0-0.bpo.4-amd64.postinst line 263.
initrd.img(/boot/initrd.img-3.16.0-0.bpo.4-amd64
) points to /boot/initrd.img-3.16.0-0.bpo.4-amd64
(/boot/initrd.img-3.16.0-0.bpo.4-amd64) -- doing nothing at /var/lib/dpkg/info/linux-image-3.16.0-0.bpo.4-amd64.postinst line 263.
/etc/kernel/postinst.d/initramfs-tools:
update-initramfs: Generating /boot/initrd.img-3.16.0-0.bpo.4-amd64
run-parts: /etc/kernel/postinst.d/zz-update-grub exited with return code 255
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.16.0-0.bpo.4-amd64.postinst line 634.
dpkg: error processing linux-image-3.16.0-0.bpo.4-amd64 (--configure):
subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
linux-image-3.16.0-0.bpo.4-amd64
라인 634
입력은 /var/lib/dpkg/info/linux-image-3.16.0-0.bpo.4-amd64.postinst
다음 명령으로 요약됩니다.
run-parts --report --exit-on-error --arg=3.16.0-0.bpo.4-amd64 --arg=/boot/vmlinuz-3.16.0-0.bpo.4-amd64 /etc/kernel/postinst.d
이 명령을 수동으로 실행하면 다음과 같은 결과가 발생합니다.
run-parts: /etc/kernel/postinst.d/zz-update-grub exited with return code 255
내가 아는 한, 이 스크립트는 검사를 수행한 다음 호출하는 래퍼일 뿐이며 update-grub
오류 없이 작동합니다.
update-grub
그냥 실행 중이므로 grub-mkconfig
이 명령을 실행하고 반환 값을 확인합니다.
# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.16.0-0.bpo.4-amd64
Found initrd image: /boot/initrd.img-3.16.0-0.bpo.4-amd64
Found linux image: /boot/vmlinuz-3.2.0-4-amd64
Found initrd image: /boot/initrd.img-3.2.0-4-amd64
# echo $?
255
이것이 범인인 것 같습니다. 스크립트가 작동하고 모든 코어를 찾고 유효한 grub 구성을 생성한 다음(저장 /boot/grub/grub.cfg.new
) 코드 255로 종료됩니다. 물론 디버깅 옵션은 없습니다.
문제를 계속 디버깅하려면 어떻게 해야 합니까?
도움이 될 수도 있고 그렇지 않을 수도 있는 추가 정보:
- 시스템이 debian wheezy를 실행 중입니다.
- GRUB 버전은 1.99-27+deb7u3입니다.
- 시스템에 mdraid가 있습니다.
- 이 시스템은 수년 동안 운영되어 왔으며 새로 설치된 것이 아닙니다. 이 오류는 최근에 나타났습니다.
- 확실하지는 않지만 결함이 있는 하드 드라이브를 교체한 후 이 오류가 나타나기 시작한 것 같습니다.
- grub 및 커널 패키지에 대한 구성 작업만 실패했습니다. 다른 모든 패키지는 오류 없이 설치할 수 있습니다.
나중에 질문하면 더 많은 정보를 얻을 수 있습니다.
zulu668:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sda4[2] sdb4[1]
1456504640 blocks super 1.2 [2/2] [UU]
md1 : active raid1 sda3[2] sdb3[1]
7996352 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda2[2] sdb2[1]
499392 blocks super 1.2 [2/2] [UU]
unused devices: <none>
zulu668:~# sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Oct 29 12:40:33 2014
Raid Level : raid1
Array Size : 499392 (487.77 MiB 511.38 MB)
Used Dev Size : 499392 (487.77 MiB 511.38 MB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Wed Mar 15 14:51:01 2017
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Name : zulu668:0 (local to host zulu668)
UUID : 22e14818:7754cf01:67287402:c31a3328
Events : 217
Number Major Minor RaidDevice State
2 8 2 0 active sync /dev/sda2
1 8 18 1 active sync /dev/sdb2
답변1
따라서 이 글을 작성하면서 문제의 범위를 좁히고 grub-mkconfig
디버깅 방법을 궁금해하게 되었습니다.
grub-mkconfig
grub.cfg
을 기본적으로 실행하는 쉘 스크립트입니다 /etc/grub.d
. set -e
처음에는 grub-mkconfig
"관리되지 않는 첫 번째 오류 시 중지"를 의미하는 명령이 있습니다. 문제는 grub.d 스크립트 중 하나의 실패로 인해 발생할 가능성이 높습니다.
먼저 범인을 알아봅시다. 달리기:
dash -vx grub-mkconfig -o /boot/grub/grub.cfg
dash
/bin/sh
, Bourne Shell 인터프리터는 실행하는 모든 행을 출력할 가능성이 높습니다 . 스크립트가 명령으로 실패할 수 있으므로 set -e
마지막 줄은 실패한 grub.d 첨자일 가능성이 높습니다. 나는 당신이 다음과 같은 것을 얻을 것이라고 생각합니다 :
+ echo ### BEGIN /etc/grub.d/99_buggy_script ###
+ /etc/grub.d/99_buggy_script
스크립트 이름 자체로는 무슨 일이 일어나고 있는지에 대한 충분한 증거를 제공하지 못할 수 있습니다. Bourne 쉘 스크립트이기도 하므로 동일한 방법으로 디버깅할 수 있습니다. grub.d 스크립트의 첫 번째 줄을 변경하세요.
#!/bin/sh
도착하다:
#!/bin/sh -vx
그리고 실행하세요 grub-mkconfig -o /boot/grub/grub.cfg
( dash -vx
더 이상 필요하지 않음). 얻을 수 있는 추적은 grub.d 스크립트에서 가져온 것입니다.
이제 문제가 분명해졌기를 바랍니다. 문제를 해결한 후에는 -vx
grub.d 첨자의 시작 부분에 있는 플래그를 제거하는 것을 잊지 마십시오 .
답변2
grub
RAID에 속한 모든 하드 드라이브에 설치 해야 한다는 내용을 읽었습니다 . 결함이 있는 하드 드라이브를 교체했으므로 다음 명령을 실행하여 확인할 수 있습니다.
dpkg-reconfigure grub-pc
섹션 에 들어가면 GRUB install devices
별표가 표시된 장치와 그렇지 않은 장치를 확인할 수 *
있으며 커서와 스페이스바를 사용하여 표시할 수 있습니다. (주요 장비 등은 모두 /dev/sda
표시 /dev/sdb
해야 /dev/sdc
함)
이 단계를 완료한 후에는 grub을 다시 설치하고 모든 것을 정상으로 되돌려야 합니다.