双系统下Arch Linux启动项丢失,如何恢复,systemd-boot

1. 前言

        linux系统:UEFI 引导管理器为systemd-boot,不是grub。Arch 发行版。

        Windows10一个更新蓝屏加恢复把我的Arch Linux的系统引导选项删除了,好一个流氓微软。好一个某小岛贵宾Bill。

        该解决办法不具有普适性,因为导致Linux无法启动的原因有很多种。

2. 如何恢复

        关于Arch Linux,新手都常被教导要多读那个Fxxxing manual,解决办法就在其中。

  •  如果你拥有一个安装Arch的U盘,挂载原有系统到安装镜像上。X,Y和 Z应该为系统安装的位置,使用 fdisk 查看
mount /dev/sdXY  /mnt

mount /dev/sdXZ  /mnt/boot

        然后使用

arch-chroot /mnt         #切换到电脑本地系统上

        尝试使用下面命令后重启看看能否恢复

bootctl update
mkinitcpio -P

        如果没有恢复尝试使用下面命令创建新的启动项后,再重启看能否恢复,X,Y为系统安装硬盘位置和分区

efibootmgr -c -d /dev/sdX -p Y -l /EFI/systemd/systemd-bootx64.efi -L "Arch Linux"

        如果还没有恢复,那么想办法进入UEFI shell界面。

        如果你有安装u盘,那么可以从安装选项中选择并进入。如果没有,某些电脑可以使用快捷键进入UEFI shell。

  • 使用UEFI shell恢复启动项

        使用bcfg命令进行创建启动项,使用UEFI shell有一定风险,具体命令请参考以下链接

Arch Wiki: systemd-booticon-default.png?t=N7T8https://wiki.archlinuxcn.org/wiki/Systemd-boot#%E6%8E%92%E9%99%A4%E9%97%AE%E9%A2%98

Arch Wiki: UEFIicon-default.png?t=N7T8https://wiki.archlinuxcn.org/wiki/UEFI#UEFI_Shell

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `gd` 结构体是 `U-Boot` 中的全局数据结构。它包含了 `U-Boot` 运行期间所需要的一些全局变量和指针,例如内存大小、环境变量指针等。 下面是一个 `U-Boot` 中的 `gd` 结构体的定义: ```c struct global_data { ulong flags; /* state flags for this record */ ulong baudrate; /* console baudrate */ ulong cpu_clk; /* CPU clock in Hz */ ulong bus_clk; /* Bus clock in Hz */ ulong mem_clk; /* Mem clock in Hz */ ulong arch_number; /* unique id for this board */ ulong ram_size; /* RAM size */ ulong flash_size; /* Flash size */ ulong flash_offset; /* start of FLASH */ int env_valid; /* true if env area is valid */ char env_buf[ENV_SIZE]; /* buffer for getenv() */ ulong env_addr; /* Address of Environment struct */ ulong env_sect_size; /* size of one complete sector */ ulong env_sectors; /* number of sectors available */ uchar env_flash[CFG_ENV_ADDR_REDUND] __aligned(ARCH_DMA_MINALIGN); /* Image environment in FLASH */ uchar env_redund[CFG_ENV_ADDR_REDUND] __aligned(ARCH_DMA_MINALIGN); /* Image redundant environment in FLASH*/ bd_t *bd; /* board description pointer */ }; ``` `gd` 结构体中的变量和指针的具体含义可以参考注释。 ### 回答2: Linux中的gd结构体是指全局数据结构(global data structure),用于存储截至到当前时间点的系统全局信息。gd结构体位于内存中的一个固定地址,它是Linux内核启动时创建的,包含了许多与系统运行相关的信息。gd结构体中包含了物理内存的起始地址和大小、设备树的地址、文件系统根目录、驱动程序的初始化函数列表等。 而U-boot中的gd结构体是指全局数据结构(global data structure),用于存储与启动过程相关的全局信息。U-boot是一种开源的嵌入式系统引导加载器,用于加载运行操作系统或其他应用程序。gd结构体存储了关于启动和引导过程的重要信息,如内存布局、启动设备、命令行参数、环境变量等。gd结构体是在U-boot启动时动态创建的,通过它可以在运行过程中获取和设置各种全局变量,以支持系统的引导和启动流程。 无论是在Linux还是U-boot中,gd结构体都扮演着重要的角色,它提供了一个全局的数据存储空间,方便在系统运行过程中存储和访问各种全局变量。通过gd结构体,可以在系统的整个生命周期内记录和获取运行时的全局信息,为系统的正常运行和用户的操作提供了必要的数据支持。 ### 回答3: gd结构体是Linux内核中的一个重要数据结构,它在内核初始化期间被创建,用于管理全局数据。它定义在头文件"include/linux/gd.h"中。gd结构体包含了许多字段,下面是一些重要的字段及其功能: 1. flags:包含了一些标志位,用于表示一些系统状态信息,比如是启动时的标志。 2. env_addr:存储着环境变量的起始地址。 3. env_valid:标志着环境变量的有效性,为1时表示有效。 4. ram_base、ram_size:存储着内存的起始地址和大小。 5. arch:用于存储体系结构相关的信息。 6. baudrate:串口通信的波特率。 7. bootfile:引导该系统的启动文件名。 8. boot_device:标志着启动设备的类型和编号。 9. lcd_color_index:存储了LCD显示颜色索引。 除了上述字段外,gd结构体还包含了一些用于存储引导时加载的设备树、已加载内核的前一级地址以及其他一些系统配置信息的字段。 而在U-boot中,也有类似的gd结构体用于管理全局数据。U-boot的gd结构体提供了与Linux内核中的gd结构体类似的功能,并且额外包含一些U-boot特有的字段。这些字段用于记录U-boot启动的相关信息,比如启动设备类型和编号、启动设备的起始地址、U-boot的启动参数等。 总的来说,gd结构体在Linux和U-boot中是非常重要的数据结构,它们提供了全局数据的管理和存储,方便操作系统和引导程序进行相关的启动和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值