Back
Featured image of post Ubuntu无法正常开机的一次修复记录

Ubuntu无法正常开机的一次修复记录

启动盘制作与内核..修复?

0. 严正声明

封面来自我很喜欢的摄影博主阿木@A-mu_,原博传送门

要时刻记住本文的目的是为了学术交流(逃

昨晚翻来覆去想那些流氓博客爬虫问题,就顺手给图片都加上了@jukrb0x 的字样,未来或许有更先进的反爬方案。有比较酷的解决方案欢迎小伙伴给我留言或联系我

1. 在一个雨天带着清纯妹妹上门取货

三月二十七本来应该是个适合约会天朗气清的日子,傍晚将至下起了零星小雨。

朋友[@FlickerSoul]在正在今年开年这场战役下半场中为 MC 崛起之读书,三过家门而不入,是乎由我作为工具人售后服务上门维修。据了解应该是一台Ubuntu Server 18.04.4 LTS内网穿透失败,不明原因导致内核出错无法顺利开机,只能物理维护。

小雨已经来了
小雨已经来了

第一次在朋友不在家的时候去朋友家,有一个憨批妹妹恰逢认得去朋友家的路,就一起去了。

回家的路上
回家的路上

这雨确实弄的我差不多全身湿了,还好平常有带伞的习惯,不然妹妹就要一起淋湿了

当然,淋湿了就容易感冒,感冒就不好读书了,这不还特殊时期咱还是安全第一。

水文就水到这!正文内容开始!

2. 开机检查

拿到机器后先上电开机,这台 Samsung 电池年久失修,只能用 Adapter 持续供电。

看起来是内河(Kernel)炸了,也有可能是引导出错,对于我这种长得帅的还无法直接判断问题的根源。

kernelboom
kernelboom

这里可以用命令uname -sr或者uname -rs来查看系统名称以及编号,忘记截图了。这是一些uname的基本用法

uname -rs # 系统名称以及发行编号
uname -sr # 同上
uname -a # all 显示全部信息
uname -s # sysname 操作系统名称
uname -e # release 发行编号
uname -n # nodename 网络上的主机名称
uname -m # machine 打印处理器类型?我的输出是x86_64
uname -p # processor 处理器

自然想到的解决方案是修复或重装,修复 GRUB 引导,重装内核,最后不行就完全重装 Ubuntu(屡试不爽)

3. 制作启动盘

Windows 下有 PE (Preinstallation Environment),Ubuntu 有 LiveCD,因为我用的是 U 盘,所以也可以叫 LiveUSB 吧。

我的设备是 macOS 10.15,所以我直接用 Disk Utility 的命令行版本diskutil进行 USB 写入制作启动盘,Windows 下可以考虑使用Rufus进行制作,方法类似。

官方其实有给出一个图形化的启动盘制作教程,但需要多装一个软件,我嫌啰嗦就直接用终端操作了。

3.1. 下载系统

官方的下载地址是: 点击传送

当然因为速度原因,有很多的 mirrors(啊我只找到了网易的)

Netease Mirror: 点击传送

这台电脑本身是 Server,为了方便操作,我下载的镜像是 Desktop 版本的Ubuntu Desktop 18.04.4 LTS

根据这个镜像的大小,制作启动盘大概需要不小于 4GB的 U 盘

根据 Ubuntu 官方的Create a bootable USB stick on macOS中提到的要求只需要 A 2GB or larger USB stick/flash drive,我也有点迷惑

3.2. 镜像转换

首先先把下载好的 iso 文件转换为 img 文件,在这里用 hdutil 命令,我已经 cd 到了指定文件夹操作,所以文件路径直接用了文件名ubuntu-18.04.4-desktop-amd64.iso

$ hdiutil convert -format UDRW -o ubuntu.img ubuntu-18.04.4-desktop-amd64.iso

blog 的代码高亮对 shell 的支持没有很好,所以看着可能有点累

hdiutil 的用法,这里面的介绍太长了,我们只需要用到 convert 这个 verb

首先是我们要做一个 UDRW 格式(可以 read/write)的 img 镜像,-o后面接着是 outfile(输出文件的文件路径),再接着原来的镜像文件路径。

上面这串命令会在指定目录下生成一个叫做ubuntu.img.dmg的镜像文件

这会需要花一点时间来完成镜像转换,与此同时可以新开一个 Tab,使用 diskutil list 来查看 U 盘挂载的位置

$ diskutil list

在这里找到你插入的 U 盘,记住他的路径是/dev/disk5,接下来关于磁盘擦除和重写的操作都是不可逆的,一定要记清楚你插入的 U 盘此刻的路径,如果有重新插拔需要重新使用diskutil list 检查一遍,避免灾难性的后果发生。

我这里为了演示使用了一个新的 U 盘,实际上并不是这个
我这里为了演示使用了一个新的 U 盘,实际上并不是这个

这里还有点小波兰🇵🇱,我使用了一个旧 U 盘(外壳都被扒了),发现在执行格式化操作的时候好像 U 盘容量变小了,当时夜深很困,没有再三确认,总之是因为 U 盘没有足够大小写入 Ubuntu

shitty-udisk
shitty-udisk

当事 U 盘

实际上我的 convert 速度很快…
实际上我的 convert 速度很快…

我有看到有人说在转换镜像之后需要再mv ubuntu.iso.dmg ubuntu.iso来改写文件后缀为 iso,但小生觉得 duck 不必。(上文有提到产生的文件名会是ubuntu.iso.dmg

3.3. 卸载指定 U 盘

根据上一步找到 U 盘挂载的路径,然后卸载它。

$ diskutil unmountDisk /dev/disk3

众所周知,Linux 只有一个根目录/,当你插入 U 盘到设备上时,系统自动执行了挂载操作,把 U 盘挂载到了一个地方,让你能操作它,这个地方就是/dev/disk3

3.4. 写入 U 盘

这一步是大招步骤,用 dd 命令,关键一步,记得使用sudo来执行 root 命令

同样的,我在镜像文件的目录下执行,镜像文件路径=镜像文件名

$ sudo dd if=ubuntu.img.dmg of=/dev/rdisk2 bs=1m

if后面跟着镜像文件位置,of后面跟上你 U 盘的路径,注意是rdisk3不是disk3,r 的意思是 raw

if = input file

of = output file

bs = block size

bs 是 Block Size 的缩写,bs 是衡量一次读取、写入和转换字节的单位,bs=1m即位块大小等于 1 MegaByte(一兆字节)

这个步骤会花费漫长的时间,同时不会有任何的提示,你只需要泡杯咖啡耐心等待。

操作成功后会有一个XXX bytes transferred in XXX secs (XXX bytes/sec)这样的提示,还会有一个像下图这样的弹窗

成功人士的弹窗(狗头微笑)
成功人士的弹窗(狗头微笑)

点击 ignore 就好。

然后就可以弹出这个 U 盘了:diskutil eject dev/disk3,但小生还是觉得 duck 不必,直接拔了(逃

4. 进入 LiveCD(USB)

插电,插盘,开机。

一开机就提示我按F2进入 BIOS,修改启动顺序为装有 Ubuntu 的 U 盘。

liveCD
liveCD

不知道为啥触控板无法使用,还不能判断是触控板坏了 or“驱动问题”,我外接了一个鼠标。

其实不用鼠标仅靠键盘的 Tab 和上下左右也能完成大部分鼠标的操作,前提是你要有足够的耐心。

选 Try Ubuntu,然后就可以进入 Ubuntu 的桌面了

先让他连上网,恰好无线网卡正常工作,连接 Wi-Fi 后就可以接下来的的真正的操作了。

4.1. 解决问题的两种方案

在 LiveCD 里面原来系统的文件都可以查看保存,那么本着能不重装就不重装的观点,只需要修复内核可以解决。

第一种是使用带有 GUI 的 Boot Repair,第二种是用 Terminal 慢慢修。我在不知道哪种方法能成功的情况下选择一边下载 Boot Repair 一边查找更专业的解决方式

4.2. Boot Repair

因为某些地方的网络问题,可以选择修改软件源来加速下载。(可选)

实际上我原本不会使用这个解决方案,考虑到 Boot Repair 可能没法顺利解决问题,Terminal 又有点过于麻烦了所以我决定双管齐下。后来因为 Boot-Repair 在一段时间无进度后被我 Force Quit,但在我重度拖延下它死灰复燃弹出继续的页面…结果真的单车变摩托

Boot-Repair 有一份在 Ubuntu Community 的documentation

我选择使用 Terminal 进行安装

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair

上面这个命令执行完后会自动打开 Boot Repair

打开后我查看了一下 Advanced Options,把 GRUB location 改到了sda2(Ubuntu 18.04.4 LTS),并且在 GRUB options 中选定了 Purge and reinstall 然后进行了修复操作。

 

结果在这之后的界面卡了好久,我就右键它把它 Quit 了开始重装内核的操作,由于我的摸鱼症没有完成重装内核的操作,良久之后它突然弹出了这个东西:

 

看起来是在 purge 之前的引导文件

 

然后做一个新的引导

 

最后在这里把原来装有 Ubuntu 的硬盘钩上

reboot 后就出现了熟悉的味道了

正常的引导界面
正常的引导界面

当然之后就是正常的启动了 Ubuntu Server,还遇到了些小问题,比如朋友没有告诉我 root 的密码,无法继续后续的操作。

4.3. 不登录修改 root 密码

这个时候就要派上 Single User Mode

在 GRUB 引导出现的时候按下e进入编辑模式

 

找到以 linux 开头的一行,在他的最末尾加上single,注意要和前面的内容空出一格

single 和 linux 在同一行!
single 和 linux 在同一行!

输入完后按下Ctrl+X来 boot

 

然后就会让你输入新的 root 密码,之后就可以开机了

开机成功!
开机成功!

这时就算是修复了开机异常的问题,关于如何重装内核或许会在稍后补上。由于篇幅,关于开机后的其他操作(内网穿透等故事)就留给之后的文章(快逃