0%

Ubuntu内核修复以及grub的重新配置

  第一次用Hexo+Github搭建Blog,还是先写一篇伪技术文测试一下吧。之后我会陆续把自己之前的文章慢慢搬过来,至于什么时候能搬完,那我就不知道了。毕竟我的主页保持只有“主页尚在搭建,完工日期待定=。=”这句内容的状态也快两年了。

  使用Linux系统,/boot分区空间不足是一个很常见的问题。一般情况下,新的kernel推送个几次,/boot分区的空间就差不多交代了。为了释放/boot分区的空间,不再使用的kernel通常需要手动删除。清理kernel一直以来都是一项高危工作,稍有不慎就会导致系统奔溃。虽然没有什么问题是重装系统解决不了的,但是考虑到重装系统后需要重新配置系统环境,重装系统的工作量对于在之前系统上耕耘已久的用户显然不是一个小case。下面分享的kernel修复方法是之前折腾了大半天总结出来的,希望可以帮助到其他遇到类似问题的人。

  首先要根据所要修复的内核版本在 http://kernel.ubuntu.com/~kernel-ppa/mainline/ 找到对应的目录下载所需要的.deb文件。以v4.6-rc6-wily为例,修复64位Ubuntu系统需要下载下列文件:

linux-headers-4.6.0-040600rc6_4.6.0-040600rc6.201605012031_all.deb
linux-headers-4.6.0-040600rc6-generic_4.6.0-040600rc6.201605012031_amd64.deb
linux-image-4.6.0-040600rc6-generic_4.6.0-040600rc6.201605012031_amd64.deb

  使用Live-CD启动,将下载好的.deb文件复制到一个指定目录(e.g. 电脑系统盘root分区下的tmp目录)后,打开Terminal,输入如下命令:

1
2
3
4
5
6
7
8
9
10
mkdir /uroot
sudo su
mount /dev/sda2 /uroot #挂载原系统的root目录,以
mount /dev/sda3 /uroot/boot #挂载boot分区
mount --bind /proc /uroot/proc #绑定进程文件
mount --bind /dev /uroot/dev #绑定设备文件
mount --bind /sys /uroot/sys #绑定系统文件
chroot /uroot
cd /tmp
dpkg -i *.deb

  安装结束后重启系统即可。

  重装Ubuntu之后,grub启动界面会出现一个多余的选项。虽然这并不会影响系统的正常启动,但是对于饱受强迫症煎熬的人来说,它依旧是完全是无法接受的存在。Linux自带的efibootmgr为这个问题提供了方便的解决方案。

  首先使用Live-CD启动系统,在Terminal中输入如下命令,查看目前存在的grub选项。

1
sudo efibootmgr

  Terminal会输出类似下列的相关信息:

1
2
3
4
5
6
7
8
9
10
11
BootCurrent: 0001
Timeout: 1 seconds
BootOrder: 0001,0000,0006,0004,0005,0002,0003,0007
Boot0000* Windows Boot Manager
Boot0001* ubuntu
Boot0002* UEFI:CD/DVD Drive
Boot0003* UEFI:Removable Device
Boot0004* CD/DVD 驱动器
Boot0005* 硬盘
Boot0006* ubuntu
Boot0007* UEFI:Network Device

  可以看到第七个启动项(即Boot0006* ubuntu)是多余的,输入下列命令即可将其删除。

1
sudo efibootmgr -b 6 -B