如何建立公司网站链接,网站建设的提升,软件开发包括网站开发吗,金融seo公司前言我们产品是支持UEFI安装的#xff0c;在很多款机器上都正常的安装。今日在浪潮服务器和技嘉服务器上都遇到一次#xff0c;可以安装#xff0c;但是无法正常启动。所以我们必须要解决此问题#xff0c;来支持更多的硬件。基础知识EFI的全称是#xff0c;Extensible Fi…前言我们产品是支持UEFI安装的在很多款机器上都正常的安装。今日在浪潮服务器和技嘉服务器上都遇到一次可以安装但是无法正常启动。所以我们必须要解决此问题来支持更多的硬件。基础知识EFI的全称是Extensible Firmware Interface UEFI是Unified EFI。我们以安装好的Linux系统为例如何查看我们机器使用的是UEFI还是Legacy呢答案是查看如下文件是否存在/sys/firmware/efi下面的输出分别是以Legacy和UEFI模式的情况下各自的输出情况。# 没有efi 目录Legacy模式rootnode243:/sys/firmware# lltotal 0drwxr-xr-x 4 root root 0 Jul 2 11:16 ./dr-xr-xr-x 12 root root 0 Jul 2 11:15 ../drwxr-xr-x 5 root root 0 Jul 2 16:43 acpi/drwxr-xr-x 12 root root 0 Jul 2 16:43 memmap/# 有efi 目录 UEFI模式rootnode245:/sys/firmware# lltotal 0drwxr-xr-x 5 root root 0 Jul 2 16:33 ./dr-xr-xr-x 12 root root 0 Jul 2 11:29 ../drwxr-xr-x 5 root root 0 Jul 2 16:43 acpi/drwxr-xr-x 5 root root 0 Jul 2 16:33 efi/drwxr-xr-x 16 root root 0 Jul 2 16:43 memmap/在我们的系统盘上有单独的一个分区是boot 分区rootnode245:/sys/firmware# parted /dev/sda printModel: AVAGO MR9361-8i (scsi)Disk /dev/sda: 16.0TBSector size (logical/physical): 512B/4096BPartition Table: gptDisk Flags:Number Start End Size File system Name Flags1 262kB 538MB 538MB fat32 EFI boot, esp2 538MB 103GB 102GB ext43 103GB 131GB 27.6GB linux-swap(v1)4 131GB 16.0TB 15.9TB在fstab中也会有相应的条目rootnode245:/sys/firmware# cat /etc/fstab# /etc/fstab: static file system information.## Use blkid to print the universally unique identifier for a# device; this may be used with UUID as a more robust way to name devices# that works even if disks are added and removed. See fstab(5).## # / was on /dev/sda2 during installationUUIDefc5dbbf-8eb5-45ba-94b0-ce5253ed5d8d / ext4 errorsremount-ro 0 1# /boot/efi was on /dev/sda1 during installationUUID92A1-DB43 /boot/efi vfat defaults 0 1# swap was on /dev/sda3 during installationUUID59a84533-d365-4e06-8a55-a2fa63b7e82e none swap sw 0 0如何查看我们的引导项呢这个efibootmgr我们系统默认自带如果安装模式是EFI的话。其中该命令会自动的显示当前所有启动项包括启动顺序。BootCurrent表示我们当前的系统是哪个启动项。因此我们当前的系统是Boot0000* grubHD(1,200,100600,3a92c3e7-adc5-4fcc-8197-ac21b84b601d)File(\EFI\grub\grubx64.efi)对于我们的系统来讲EFI分区占据sda的第一个分区rootnode245:/sys/firmware# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 14.6T 0 disk├─sda1 8:1 0 512.8M 0 part /boot/efi├─sda2 8:2 0 95.4G 0 part /├─sda3 8:3 0 25.7G 0 part [SWAP]└─sda4 8:4 0 14.4T 0 part其中 HD(1,200,100600, 3a92c3e7-adc5-4fcc-8197-ac21b84b601d)1 : partition number200 : partition offset100600 : partition size3a92c3e7-adc5-4fcc-8197-ac21b84b601d : partition GUID:rootnode245:/sys/firmware# ll /dev/disk/by-partlabel/total 0drwxr-xr-x 2 root root 180 Jul 2 17:35 ./drwxr-xr-x 9 root root 180 Jul 2 11:29 ../lrwxrwxrwx 1 root root 10 Jul 2 11:29 EFI - ../../sda1....rootnode245:/sys/firmware# ll /dev/disk/by-partuuid...lrwxrwxrwx 1 root root 10 Jul 2 11:29 3a92c3e7-adc5-4fcc-8197-ac21b84b601d - ../../sda1....紧接着的是如下内容File(\EFI\grub\grubx64.efi)这指定了我们的OS bootloader 这个文件的类型如下rootnode245:/boot/efi/EFI/grub# file grubx64.efigrubx64.efi: PE32 executable (EFI application) x86-64 (stripped to external PDB), forMS Windows一般来讲正常安装好的系统某个启动条目后面都有File指定某个文件我们本次探索技嘉设备安装好了之后并不能正确的启动我们发现启动条目后面并没有指定对应的File我们看到上面输出中并没有指定File我们怀疑这也是为什么技嘉设备不能正常启动的原因尽管我们在/boot/efi/EFI/grub/存在 grubx64.efi文件。Fallback Path (回退路径)debian帮助文档中提到一些机器的EFI可能存在bugWeak EFI implementation only recognizes the fallback bootloader某些比较脆弱的EFI实现并不能认识我们的bootloader导致启动的时候他会查找默认的回退路径。UEFI 规范定义了一种“回退”路径 (Fallback path)用于启动此类启动管理器项其工作原理类似于 BIOS 驱动器启动它会在标准位置查找某些启动装载程序代码。但是其中的细节和 BIOS 不同。当尝试以这种方式启动时固件真正执行的操作相当简单。固件会遍历磁盘上的每个 EFI 系统分区(按照磁盘上的分区顺序)。在 ESP 内固件将查找位于特定位置的具有特定名称的文件。在 x86-64 PC 上固件会查找文件 \EFI\BOOT\BOOTx64.EFI。固件实际查找的是 \EFI\BOOT\BOOT{计算机类型简称}.EFI其中“x64”是 x86-64 PC 的“计算机类型简称”。文件名还有可能是 BOOTIA32.EFI (x86-32)、BOOTIA64.EFI (Itanium)、BOOTARM.EFI(AArch32即32位ARM)和 BOOTAA64.EFI(AArch64即64位ARM)。然后固件将执行找到的第一个有效文件(当然文件需要符合UEFI规范中定义的可执行格式)。回到我们的情况技嘉的机器可能只认 /boot/efi/EFI/BOOT/BOOTx64.EFI 这个回退路径因此昨晚我和胜国将我们自己的文件 /boot/efi/EFI/grub/grubx64.efi 拷贝到了 回退路径这样之前不能启动的路径就可以自如的启动了。所以对于我们的问题比较正确的处理方法是grub-install执行完毕后 efibootmgr -vgrep grubx64.efi 如果可以找到我们的File那么什么也不做如果找不到则执行紧急补救不错即cp我们的文件到回退路径。efibootmgr这个工具非常有用可以创建新的启动项创建新的启动项–create (-c) 表示要创建条目–part (-p) 用于提供ESP所在的分区号–disk (-d) 用于提供ESP所在的磁盘名称–label (-L) 用于提供条目名称–loader (-l) 用于提供要加载的EFI image删除某启动项可以使用-B参数删除某个启动项-b | --bootnum XXXXModify BootXXXX (hex)-B | --delete-bootnumDelete bootnum改变启动顺序-o | --bootorder XXXX,YYYY,ZZZZExplicitly set BootOrder (hex). Any value from 0 to FFFF is accepted so long as it corresponds to an existing Boot#### variable, and zero padding is not required.出现在前面的启动项启动优先级要高。启用禁用启动项efibootmgr -a -b X 启用标号为X的启动项efibootmgr -A -b X 禁用标号为X的启动项参考文献