请教关于使用 tar 还原系统的问题(主要是关于 grub 引导)

2023-03-15 06:18:30 +08:00
 jqtmviyu

问题描述

使用 tar 命令还原系统搞不定 grub 引导,启动报错

尝试解决

正在看 arch wiki 和各种教程, 看得头大, 搞了一个晚上都没搞定

有概念但不清楚:

1.分区 uid 发生变化,需要修改 grub 相关信息 2.需要重建 grub 引导 3.需要重新挂载分区, 分区 uid 也发生变化

过程

  1. 用 tar 备份/
  2. 格盘重装其他系统
  3. 不满意删掉想还原
  4. liveCD 下重新分区, 分区格式和原来一样,但调整了大小
  5. 挂载分区, 用 tar 还原,创建排除备份的文件夹
  6. 搞不定启动

系统为 arch(endeavouros)

分区情况为:

/dev/sda1 ==> /boot/efi     fat32/esp
/dev/sda2 ==> /  			xfs
/dev/sda3 ==> /home  		xfs
tar cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=backup.tgz --exclude=/mnt --exclude=/sys --exclude=/media --exclude=/run /
# 挂分区并还原
mount /dev/sda2 /mnt
mkdir /mnt/home
mount /dev/sda3 /mnt/home
mkdir /mnt/boot/efi
mount /dev/sta1 /mnt/boot/efi
tar xvpzf /path/to/backup.tar.gz -C /mnt --numeric-owner
# 修复引导
sudo arch-chroot /mnt
grub-install —target=x86_64-efi —efi-directory=/boot/efi
grub-mkconfig -o /boot/grub/grub.cfg

# 修复挂载分区 uuid
blkid
# 更新三个分区的 uuid
vim /etc/fstab

# 新建排除备份的文件夹
mkdir proc
mkdir mnt
mkdir sys
mkdir run

exit
sudo umount /mnt/home
sudo unmout /mnt/boot/efi
sudo unmout /mnt
reboot

启动报错

/boot/grub/x86_64-efi/normal.mod not found
grub rescue 

临时进入系统

set
cmdpath=(hd3,gpt3)/EFI/BOOT
prefix=(hd0,gpt3)/boot/grub
root=hd0,gpt3

ls
ls (hd0,gpt2)/boot/grub
set root=hd0,gpt2
set prefix=(hd0,gpt2)/boot/grub
insmod normal
normal

进入系统后

sudo pacman -S grub
sudo mv /boot/grub/grub.cfg /boot/grub/grub.cfg.bak
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=EndeavourOS
sudo grub-mkconfig -o /boot/grub/grub.cfg
# 检查 cfg,发现是 gpt2 了

但为什么重启还是同样错误, root 还是 gpt3????

1077 次点击
所在节点    程序员
5 条回复
webcape233
2023-03-15 06:38:39 +08:00
做个 livecd ,里面挂上各种分区,然后创建 grub ,就像安装时那样,岂不简单
jqtmviyu
2023-03-15 06:48:54 +08:00
@webcape233 试过了, 就是在 livecd 里挂分区, 用 arch-chroot 进去重新整, 没搞好
webcape233
2023-03-15 07:24:06 +08:00
arch-chroot 后 pacstrap /mnt base linux linux-firmware 这个尝试覆盖安装下呢,
另外 fstab 步骤没看到,arch-chroot 前 genfstab -U /mnt > /mnt/etc/fstab 。 如果使用了 lvm 分区需要激活 lvm2 hooks 。
kokutou
2023-03-15 08:32:20 +08:00
fstab
grub
firmware
jqtmviyu
2023-03-15 20:13:36 +08:00
@webcape233
过了一天, 左思右想, 又对比了下 OC 引导的文件, 终于发现问题了.
关键是还是出在 grub-install 这里:

```
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=EndeavourOS
```

它会在 `/boot/efi` 也就是 /dev/sda1 里创建一个 /EFI/EndeavourOS/grubx64.efi, 而不是去更新 /EFI/BOOT/bootx64.efi

我的解决方法是

```
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=BOOT
```

然后进 pe, 把 grubx64.efi 改成 bootx64.efi, 再用 DG 分区工具重新添加 efi 启动项, 启动分区指向 /dev/sda2

我怀疑是主板 bios 只能识别 /EFI/BOOT/bootx64.efi 又搜了下, 发现带上 --removable 就会忽略 bootloader-id 而是在默认目录生成

即:
```
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=EndeavourOS --removable
```

有没有大佬科普下是不是我理解错了.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/924050

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX