获取启动分区 UUID 的可靠脚本方式

获取启动分区 UUID 的可靠脚本方式

我想编写一个稍微自动化的方法来编辑/etc/default/grubfips=1 boot=UUID=????附加GRUB_CMDLINE_LINUX=

巧合地/etc/fstab包含UUID=12345blabla /boot xfs defaults 0 0.但是,如果挂载类型不是 /etc/fstab 中的 UUID,那么在 linux [任何 RHEL/Centos 7.6 或更高版本的系统] 上推断引导分区的 UUID 的可靠方法是什么?

答案1

首先我要说的是,这并没有解决您关于自动修改的问题部分/etc/default/grub,但我怀疑实际上并不需要这样做。

UUID 应该是静态的,除非您重新格式化分区。假设您知道底层设备,您可以查看/dev/disk/by-uuid,并看到类似以下内容:

$ ls -l /dev/disk/by-uuid
... 9577f213-665a-427b-aa45-8927b177224e -> ../../sda1
...

所以你只需要找到与你的启动分区对应的设备即可。

还有blkid命令:

$ blkid /dev/sda1
/dev/sda1: UUID="9577f213-665a-427b-aa45-8927b177224e" ...

您是否遇到过 UUID 由于某种原因发生变化的情况?

答案2

/boot如果您正在查找正在运行的系统上安装的设备的 UUID ,一个干净的方法findmntutil-linux

$ findmnt --output=UUID --noheadings --target=/boot 
2b8c6b62-0f68-47d1-a5e7-3e56acce98ac

通过这些不言自明的选项,它仅输出 UUID。它还可以让您省去确定哪个设备是相关设备的麻烦。

如果您只是查找您知道的设备的 UUID,无论它是否已安装,您可以使用blkid,如中所述安迪·道尔顿的回答:

$ sudo blkid -s UUID -o value /dev/vda1 
2b8c6b62-0f68-47d1-a5e7-3e56acce98ac

-s tag选项-o format将输出限制为仅 UUID 标记的值。

GRUB_CMDLINE_LINUX然后,您可以使用以下命令将 UUID 附加到:

sed -i.bkp 's/^\([[:blank:]]*GRUB_CMDLINE_LINUX=".*\)\(".*\)$/\1 fips=1 boot=UUID='"$newuuid"'\2/' /etc/default/grub

它假定该-i选项的语法为 GNU sed:它将就地编辑文件,同时创建一个grub.bkp备份文件。
请注意,我们不会检查boot命令行参数是否已经存在;而是检查命令行参数是否已存在。我们只是附加fips=1newuuid在第二个之前",因此假设您当前的命令行用双引号引起来并且不包含任何双引号。

答案3

首先,让我们找到启动分区

fdisk -l | grep '^/dev/[a-z]*[0-9]' | awk '$2 == "*"' 

然后按照以下建议提供其输出安迪道尔顿上面,到黑子

fdisk -l | grep '^/dev/[a-z]*[0-9]' | awk '$2 == "*"' | blkid $1

相关内容