霍格沃茨特快列车
Mkapakka's Hut
Ubuntu无法正常开机的一次修复记录

0. 严正声明

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

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

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

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

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

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

rain

小雨已经来了

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

back

回家的路上

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

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

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

2. 开机检查

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

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

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 检查一遍,避免灾难性的后果发生。

findU

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

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

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

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

点击ignore就好。

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

4. 进入LiveCD(USB)

插电,插盘,开机。

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

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然后进行了修复操作。

bootrepair

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

br1

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

br2

然后做一个新的引导

br3

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

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

smooth

正常的引导界面

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

4.3. 不登录修改root密码

这个时候就要派上Single User Mode

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

sg1

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

sg2

single和linux在同一行!

输入完后按下Ctrl+X来boot

sg3

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

sg4

开机成功!

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


Last modified on 2020-04-08