ubuntu重建ESP引导

加固态的时候,把windows完全安装在了固态上,然后就把原来的C盘直接格式化,连带着旧的引导分区都给格式化没了,后来就没法启动Ubuntu。
要恢复引导,不是简单的修复,从ESP分区里链接上ubuntu的efi启动就行,必须得重建ubuntu的ESP引导。实际环境是:

ESP分区:

1
2
3
4
- EFI/
- boot/ //efi启动文件
- Microsoft/ //各种字体图标的资源文件和boot内的启动efi文件
- (ubuntu/) //现在是没有的,目标是生成这个文件夹,只要有这个文件夹就一切好办

可以看到根本没有ubuntu的引导文件,所以网上说的refind,easyUEFI等等是不行的。

要重建ubuntu的引导分区,那么就得先进入ubuntu,然后利用ubuntu自己的系统来重建。

grub命令进入ubuntu

但正是苦于没有引导进不去ubuntu,所以就需要手动慢慢的来找到入口,怎么找,用grub。
可以直接做一个grub的U盘,也可以把ubuntu的iso刻录到U盘里,利用其自带的grub来进行。以ubuntu的U盘镜像为例。
选择U盘启动,进入后按C进入grub的命令行。
先用ls看下自己的硬盘结构,找到自己的ubuntu分区,如果不确定的话可以用cat命令的补全来查看.
我因为加了固态,所以有hd0,hd1,和hd2.先根据分区数量确定了hd2是机械盘,然后用

1
cat (hd2,...TAB

的补全,发现msdos9的格式是ext*,所以就确定了msdos9是我的ubuntu主分区.
接着,就可以设置根文件夹了.

1
set root=(hd2,9) //指定/boot所在分区

然后执行

1
2
3
4
linux /boot/vmli... ro root=/dev/sdb9 //设定内核和根分区,这里有提示出2个版本,一个是36,一个34,我选择了36.
//sdb9的意思是我硬盘的第9个分区,sd是sata口接的,b是linux读取时顺序分配的标号,我的固态是sda,机械是sdb.
initrd /initrd... //补全后是initrd.img,init ramdisk,设定系统加载
boot //自动重启

有省略号的地方进行tab补全就好.

我做的时候,有几次tab补全没用,后来是用u盘试装了下ubuntu,然后在里面的终端中这样

1
2
sudo mount /dev/sdb9 /mnt
sudo grup-install --boot-directory =/mnt/boot/dev/sda //提示失败,具体原因忘了,好像是efi怎么了,然后我就退出重启,进入grup,重新试了下tab,就好使了,不知道什么原因

计算机重启后直接进入到ubuntu,这时执行

1
2
3
4
5
6
7
8
9
10
sudo grub-install -v
[sudo] jacean 的密码:
grub-install:信息: executing modprobe efivars 2>/dev/null.
grub-install:信息: Looking for /sys/firmware/efi ...
grub-install:信息: ...found.
grub-install:信息: ... but x86_64-efi platform not available.
grub-install:信息: ... not found. Looking for /proc/device-tree ...
grub-install:信息: ... not found.
Installing for i386-pc platform.
grub-install:错误: install device isn't specified.

仍然报错.然后就想着用boot-repair.

安装boot-repair

1
2
3
4
5
sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair
sudo boot-repair

bootrepair自己都提示要等好几分钟,所以就只能等了。
注意这中间会有提示输入给出的终端命令来移除就得grub和重装新的grub,照着做完后点击弹出窗口的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
```
已成功修复启动。
请纸录以下URL:
http://paste.ubuntu.com/18152255/
如果您仍然遇到引导问题,请在此 URL 处留言:
boot.repair@gmail.com 或您最喜爱的论坛。
现在您可以重新启动计算机。
别忘了在BIOS中设置从sdb (500GB)磁盘启动
[操作系统正在使用中 - Ubuntu 15.10]的引导文件距磁盘头部太远,你的BIOS可能无法检测到它们。 您可以创建一个/boot分区然后重试 (EXT4, >200MB, 磁盘起始位置). 这可以通过诸如 gParted 等工具来操作。 然后在 [引导修复]的[单独的/boot分区]中选择该分区。 (https://help.ubuntu.com/community/BootPartition)
If your computer reboots directly into Windows, try to change the boot order in your BIOS.
If your BIOS does not allow to change the boot order, change the default boot entry of the Windows bootloader.
For example you can boot into Windows, then type the following command in an admin command prompt:
bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi

不用管这个,直接确认,然后重启。
重启之后会发现启动项有很多个,不过ubuntu和ubuntu是存在的。还有我之前做的refind的尝试中的efi启动文件。进入windows用dg删掉之前多余的东西,把esp里的EFI文件夹恢复本来面貌。
然后,进入ubuntu

1
sudo update-grub

重新更新下grub,可以看到之前的废品已经没有了。但是,还有很多windows boot manager之类的启动项,重复又难看,为了保持清爽,可以

1
sudo gedit /boot/grub/grub.cfg

在这个文件里面把不需要的注释掉,只留下想要的.
但是,这又一个缺点就是,如文件开头所述

1
2
3
4
5
6
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

这个文件是根据grub.d和grub这两个文件生成的,改动这个,如果执行grub update或是其他一些更新指令,都会让改动消失恢复默认.所以可酌情去修改grub文件和grub.d文件夹下的文件.可以设置默认启动项,设置前后景色,设置图标等等.

文章目录
  1. 1. grub命令进入ubuntu
  2. 2. 安装boot-repair
,