我来这里寻求帮助,因为每次我进行系统更新时,终端上都会出现错误,而且我无法将内核更新到较新的版本。
这里我发布了命令“sudo apt-get update”的输出:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
linux-image-3.2.0-37-generic linux-image-3.2.0-48-generic linux-image-3.2.0-51-generic linux-image-3.2.0-52-generic
0 upgraded, 0 newly installed, 4 to remove and 0 not upgraded.
6 not fully installed or removed.
After this operation, 599 MB disk space will be freed.
Do you want to continue [Y/n]? Y
(Reading database ... 313423 files and directories currently installed.)
Removing linux-image-3.2.0-37-generic ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-37-generic /boot/vmlinuz-3.2.0-37-generic
update-initramfs: Deleting /boot/initrd.img-3.2.0-37-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-37-generic /boot/vmlinuz-3.2.0-37-generic
Generating grub.cfg ...
/etc/grub.d/00_header: 148: /etc/grub.d/00_header: Syntax error: Missing '}'
run-parts: /etc/kernel/postrm.d/zz-update-grub exited with return code 2
Failed to process /etc/kernel/postrm.d at /var/lib/dpkg/info/linux-image-3.2.0-37-generic.postrm line 328.
dpkg: error processing linux-image-3.2.0-37-generic (--remove):
subprocess installed post-removal script returned error exit status 1
Removing linux-image-3.2.0-48-generic ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-48-generic /boot/vmlinuz-3.2.0-48-generic
update-initramfs: Deleting /boot/initrd.img-3.2.0-48-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-48-generic /boot/vmlinuz-3.2.0-48-generic
Generating grub.cfg ...
/etc/grub.d/00_header: 148: /etc/grub.d/00_header: Syntax error: Missing '}'
run-parts: /etc/kernel/postrm.d/zz-update-grub exited with return code 2
Failed to process /etc/kernel/postrm.d at /var/lib/dpkg/info/linux-image-3.2.0-48-generic.postrm line 328.
dpkg: error processing linux-image-3.2.0-48-generic (--remove):
subprocess installed post-removal script returned error exit status 1
Removing linux-image-3.2.0-51-generic ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-51-generic /boot/vmlinuz-3.2.0-51-generic
update-initramfs: Deleting /boot/initrd.img-3.2.0-51-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-51-generic /boot/vmlinuz-3.2.0-51-generic
Generating grub.cfg ...
/etc/grub.d/00_header: 148: /etc/grub.d/00_header: Syntax error: Missing '}'
run-parts: /etc/kernel/postrm.d/zz-update-grub exited with return code 2
Failed to process /etc/kernel/postrm.d at /var/lib/dpkg/info/linux-image-3.2.0-51-generic.postrm line 328.
dpkg: error processing linux-image-3.2.0-51-generic (--remove):
subprocess installed post-removal script returned error exit status 1
Removing linux-image-3.2.0-52-generic ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-52-generic /boot/vmlinuz-3.2.0-52-generic
update-initramfs: Deleting /boot/initrd.img-3.2.0-52-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-52-generic /boot/vmlinuz-3.2.0-52-generic
Generating grub.cfg ...
/etc/grub.d/00_header: 148: /etc/grub.d/00_header: Syntax error: Missing '}'
run-parts: /etc/kernel/postrm.d/zz-update-grub exited with return code 2
Failed to process /etc/kernel/postrm.d at /var/lib/dpkg/info/linux-image-3.2.0-52-generic.postrm line 328.
dpkg: error processing linux-image-3.2.0-52-generic (--remove):
subprocess installed post-removal script returned error exit status 1
No apport report written because MaxReports is reached already
Errors were encountered while processing:
linux-image-3.2.0-37-generic
linux-image-3.2.0-48-generic
linux-image-3.2.0-51-generic
linux-image-3.2.0-52-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)
我还尝试删除当前未使用的内核,实际上我使用的是内核 3.2.0-49-generic。她遵循命令“sudo apt-get purge linux-image-3.2.0-37-generic linux-image-3.2.0-48-generic linux-image-3.2.0-51-generic linux-image-3.2.0-52-generic”的输出:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
linux-image-3.2.0-37-generic linux-image-3.2.0-48-generic linux-image-3.2.0-51-generic linux-image-3.2.0-52-generic
0 upgraded, 0 newly installed, 4 to remove and 0 not upgraded.
6 not fully installed or removed.
After this operation, 599 MB disk space will be freed.
Do you want to continue [Y/n]? Y
(Reading database ... 313423 files and directories currently installed.)
Removing linux-image-3.2.0-37-generic ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-37-generic /boot/vmlinuz-3.2.0-37-generic
update-initramfs: Deleting /boot/initrd.img-3.2.0-37-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-37-generic /boot/vmlinuz-3.2.0-37-generic
Generating grub.cfg ...
/etc/grub.d/00_header: 148: /etc/grub.d/00_header: Syntax error: Missing '}'
run-parts: /etc/kernel/postrm.d/zz-update-grub exited with return code 2
Failed to process /etc/kernel/postrm.d at /var/lib/dpkg/info/linux-image-3.2.0-37-generic.postrm line 328.
dpkg: error processing linux-image-3.2.0-37-generic (--remove):
subprocess installed post-removal script returned error exit status 1
Removing linux-image-3.2.0-48-generic ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-48-generic /boot/vmlinuz-3.2.0-48-generic
update-initramfs: Deleting /boot/initrd.img-3.2.0-48-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-48-generic /boot/vmlinuz-3.2.0-48-generic
Generating grub.cfg ...
/etc/grub.d/00_header: 148: /etc/grub.d/00_header: Syntax error: Missing '}'
run-parts: /etc/kernel/postrm.d/zz-update-grub exited with return code 2
Failed to process /etc/kernel/postrm.d at /var/lib/dpkg/info/linux-image-3.2.0-48-generic.postrm line 328.
dpkg: error processing linux-image-3.2.0-48-generic (--remove):
subprocess installed post-removal script returned error exit status 1
Removing linux-image-3.2.0-51-generic ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-51-generic /boot/vmlinuz-3.2.0-51-generic
update-initramfs: Deleting /boot/initrd.img-3.2.0-51-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-51-generic /boot/vmlinuz-3.2.0-51-generic
Generating grub.cfg ...
/etc/grub.d/00_header: 148: /etc/grub.d/00_header: Syntax error: Missing '}'
run-parts: /etc/kernel/postrm.d/zz-update-grub exited with return code 2
Failed to process /etc/kernel/postrm.d at /var/lib/dpkg/info/linux-image-3.2.0-51-generic.postrm line 328.
dpkg: error processing linux-image-3.2.0-51-generic (--remove):
subprocess installed post-removal script returned error exit status 1
Removing linux-image-3.2.0-52-generic ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-52-generic /boot/vmlinuz-3.2.0-52-generic
update-initramfs: Deleting /boot/initrd.img-3.2.0-52-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-52-generic /boot/vmlinuz-3.2.0-52-generic
Generating grub.cfg ...
/etc/grub.d/00_header: 148: /etc/grub.d/00_header: Syntax error: Missing '}'
run-parts: /etc/kernel/postrm.d/zz-update-grub exited with return code 2
Failed to process /etc/kernel/postrm.d at /var/lib/dpkg/info/linux-image-3.2.0-52-generic.postrm line 328.
dpkg: error processing linux-image-3.2.0-52-generic (--remove):
subprocess installed post-removal script returned error exit status 1
No apport report written because MaxReports is reached already
Errors were encountered while processing:
linux-image-3.2.0-37-generic
linux-image-3.2.0-48-generic
linux-image-3.2.0-51-generic
linux-image-3.2.0-52-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)
之后,启动命令“dpkg --list | grep linux-image”,我得到:
rH linux-image-3.2.0-37-generic 3.2.0-37.58 Linux kernel image for version 3.2.0 on 64 bit x86 SMP
rH linux-image-3.2.0-48-generic 3.2.0-48.74 Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii linux-image-3.2.0-49-generic 3.2.0-49.75 Linux kernel image for version 3.2.0 on 64 bit x86 SMP
rH linux-image-3.2.0-51-generic 3.2.0-51.77 Linux kernel image for version 3.2.0 on 64 bit x86 SMP
rH linux-image-3.2.0-52-generic 3.2.0-52.78 Linux kernel image for version 3.2.0 on 64 bit x86 SMP
显然未使用的内核仍然存在。最后,我还发布了“sudo update-grub”命令的结果:
Generating grub.cfg ...
/etc/grub.d/00_header: 148: /etc/grub.d/00_header: Syntax error: Missing '}'
并且文件“/etc/grub.d/00_header”的内容导致语法错误:
#! /bin/sh
set -e
# grub-mkconfig helper script.
# Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc.
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GRUB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GRUB. If not, see <http://www.gnu.org/licenses/>.
transform="s,x,x,"
prefix="/usr"
exec_prefix="${prefix}"
datarootdir="${prefix}/share"
locale_dir=`echo ${GRUB_PREFIX}/locale | sed ${transform}`
grub_lang=`echo $LANG | cut -d . -f 1`
. "${datarootdir}/grub/grub-mkconfig_lib"
# Do this as early as possible, since other commands might depend on it.
# (e.g. the `loadfont' command might need lvm or raid modules)
for i in ${GRUB_PRELOAD_MODULES} ; do
echo "insmod $i"
done
if [ "x${GRUB_DEFAULT}" = "x" ] ; then GRUB_DEFAULT=0 ; fi
if [ "x${GRUB_DEFAULT}" = "xsaved" ] ; then GRUB_DEFAULT='${saved_entry}' ; fi
if [ "x${GRUB_TIMEOUT}" = "x" ] ; then GRUB_TIMEOUT=5 ; fi
if [ "x${GRUB_GFXMODE}" = "x" ] ; then GRUB_GFXMODE=auto ; fi
if [ "x${GRUB_DEFAULT_BUTTON}" = "x" ] ; then GRUB_DEFAULT_BUTTON="$GRUB_DEFAULT" ; fi
if [ "x${GRUB_DEFAULT_BUTTON}" = "xsaved" ] ; then GRUB_DEFAULT_BUTTON='${saved_entry}' ; fi
if [ "x${GRUB_TIMEOUT_BUTTON}" = "x" ] ; then GRUB_TIMEOUT_BUTTON="$GRUB_TIMEOUT" ; fi
cat << EOF
if [ -s \$prefix/grubenv ]; then
set have_grubenv=true
load_env
fi
EOF
if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then
cat <<EOF
if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then
set default="${GRUB_DEFAULT_BUTTON}"
else
set default="${GRUB_DEFAULT}"
fi
EOF
else
cat <<EOF
set default="${GRUB_DEFAULT}"
EOF
fi
cat <<EOF
if [ "\${prev_saved_entry}" ]; then
set saved_entry="\${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "\${boot_once}" ]; then
saved_entry="\${chosen}"
save_env saved_entry
fi
}
function recordfail {
set recordfail=1
if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi
}
function load_video {
EOF
if [ -n "${GRUB_VIDEO_BACKEND}" ]; then
cat <<EOF
insmod ${GRUB_VIDEO_BACKEND}
EOF
else
# Insert all available backends; GRUB will use the most appropriate.
have_video=0;
for backend in $(cat "${GRUB_PREFIX}/video.lst"); do
have_video=1;
cat <<EOF
insmod ${backend}
EOF
done
if [ x$have_video = x0 ]; then
echo "true"
fi
fi
cat <<EOF
}
EOF
serial=0;
gfxterm=0;
for x in ${GRUB_TERMINAL_INPUT} ${GRUB_TERMINAL_OUTPUT}; do
if [ xserial = "x$x" ]; then
serial=1;
fi
if [ xgfxterm = "x$x" ]; then
gfxterm=1;
fi
done
if [ "x$serial" = x1 ]; then
if ! test -e "${GRUB_PREFIX}/serial.mod" ; then
echo "Serial terminal not available on this platform." >&2 ; exit 1
fi
if [ "x${GRUB_SERIAL_COMMAND}" = "x" ] ; then
grub_warn "Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default parameters will be used."
GRUB_SERIAL_COMMAND=serial
fi
echo "${GRUB_SERIAL_COMMAND}"
fi
if [ "x$gfxterm" = x1 ]; then
# Make the font accessible
prepare_grub_to_access_device `${grub_probe} --target=device "${GRUB_FONT_PATH}"`
cat << EOF
if loadfont `make_system_path_relative_to_its_root "${GRUB_FONT_PATH}"` ; then
set gfxmode=${GRUB_GFXMODE}
load_video
insmod gfxterm
EOF
# Gettext variables and module
if [ "x${LANG}" != "xC" ] && [ -d "${locale_dir}" ] ; then
prepare_grub_to_access_device $(${grub_probe} --target=device ${locale_dir}) | sed -e "s/^/ /"
cat << EOF
set locale_dir=(\$root)$(make_system_path_relative_to_its_root ${locale_dir})
set lang=${grub_lang
感谢大家的帮助:)
答案1
/etc/grub.d/00_header: 148: /etc/grub.d/00_header: 语法错误:缺少“}”
快速修复:以 root 身份打开文件,转到读取的最末尾set lang=${grub_lang
并在那里添加}
,因此最后一行应该是:
set lang=${grub_lang}
有人在玩 grub 脚本,现在遇到了错误。解决这个问题的最佳方法是什么?重新安装 grub:
sudo apt-get --reinstall install grub*
该文件应该被替换,如果没有,则先删除它,然后再次运行上述命令:
sudo rm /etc/grub.d/00_header
sudo apt-get --reinstall install grub*