マイコンピュータの1つでは、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
これが犯人のようです。スクリプトが機能し、すべてのコアを見つけて有効なグラブ構成を作成し(保存)、/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を再インストールしてすべてを正常に戻す必要があります。