花样作死之误删Ubuntu内核

Posted by FridayLi on August 23, 2017

任何有点电脑使用经验的人都不会在脑子不抽风的情况下把自己windows系统的C盘给格了,但如果你对Linux系统不熟悉,则很可能在误打误撞下干出这样的傻事。接下来就分享一下我的作死历程……

起因

安装Python库总是离不开pip命令,但在Ubuntu系统下老提示我的pip版本是8.3,让我升级到最新的9.1, 但根据提示输入 pip install --upgrade pip 并没有什么卵用,Google之,发现解决办法:

1
2
3
4
5
apt-get install python3-pip           # 安装easy_install3
pip install --upgrade pip             # 获取最新版本pip源
apt-get remove python3-pip python-pip # 卸载自带的pip
easy_install3 pip                     # 升级到最新版pip
pip --version                         # 验证

这个方法后来被我证实是可行的。 但第一次执行时提示我boot空间不足,无法安装,继续Google, 发现一篇谜一样的教程, 里面一句话有很强的误导性,说linux-后面带image的是旧的内核,于是我照文中的方法把带image的全删掉了……
但其实image只是镜像的意思,如果把现在正在使用的版本的镜像也删掉的话,重启后会进不去Ubuntu系统。只剩下memory test选项和windows启动项(如果你装了双系统的话)。

问题与解决办法

上完班关机回家,开机,好惊喜啊,没Ubuntu系统选项了,上班时删掉镜像后因为没有重启所以一直可以正常使用(万幸,不然白天没法工作了),但重新开机时加载不了内核就不行了,赶紧用另一台闲置的电脑Google(真是成也Google败也Google)解决办法,万幸遇到同病相怜之人,也是因为看了那篇清理boot空间的教程……
描述

不过他文章中说的并不详细,加上参考另一篇文章最终解决了我的问题,现将解决办法记录如下:

所需材料

  1. Ubuntu安装U盘一个(已经制作好,不会的话可以自行百度)
  2. 一个可以联网的另一台电脑(需要下载内核,不大,50M左右) ####修复步骤
    1. 插上U盘启动电脑,选择U盘为第一启动项(不同电脑设置方法不同,可自行百度)
    2. 进入后,选择试用Ubuntu系统
    3. 挂载boot目录到U盘

    首先需要确定自己的boot目录在哪个分区,安装Ubuntu时boot一般只会分一两百M的大小空间,如果安装时没独立分区的话可以挂载根目录。 执行sudo fdisk -l 命令来查看各个分区大小,以此来判断自己的boot分区(或根分区),例如我boot分区为200M, 根分区为50G,根据下图可判断boot分区
    为/dev/sda5, 根分区(‘/’)为/dev/sda7。
    描述

接下来把root目录挂载(这样才能拷贝文件), 挂载命令如下:

1
2
sudo mkdir /media/guazai
sudo mount /dev/sdb5  /media/guazai  // 如果没给root单独分区则挂载根目录
4. 将Ubuntu安装盘内的vmlinuz.efi, initrd.lz文件拷贝到电脑的root目录
1
2
sudo cp   /media/cdrom/casper/vmlinuz.efi   /media/guazai //此处若挂载的是根目录则应为/media/guazai/boot
sudo cp   /media/cdrom/casper/initrd.lz     /media/guazai //此处若挂载的是根目录则应为/media/guazai/boot
5. 拔掉U盘, 重启。进入grub页面

电脑如果只安装Ubuntu的话开机不会显示grub菜单,可以在系统启动时按shift键进入grub。但是有时候时间太短不好进可以修改/etc/default/grub文件中的GRUB_HIDDEN_TIMEOUT的值为大于0的值,则在系统启动时会等待设置的时间再进入系统,这段时间shift或者esc进入grub,再按下c进入grub命令行;

6. 引导启动

在命令行输入ls –l,会列出所有的分区及相关的文件系统类型、分区起始位置、分区大小等等;同样,根据文件大小,判断boot目录和根目录对应的分区,如下图(修复时并未截图,这里就用网上的图了)
enter image description here

7. 执行以下命令:
1
2
3
4
set root=(hd0,msdos5)   // 这里应该是你的boot分区,若没有同样用根目录
linux /vmlinuz.efi root=UUID=xxxxxxxxxxxxxxxx  //UUID为上图中的UUID,对应的应该是根(/)分区的那一行的UUID
initrd /initrd.lz
boot 
8. 更新内核

boot后进入了系统, 如果鼠标和网络连接正常的情况下(hope so), 更新内核(否则重启后还是进不了系统)

1
2
 sudo apt-get install linux-image-x.x.x-xx-generic
 sudo apt-get install linux-headers-x.x.x-xx-generic

版本号可自行查看, 我的是4.8.12-040812,安装完成后重启系统,新内核就生效了。

9. 附加选项

不过如果你和我一样惨,boot进入原先的系统后,鼠标、网络和USB都不能用了(大写的惨!),那么还是有不就办法的,用能上网的电脑(如果是双系统可以先重启进入windows,下载对应的内核文件并拷入Ubuntu安装U盘, 继续重启,进入ubuntu 试用系统,挂载根目录(其它目录也行), 把U盘下的内核文件拷贝进根目录,拔掉U盘进入grub,输入步骤7的命令,重新进入原系统, 虽然鼠标、网络、USB不能用,但键盘一般还是能用的,Ctrl + Alt + T, 打开万能的shell, 输入以下命令:

1
2
3
4
cd /  //进入你拷贝内核文件的目录,不一定是根目录
sudo dpkg -i linux-headers-4.6.4-040604_4.6.4-040604.201607111332_all.deb
sudo dpkg -i linux-headers-4.6.4-040604-generic_4.6.4-040604.201607111332_amd64.deb
sudo dpkg -i linux-image-4.6.4-040604-generic_4.6.4-040604.201607111332_i386.deb

记得替换其中的内核文件为你自己的文件。然后,重启,万事大吉!(呼~)

教训

网上教程内容繁多,互相拷贝、缺乏考证者也不在少数,需要用辩证的眼光看待,不要盲从。

参考文章

  1. 清理boot空间
  2. 解药1
  3. 解药2
  4. 更新内核
  5. Ubuntu升级pip至最新版