系统经过几次kernel升级后,/boot下会有多个 kernel的文件,我的/boot本来就不大,因此可以将一些旧kernel卸载掉,以释放磁盘空间.

查看kernel的安装情况

方法如下:

dpkg --get-selections|grep linux

例如得到如下输出:

libselinux1 

                   install
linux-headers-2.6.24-16                install
linux-headers-2.6.24-16-generic            install
linux-headers-2.6.24-17                install
linux-headers-2.6.24-17-generic            install
linux-headers-2.6.24-18                install
linux-headers-2.6.24-18-generic            install
linux-headers-2.6.24-19                install
linux-headers-2.6.24-19-generic            install
linux-headers-generic                install
linux-image-2.6.24-16-generic            deinstall
linux-image-2.6.24-17-generic            deinstall
linux-image-2.6.24-18-generic            install
linux-image-2.6.24-19-generic            install

linux-libc-dev                    install
linux-restricted-modules-2.6.24-16-generic    deinstall
linux-restricted-modules-2.6.24-17-generic    deinstall
linux-restricted-modules-2.6.24-18-generic    install
linux-restricted-modules-2.6.24-19-generic    install
linux-restricted-modules-common            install
linux-sound-base                install
linux-ubuntu-modules-2.6.24-16-generic        deinstall
linux-ubuntu-modules-2.6.24-17-generic        deinstall
linux-ubuntu-modules-2.6.24-18-generic        install
linux-ubuntu-modules-2.6.24-19-generic        install
util-linux                    install
util-linux-locales                install

其中,类似"linux-image-xxx-generic"的是我们主要关注的.

上面的例子显示:

linux-image-2.6.24-16-generic            deinstall // 已卸载
linux-image-2.6.24-17-generic            deinstall // 已卸载
linux-image-2.6.24-18-generic            install // 已安装
linux-image-2.6.24-19-generic            install // 已安装

卸载某个kernel

方法如下:

sudo apt-get remove linux-image-xxx-generic

这个命令会:

  • 除了卸载linux-image-xxx-generic外,还会卸载linux-restricted-modules-xxx-generic和linux-ubuntu-modules-xxx-generic,因此释放的磁盘空间不仅限于/boot
  • 自动更新grub的启动菜单(就是开机时,你看到的启动菜单),把里面相应的条目予以删除
例如:

sudo apt-get remove linux-image-2.6.24-18-generic

输出如下:

正在读取软件包列表... 完成
正在分析软件包的依赖关系树      
读取状态信息... 完成            
下列软件包将被【卸载】:
  linux-image-2.6.24-18-generic linux-restricted-modules-2.6.24-18-generic
  linux-ubuntu-modules-2.6.24-18-generic
共升级了 0 个软件包,新安装了 0 个软件包,要卸载 3 个软件包,有 0 个软件未被升级。
操作完成后,会释放 126MB 的磁盘空间。
您希望继续执行吗?[Y/n]

选 Y,则将会卸载linux-image-2.6.24-18-generic, linux-restricted-modules-2.6.24-18-generic 和 linux-ubuntu-modules-2.6.24-18-generic,并将启动菜单的下列条目予以删除:

Ubuntu 8.04, kernel 2.6.24-18-generic
Ubuntu 8.04, kernel 2.6.24-18-generic (recovery mode)

需要注意的是,被卸载的某个kernel对应的启动菜单条目在进行卸载操作时必须存在,否则将导致dpkg程序崩溃错误.

更新menu.list

sudo update-grub

我之前因为嫌启动菜单太长,手工注释了几个,结果就发生了此错误.此时,把那些注释掉的条目恢复后,再次sudo apt-get remove linux-image-xxx-generic,就可以了.