• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jqtmviyu
V2EX  ›  程序员

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

  •  
  •   jqtmviyu · Mar 15, 2023 · 1519 views
    This topic created in 1172 days ago, the information mentioned may be changed or developed.

    问题描述

    使用 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????

    Supplement 1  ·  Mar 15, 2023

    过了一天, 左思右想, 又对比了下 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
    

    我尝试过删掉/EFI/BOOT/目录, 并不能启动

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

    5 replies    2023-03-15 20:13:36 +08:00
    webcape233
        1
    webcape233  
       Mar 15, 2023 via iPhone
    做个 livecd ,里面挂上各种分区,然后创建 grub ,就像安装时那样,岂不简单
    jqtmviyu
        2
    jqtmviyu  
    OP
       Mar 15, 2023
    @webcape233 试过了, 就是在 livecd 里挂分区, 用 arch-chroot 进去重新整, 没搞好
    webcape233
        3
    webcape233  
       Mar 15, 2023 via iPhone
    arch-chroot 后 pacstrap /mnt base linux linux-firmware 这个尝试覆盖安装下呢,
    另外 fstab 步骤没看到,arch-chroot 前 genfstab -U /mnt > /mnt/etc/fstab 。 如果使用了 lvm 分区需要激活 lvm2 hooks 。
    kokutou
        4
    kokutou  
       Mar 15, 2023 via Android
    fstab
    grub
    firmware
    jqtmviyu
        5
    jqtmviyu  
    OP
       Mar 15, 2023
    @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
    ```

    有没有大佬科普下是不是我理解错了.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2643 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 12:23 · PVG 20:23 · LAX 05:23 · JFK 08:23
    ♥ Do have faith in what you're doing.