保存时间:2026/4/3 01:34:31
free命令显示内存总量正确仅说明系统识别了物理内存,但HugePages 是否启用需单独验证。以下是详细分析和操作指南:cat /proc/meminfo | grep -i huge
HugePages_Total:已分配的 HugePages 数量HugePages_Free:可用的 HugePages 数量AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Total为 0,说明未启用 HugePages。free命令无法直接反映 HugePages 状态。总HugePages数量 = 模型内存占用 / HugePage大小sudo sysctl -w vm.nr_hugepages=167500
cat /proc/meminfo | grep -i huge,检查HugePages_Total是否变为 167500。sudo nano /etc/sysctl.conf
vm.nr_hugepages = 167500
sudo sysctl -p
# 总HugePages占用 = 167500 × 2 MB = 335 GB
# 剩余内存需 >= 系统其他进程需求(建议预留至少200 GB)
--mlock参数强制使用 HugePages:./main -m model.gguf --mlock ...
free命令无法验证 HugePages 是否启用,需通过/proc/meminfo检查。sudo sysctl -w vm.nr_hugepages=XXX/etc/sysctl.conf并执行sudo sysctl -p--mlock参数。huge TLB数目huge TLB显示的 348160000KB 可能是系统中与大页相关的某种内存总量统计,但仅从这个数字较难直接判断是否绝对正确,它可能与您设定的大页数量及系统内存配置等多种因素有关。不过一般来说,如果计算合理且系统支持,这个数字本身可能是合理的。HugePages_Total和HugePages_FreeHugePages_Total显示为 170000 表示您已成功为系统分配了 170000 个大页。HugePages_Free也为 170000 说明目前这些大页都处于未使用状态。--use-hugepages或-H等类似的命令行参数来明确指定使用 HugePages。LD_PRELOAD环境变量来加载与 HugePages 相关的库,或者设置MALLOC_ARENA_MAX等与内存分配相关的环境变量来配合 HugePages 的使用。不过具体需要设置哪些环境变量以及如何设置,要根据 Olama 的具体实现来确定。config.ini或类似的文件。在配置文件中查找是否有关于内存使用、HugePages 等相关的配置项,将其设置为启用 HugePages 的相关参数。htop或top等查看程序的内存使用情况,观察是否有大页被分配和使用。也可以结合/proc/meminfo中的 HugePages 相关指标来判断 Olama 是否成功使用了 HugePages。lsblk命令:该命令可以列出系统中的所有块设备,包括硬盘、分区等。在插入新硬盘后,执行该命令,若新硬盘被识别,会显示相应的设备节点,如sda、sdb等。udevadm命令:udevadm是用于管理udev设备管理器的工具。可以执行udevadm trigger --subsystem-match=block --action=add命令来触发udev重新扫描块设备,促使系统识别新插入的硬盘。smartctl命令:若服务器已安装smartctl,可使用它来检查硬盘的健康状态和详细信息。例如,smartctl -i /dev/sdX(将/dev/sdX替换为实际的新硬盘设备节点)可以显示新硬盘的型号、序列号等信息,确认是否为新插入的硬盘。journalctl命令:系统日志中会记录设备的插入和识别信息。执行journalctl -xe命令,在日志中查找与新硬盘相关的记录,如sdX设备的识别信息、驱动加载信息等,以确定系统是否正确识别了新硬盘以及是否存在相关的错误或警告信息。omreport或storcli来对 RAID 进行配置和管理,以让操作系统能够识别和使用新硬盘。Ctrl+R进入 RAID 配置工具。Ctrl+N切换到Ctrl Mgmt(控制器管理),查看各个物理磁盘的单独情况,新插入的硬盘通常会标记为Foreign。Foreign,将光标移至该硬盘所在行,按F2,选择Foreign,再选择Foreign Config,然后选择Clear来清除外来磁盘标记,使新硬盘变为Ready状态。Controller 0上按F2,选择Create New VD。选择需要配置的 RAID 级别,如 RAID0、RAID1、RAID5 等,按回车确认。将光标移至Physical Disks列表中,上下移动至需要选择的硬盘位置,按空格键来选择新硬盘。选择完硬盘后按Tab键,将光标移至VD Size栏,可以手动设定虚拟磁盘的大小,设置完成后选择OK完成创建。F2,选择Fast Init对虚拟磁盘进行初始化。等待初始化成功后,虚拟磁盘的配置完成。Esc键退出 RAID 配置界面,系统会提示按Ctrl+Alt+Del重启服务器。服务器重启后,操作系统应该能够识别新配置的硬盘。foreign状态的 SAS 硬盘改为ready状态,不需要将已有的处于online状态的虚拟磁盘offline,可以按照以下步骤操作:Ctrl+R进入 RAID 卡 BIOS 设置界面。Ctrl+N切换到PDMgmt(物理磁盘管理)界面,查看新硬盘的状态,此时新硬盘应该显示为foreign。foreign状态的新硬盘所在行,按F2键,选择Foreign Config,再选择Clear。按提示选择Yes确认操作,即可将硬盘状态改为ready。ready状态了。如果要将新硬盘加入到现有的虚拟磁盘组中,需要谨慎操作,因为这可能涉及到数据的重新同步和配置更改。一般来说,如果现有的虚拟磁盘有足够的空间容纳新硬盘,可以在虚拟磁盘管理界面中选择扩展虚拟磁盘,并按照提示将新硬盘添加到虚拟磁盘组中。如果不确定如何操作,建议先备份重要数据,并联系戴尔技术支持人员或专业的系统管理员进行指导。Ctrl+R进入 RAID 控制器的配置界面。F2键,选择Delete VD进行删除操作。Ctrl+N切换到VD Mgmt(虚拟磁盘管理)界面,然后按F2键,选择Create New VD。F2进入系统设置,选择 “设备设置”,再选择 “RAID 控制器”,进入虚拟磁盘管理界面。Ctrl+R进入 RAID 配置界面操作,也可以在 BIOS 中操作,以下为你分别介绍:Ctrl+R进入 RAID 配置界面Ctrl+R进入配置界面。Ctrl+N或Ctrl+P切换到VD Mgmt(虚拟磁盘管理)界面。F2键,选择 “Reconfigure VD”(重新配置虚拟磁盘)。Tab键将光标移至 “OK” 处,按回车键确认。F2进入 BIOS 设置界面,选择 “设备设置”,再选择 “RAID 控制器”。Ctrl+N或Ctrl+P切换到VD Mgmt界面,然后按F2键,选择Create New VD来创建新的虚拟磁盘。Ctrl+R进入配置界面。Ctrl+N或Ctrl+P切换到VD Mgmt界面。F2键,选择 “Reconfigure VD”。Tab键,将光标移至 “OK” 处,按回车键确认。F2进入BIOS设置界面。/dev/sda,添加新磁盘并重新配置虚拟磁盘组后,通常不会出现新的/dev/sdb设备来单独表示新添加的物理磁盘。因为在RAID 0模式下,数据是条带化分布在所有参与的物理磁盘上,整个虚拟磁盘组被视为一个逻辑存储设备。操作系统看到的仍然是原来的/dev/sda,但这个设备对应的虚拟磁盘组容量已经增加,包含了新添加物理磁盘的空间,系统会将其作为一个整体的存储设备来使用和管理,而不是将新磁盘识别为一个独立的设备。Ctrl+R进入RAID配置界面。找到要初始化的虚拟磁盘,将光标移至该磁盘上,按F2键,查看是否有“Fast Init”(快速初始化)选项。如果有,选择该选项即可进行快速初始化。sudo -i切换到root权限,使用lsblk命令可列出系统中的所有块设备信息,包括硬盘。若要查看更详细的硬盘信息,可使用fdisk -l或smartctl -i /dev/sdX(将“sdX”替换为实际的硬盘设备名称)。/dev/hugepages,然后将需要使用大页的文件或数据放置在这个挂载点下。mmap系统调用并指定MAP_HUGETLB标志时,就表示希望使用大页来映射文件或内存区域。mmap来存数据:hugepages来指定系统预留的大页数量。例如,在/etc/sysctl.conf文件中添加或修改vm.nr_hugepages = [数量],然后执行sysctl -p使配置生效。mkdir /dev/hugepages。mount -t hugetlbfs nodev /dev/hugepages命令将Huge TLBFS挂载到该目录。mmap将文件映射到进程地址空间,然后通过内存操作将数据复制到Huge TLBFS挂载点对应的内存区域。不过,这需要确保映射时使用了MAP_HUGETLB标志且满足页面大小对齐要求。posix_memalign函数分配对齐的大页内存,再进行数据写入。numactl工具,它可以用于在指定的内存节点上分配大页内存等操作,帮助管理和使用大页。但具体使用哪种方法和工具,要根据实际的应用需求和场景来选择。hugetlbfs文件系统管理的内存区域中,尽量减少不必要的额外数据拷贝:#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#define HUGE_PAGE_SIZE 2097152 // 2MB, 大页大小
int main() {
int file_fd, huge_fd;
struct stat file_stat;
void *file_data, *huge_data;
off_t file_size;
// 打开普通文件
file_fd = open("your_ordinary_file.txt", O_RDONLY);
if (file_fd == -1) {
perror("Failed to open ordinary file");
return 1;
}
// 获取普通文件大小
if (fstat(file_fd, &file_stat) == -1) {
perror("Failed to get file status");
close(file_fd);
return 1;
}
file_size = file_stat.st_size;
// 计算需要的大页数量
size_t num_huge_pages = (file_size + HUGE_PAGE_SIZE - 1) / HUGE_PAGE_SIZE;
size_t aligned_file_size = num_huge_pages * HUGE_PAGE_SIZE;
// 打开hugetlbfs文件系统中的文件
huge_fd = open("/dev/hugepages/your_huge_file", O_RDWR | O_CREAT, 0666);
if (huge_fd == -1) {
perror("Failed to open huge file");
close(file_fd);
return 1;
}
// 调整hugetlbfs文件大小为对齐后的大小
if (ftruncate(huge_fd, aligned_file_size) == -1) {
perror("Failed to truncate huge file");
close(file_fd);
close(huge_fd);
return 1;
}
// 映射普通文件到内存
file_data = mmap(NULL, file_size, PROT_READ, MAP_PRIVATE, file_fd, 0);
if (file_data == MAP_FAILED) {
perror("Failed to mmap ordinary file");
close(file_fd);
close(huge_fd);
return 1;
}
// 映射hugetlbfs文件到内存,使用MAP_HUGETLB标志
huge_data = mmap(NULL, aligned_file_size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_HUGETLB, huge_fd, 0);
if (huge_data == MAP_FAILED) {
perror("Failed to mmap huge file");
munmap(file_data, file_size);
close(file_fd);
close(huge_fd);
return 1;
}
// 将普通文件数据复制到hugetlbfs文件映射的内存区域(这里是必要的拷贝)
// 可以优化为使用更高效的拷贝方式,如memcpy等
for (off_t i = 0; i < file_size; i++) {
((char *)huge_data)[i] = ((char *)file_data)[i];
}
// 在这里可以使用huge_data进行后续操作,如处理数据等
// 释放映射
munmap(huge_data, aligned_file_size);
munmap(file_data, file_size);
// 关闭文件描述符
close(huge_fd);
close(file_fd);
return 0;
}
hugetlbfs文件系统(挂载点为/dev/hugepages)中创建一个文件,并调整其大小为与大页对齐的大小。hugetlbfs文件映射到内存中,其中hugetlbfs文件的映射使用了MAP_HUGETLB标志。hugetlbfs文件映射的内存区域中。"your_ordinary_file.txt"和"/dev/hugepages/your_huge_file"需要替换为实际的文件名。hugetlbfs挂载点对应的内存区域,它就会一直占用内存,直到相关的内存映射被释放或进程结束。因为hugetlbfs是内存 backed 的文件系统,其数据存放在内存中。hugetlbfs确实会给普通应用程序带来一些额外的负担。如你所说,需要进行文件拷贝、处理页面大小对齐等操作,这增加了编程的复杂性和代码的工作量。而且,如果应用程序对内存使用的灵活性要求较高,使用固定大小的大页可能会导致内存浪费。mmap时,操作系统通常不会分配物理上连续的100G内存。mmap返回的是虚拟地址空间中连续的地址范围,而实际的物理内存可以是不连续的。操作系统通过页表等机制将虚拟地址映射到物理内存,使得应用程序看到的是连续的内存空间,而底层可以灵活地使用不连续的物理内存块来满足映射需求。huge TLBFS时,虽然在虚拟地址层面看起来需要连续的内存,但在物理内存层面并不要求必须是连续的100G空间,这样大大提高了内存分配的灵活性和成功率,系统能够更有效地利用内存资源来完成相关操作。huge TLBFS是内存依赖的文件系统,系统关闭或重启后,其中的文件会丢失。huge TLBFS,还有其他类似的内存依赖的文件系统,比如tmpfs。tmpfs是一种基于内存的文件系统,它将文件存储在内存中,具有读写速度快的特点,常用于临时文件的存储,如/tmp目录通常是基于tmpfs实现的。cp等命令将文件拷贝到tmpfs文件系统挂载的目录中,比如通常的/tmp目录。/tmp目录基于tmpfs,确实占用内存,其大小是有限制的。tmpfs的容量可以在挂载时通过参数指定,默认情况下,它会根据系统内存情况动态调整,但也有一定的上限。它的容量与整个系统内存是相关且有一定限制的,不是无限制的,也与其他存储设备的容量相互独立,有其自身的管理和限制机制。huge TLBFS的广泛使用的命令行工具。不过,有一些相关的库和工具可以在一定程度上帮助实现类似功能。Libhugetlbfs库主要用于在用户空间方便地使用大页内存,但它侧重于大页内存的管理和使用,而不是专门的文件拷贝到huge TLBFS的工具。cp等普通的文件拷贝命令可以用于将文件拷贝到huge TLBFS挂载点,但它们不支持分段拷贝,可能会因内存不足而失败。对于大文件拷贝,rsync命令可以实现增量拷贝和一些优化,但也没有直接提供分段拷贝到huge TLBFS的功能。huge TLBFS,可能需要自己编写程序来利用mmap等系统调用,结合文件分段读取和写入的逻辑来实现。也可以考虑基于现有的文件拷贝工具进行修改和扩展,以添加对huge TLBFS的支持和分段拷贝功能,但这需要一定的开发工作。huge TLBFS确实与普通文件系统有所不同,但通常可以使用cp等普通文件拷贝命令将文件拷贝到huge TLBFS挂载点,不过对于大文件可能会因内存限制出现问题。mmap,而想用共享内存相关方式来实现文件拷贝到huge TLBFS,一般没有直接对应的SHM get、SHM put这样的命令行工具专门用于此目的。shmget、shmat等系统调用在程序中实现。要实现将文件内容通过共享内存方式拷贝到huge TLBFS,需要编写自定义程序来完成,比如先通过shmget创建共享内存段,再将文件内容读取到共享内存,最后将共享内存中的数据写入huge TLBFS中的文件。但这没有现成的命令行工具,需要自行开发相应的程序来实现这样的功能。racadm set idrac.WebServer.Enable 1来启用。也可以尝试重启iDRAC服务,命令为racadm serveraction reset。about:config,按下回车键,打开高级配置页面。security.tls.version.min,找到该配置项。sudo apt update
sudo apt install openjdk-11-jre-headless
javaws yourfile.jnlp
yourfile.jnlp替换为实际的 JNLP 文件名。如果 JNLP 文件在特定目录下,需要提供文件的完整路径。sudo apt remove openjdk-11-jre-headless卸载当前的 OpenJDK。~/.java/deployment/log目录下。sudo fsck -y /dev/sdX(将 “sdX” 替换为实际的 SD 卡设备名称)来检查和修复文件系统错误。sudo chmod 777 /media/your_username/sd_card_mount_point(将 “your_username” 替换为你的用户名,“sd_card_mount_point” 替换为 SD 卡的挂载点)来更改权限。sudo modprobe -r sd_mod && sudo modprobe sd_mod。lsblk查看 SD 卡对应的设备名称,假设为sdb。sudo umount /dev/sdb。sudo modprobe -r sd_mod && sudo modprobe sd_mod。udevadm工具来触发 SD 卡设备的重新探测,执行sudo udevadm trigger --subsystem-match=block --action=add --attr-match=DEVNAME=/dev/sdb。sdc开头的,比如sdc_mod或sdhci等,而不是sd_mod。以下是一些可能相关的模块及对应的操作:sdc_mod模块。你可以尝试使用以下命令重新加载该模块:sudo modprobe -r sdc_mod && sudo modprobe sdc_mod
sdhci模块是 SD Host Controller Interface 的内核模块,用于支持 SD 卡的主机控制器。如果sdc_mod模块不起作用,可以尝试重新加载sdhci模块:sudo modprobe -r sdhci && sudo modprobe sdhci
dmesg | grep -i sd查看与 SD 卡相关的日志信息,从中找到加载的模块名称,然后按照类似的方法进行重新加载操作。sudo apt update,该命令会更新软件源列表,确保获取到最新的软件包信息。sudo apt search sdc_mod或sudo apt search sdhci(根据之前确定的模块名称进行搜索),查看是否有对应的软件包可用。sudo apt install <package_name>进行安装,将<package_name>替换为实际搜索到的软件包名称。fdisk -l查看新加磁盘信息,然后使用fdisk /dev/sdb1对新加磁盘进行分区,按照提示进行操作,如创建主分区、选择分区起始和结束扇区号等,最后输入w命令保存分区表并退出。使用partprobe重新加载分区表。pvcreate /dev/sdb1将分区创建为物理卷,创建完成后可以使用pvdisplay查看创建的物理卷。vgcreate vg2 /dev/sdb1将物理卷加入卷组并命名,例如这里命名为vg2。创建后可以用vgdisplay查看卷组信息。lvcreate -n database -l 480g vg2创建逻辑卷,这里指定逻辑卷名为database,并从vg2卷组中分配480g空间。创建完成后可使用lvdisplay查看逻辑卷信息。/dev/sdb1,实际操作中请根据实际情况替换为新添加硬盘的设备名称。/boot单独设置为一个分区,这样做有诸多好处,比如便于管理和维护,在系统出现问题时可以更方便地进行修复等。/boot/efi是 EFI 系统分区,但将/boot单独分区与 UEFI 启动以及使用 UUID 识别并不冲突。如果没有将/boot单独分区,理论上也不一定就会导致启动时找不到的问题,只要系统的引导配置正确,UUID 等识别信息准确无误,并且文件系统没有损坏等情况,系统通常可以正常启动。/boot分区可能会增加故障排查和修复的难度,因为/分区可能包含大量其他系统文件和数据,这可能会干扰对启动相关问题的定位和解决。所以,为了系统的稳定性和可维护性,将/boot单独分区是一个较好的实践。efibootmgr命令行工具背后有相应的库支持,可用于在 Linux 下管理 UEFI 启动项。若要在更底层进行操作,可能需要使用与 UEFI 固件交互的特定开发库,如 TianoCore 等开源 UEFI 实现提供的开发接口,但这通常需要更深入的底层开发知识。cargo install uefisettings命令安装。cd /tmp,再通过git clone https://github.com/linuxboot/uefisettings克隆仓库,进入克隆目录cd uefisettings后,使用cargo install --path.命令安装。uefisettings --help查看工具的基本使用方法和可用参数。uefisettings hii get --json 'enable intel(r) txt' | jq -r '.responses | .[0].question.answer'命令,根据输出判断该设置是否启用。uefisettings hii set 'pending operation' 'tpm clear'命令来修改相关设置。racadm set命令来设置特定的 UEFI 变量。/efi/grub/grub.cfg),并为其添加一个名称,如 “Ubuntu Boot Manager”。对于 Windows Server 的启动 agent 管理,也可在 UEFI 引导管理器中通过类似方式,添加或删除相关启动选项,不过具体的引导文件路径和名称会有所不同。/boot/grub),但 UEFI 中同样会有关于 GRUB 的启动选项信息,使得系统启动时 UEFI 能根据这些信息来加载 GRUB,进而引导 Ubuntu 系统。/boot单独设置分区时,确实可能会引发一些与 UEFI 启动相关的问题。/boot分区导致的问题/boot设置单独分区,GRUB 引导加载程序可能会被安装到根分区(/)的默认位置。当系统启动时,UEFI 会根据其变量中记录的信息去查找 GRUB 引导加载程序。如果此时 UEFI 变量中记录的/boot扇区位置信息不准确,或者由于根分区的结构变化导致 GRUB 无法正常定位,就会出现 “找不到/boot” 的错误。因为 UEFI 依赖于准确的变量信息来找到引导加载程序,进而启动操作系统,而没有独立的/boot分区,使得系统启动过程中的引导路径变得复杂且容易出错。/boot单独划分一个分区,一般建议大小为 200MB - 500MB 左右。这样可以确保 GRUB 引导加载程序和相关的启动文件有独立、稳定的存储位置,UEFI 也能更准确地通过变量记录的信息找到/boot分区,从而顺利启动系统。如果已经安装了系统但没有/boot分区,可以尝试使用工具如parted或fdisk等对磁盘进行重新分区,并将 GRUB 引导程序重新安装到正确的位置,同时更新 UEFI 变量中的相关信息。不过,这些操作需要谨慎进行,以免导致数据丢失或系统无法启动。/boot分区。/boot单独设置分区时,GRUB 及相关的启动文件会被安装到这个独立的/boot分区中,这样便于 UEFI 准确找到引导信息来启动系统。如果没有为/boot单独分区,GRUB 引导程序就会安装在根分区(/)下的默认/boot目录位置,此时根分区承担了/boot分区的功能,但这种情况下系统启动的稳定性和可维护性相对较差,容易因根分区的变化导致引导问题。/boot/efi。在 ESP 中,存储着与 UEFI 启动相关的文件,包括不同操作系统的引导加载程序信息等。对于 Ubuntu 系统的 GRUB 引导程序,其相关文件可能位于/boot/grub,如果有单独的/boot分区,那么 UEFI 会根据其变量中记录的/boot分区信息去寻找/boot/grub中的 GRUB 引导程序;如果没有单独的/boot分区,UEFI 则会在根分区(/)下的/boot目录中寻找 GRUB 引导程序。所以,UEFI 是依据其内部存储的关于/boot位置的信息来查找 GRUB 引导程序,而不是直接在当前分区简单地寻找。BootOrder(用于指定启动顺序)、Boot####(其中####是数字,对应不同的启动项,包含了启动设备或分区的相关信息)等,但这些变量中并不直接明确地以一个特定变量来单独存储 GRUB bootloader 所在分区的详细信息。Boot####变量中一般不直接包含UUID,但可能间接关联到包含 UUID 的信息。Boot####变量中包含路径名和文件名信息。它通过EFI_DEVICE_PATH_PROTOCOL结构体来存储设备路径信息,该路径信息会指向启动所需的文件,包括文件名以及文件所在的路径,UEFI 就是依据这个路径信息来找到相应的引导加载程序文件,比如 GRUB 的相关文件。flashrom等。EFI_BOOT_MANAGER_LOAD_OPTION类型变量,其中包含了与硬盘相关的信息,如description(描述,如 “NVME (xx - xx - xx)”)、filepath(设备路径,例如 “pciroot (0x0)/pci (0xf,0x0)/pci (0x0,0x0)/nvme (0x1,3e - 12 - 30 - 80 - 44 - a7 - 79 - 64)/hd (6,gpt,c75cd876 - dc80 - 4df8 - b6a4 - 7b2111703ba6,0x16e7b000,0x3c78000)”)。/sys/firmware/efi/vars/目录下也可能存在其他与硬盘相关的变量,具体取决于 UEFI 固件的实现和系统配置。BootOrder等相关变量来指定启动设备的顺序。当系统中有多块硬盘且存在不同的分区表(如 GPT)时,UEFI 会按照设置的顺序查找可启动的设备。通常在 UEFI 的设置界面中,会列出检测到的硬盘设备,用户可以手动调整它们的启动优先级,将包含正确引导分区(安装了系统引导文件,如 GPT 中的 EFI 系统分区)的硬盘设置为第一启动项,这样系统启动时就会优先从该硬盘加载引导程序,进而启动操作系统。efibootmgr在 Linux 系统下)来设置,示例如下:/dev/sda的硬盘设置为第一启动项,首先需要获取该硬盘对应的 UEFI 启动项编号,比如通过efibootmgr -v命令查看,假设编号为Boot0002,则可以使用以下命令将其设置为第一启动项:efibootmgr -o 0002,0000,0001 #这里的0002是目标硬盘启动项编号,后面的0000、0001等是其他启动项编号,按照你希望的顺序排列
blkid命令,例如blkid /dev/sda,会显示类似/dev/sda1: UUID="55555555 - 5555 - 5555 - 5555 - 555555555555" TYPE="ext4"的信息,记录下 UUID。efibootmgr命令设置启动项时指定 UUID,假设获取到的 UUID 为55555555 - 5555 - 5555 - 5555 - 555555555555,可以这样设置:efibootmgr -c -L "MyDisk" -d /dev/disk/by - uuid/55555555 - 5555 - 5555 - 5555 - 555555555555 - p 1 - w,其中-c表示创建新的启动项,-L指定启动项名称,-d指定设备,-p指定分区。ls -l /dev/disk/by - path/命令查看硬盘的设备路径,例如pci - 0000:00:17.0 - ata - 1.0.0 - part1。efibootmgr命令中使用设备路径来设置启动项,如efibootmgr -c -L "MyDisk" -d /dev/disk/by - path/pci - 0000:00:17.0 - ata - 1.0.0 - part1 - w。