阅读 63

fedora U盘修复grub引导

U盘启动

挂载设备

在挂载设备之前,需要先了解自己硬盘的各个分区都是什么。

fdisk -l查看分区表

fdisk -l
Disk /dev/nvme0n1:477 GiB,512110190592 字节,1000215216 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:ED987A6A-2997-422F-956E-A2A1B8B09A29

设备                起点       末尾      扇区  大小 类型
/dev/nvme0n1p1      2048     923647    921600  450M Windows 恢复环境
/dev/nvme0n1p2    923648    1128447    204800  100M EFI 系统
/dev/nvme0n1p3   1128448    1161215     32768   16M Microsoft 保留
/dev/nvme0n1p4   1161216  159685601 158524386 75.6G Microsoft 基本数据
/dev/nvme0n1p5 159686656  161351679   1665024  813M Windows 恢复环境
/dev/nvme0n1p6 161353728  580782079 419428352  200G Microsoft 基本数据
/dev/nvme0n1p7 580782080  582879231   2097152    1G Linux 文件系统
/dev/nvme0n1p8 582879232 1000214527 417335296  199G Linux LVM


Disk /dev/mapper/fedora-root:50 GiB,53687091200 字节,104857600 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


Disk /dev/mapper/fedora-swap:7.9 GiB,8417968128 字节,16441344 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


Disk /dev/mapper/fedora-home:141.2 GiB,151569563648 字节,296034304 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
复制代码

可以看出,我的root分区是:/dev/mapper/fedora-root(逻辑分区),

我的boot分区是:/dev/nvme0n1p7,

我的EFI分区是:/dev/nvme0n1p2

好了,开始挂载,记住一定要将dev proc sys efivars pts 同步到U盘上,否则grub2-install命令报错。

挂载根目录
mount /dev/mapper/fedora-root /mnt

挂载boot目录
mount /dev/nvme0n1p7 /mnt/boot

绑定dev
mount --bind /dev /mnt/dev

挂载efi
mount /dev/nvme0n1p2 /mnt/boot/efi

挂载pts(控制台设备文件所在的目录)
mount -t devpts  /dev/devtps /mnt/dev/pts

挂载proc (系统信息目录)
mount -t proc /proc /mnt/proc

挂载sys(驱动和设备)
mount -t sysfs /sys /mnt/sys

挂载efivars(里面放的是efi的环境变量,有它才能使用efibootmgr命令)
        例子:
            [fantj@localhost pts]$ efibootmgr 
            BootCurrent: 0000
            Timeout: 2 seconds
            BootOrder: 0000,0004
            Boot0000* fedora  #我的linux
            Boot0004* Windows Boot Manager  #我的winin10

mount -t efivars /sys/firmware/efi/efivars  /mnt/sys/firmware/efi/efivars
复制代码

切换根目录&&执行grub安装

切换根目录: chroot /mnt

重新安装grub2:grub2-install /dev/nvme0n1 注意后面是你所要安装到硬盘名。

不出意外会提示你No Error,修复成功。重启机器。

善后,两个如果

情景1

重启机器后,如果成功进入图形界面,执行grub2-mkconfig -o /boot/grub2/grub.cfg重写grub配置。grub2会自动将你电脑中的所有引导倒入,包括win10。

[fantj@localhost pts]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
[sudo] fantj 的密码:
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.18.16-300.fc29.x86_64
Found initrd image: /boot/initramfs-4.18.16-300.fc29.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-8e1d87ce6b9c43e0847ebd0fbe40a68b
Found initrd image: /boot/initramfs-0-rescue-8e1d87ce6b9c43e0847ebd0fbe40a68b.img
Found Windows Boot Manager on
 #Win10
/dev/nvme0n1p2@/EFI/Microsoft/Boot/bootmgfw.efi  
Adding boot menu entry for EFI firmware configuration
done
复制代码
情景2

如果进入乱码报错界面you are in emergency mode ...,证明没有找到你的硬盘上ESP分区,我就是这样,因为我之前格式化过ESP分区,所以uuid会有变化,但是/etc/fstab里还是旧的uuid挂载该分区,所以需要将该分区手动挂载上。

报错日志一般是:Starting File System Check on /dev/disk/by-uuid/xxxx-xxxx...timed out...文件系统检测超时。

手动修改/etc/fstab,将ESP分区挂到/boot/efi下。

/dev/nvme0n1p2          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
复制代码

欢迎关注公众号

总GitHub地址: github.com/fantj2016/j…