我想编写一个稍微自动化的方法来编辑/etc/default/grub
和fips=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 ,一个干净的方法findmnt
是util-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=1
newuuid
在第二个之前"
,因此假设您当前的命令行用双引号引起来并且不包含任何双引号。