当我使用 ansible 运行更新脚本时出现以下错误:
Generating grub configuration file ...", "Found linux image:
/boot/vmlinuz-5.10.0-26-amd64", "Found initrd image:
/boot/initrd.img-5.10.0-26-amd64", "Found linux image:
/boot/vmlinuz-5.10.0-19-amd64", "Found initrd image:
/boot/initrd.img-5.10.0-19-amd64", "Warning: os-prober will be
executed to detect other bootable partitions.", "Its output will be
used to detect bootable binaries on them and create new boot
entries.", "done", "Setting up grub-pc (2.06-3~deb11u6) ...",
"/dev/disk/by-id/ata-CFS3F-MT_32GB_2122072004900007 does not exist
问题是这台服务器的操作系统(debian 11)是通过克隆另一台机器的映像安装的。可能是磁盘的 id 不同:
sysoperator@server1:~$ ls -l /dev/disk/by-id/
total 0
lrwxrwxrwx 1 root root 9 Jan 3 15:09 ata-CFS3F-MT_32GB_2122072004900022 -> ../../sdb
lrwxrwxrwx 1 root root 10 Jan 3 15:09 ata-CFS3F-MT_32GB_2122072004900022-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 9 Jan 3 15:09 ata-Maximus-128GB_20220615100000000127 -> ../../sda
lrwxrwxrwx 1 root root 10 Jan 3 15:09 ata-Maximus-128GB_20220615100000000127-part1 -> ../../sda1
lrwxrwxrwx 1 root root 9 Jan 3 15:09 wwn-0x5000000000000006 -> ../../sda
lrwxrwxrwx 1 root root 10 Jan 3 15:09 wwn-0x5000000000000006-part1 -> ../../sda1
本质上不是/dev/磁盘/按 ID/ata-CFS3F-MT_32GB_2122072004900007grub 将使用/dev/磁盘/按 ID/ata-CFS3F-MT_32GB_2122072004900022反而。
在文档中,我无法找到在哪里可以用一个 id 替换另一个 id,并在安装更新之前相应地更新 grub。
编辑:我知道它可以通过运行对话框 dpkg --configure grub-pc 并选择适当的磁盘来手动修复,但我需要自动执行此操作,我有数百台服务器,无法手动执行此操作......
EDIT2:服务器正常启动。它似乎使用 UUID 进行启动:
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
└─sda1 ext4 1.0 6d68a3a0-c63e-4465-b170-4e0b109d973a 101.9G 2% /home
sdb
└─sdb1 ext4 1.0 9ad5ffb5-1a87-49aa-b90b-ffe5ab77d298 20.3G 25% /
启动分区是 sdb1,因此 ata-CFS3F-MT_32GB_2122072004900022 的 UUID 是 9ad5ffb5-1a87-49aa-b90b-ffe5ab77d298。这似乎没问题:
sysoperator@server1:~$ cat /boot/grub/grub.cfg | grep "root 9"
search --no-floppy --fs-uuid --set=root 9ad5ffb5-1a87-49aa-b90b-ffe5ab77d298
search --no-floppy --fs-uuid --set=root 9ad5ffb5-1a87-49aa-b90b-ffe5ab77d298
search --no-floppy --fs-uuid --set=root 9ad5ffb5-1a87-49aa-b90b-ffe5ab77d298
search --no-floppy --fs-uuid --set=root 9ad5ffb5-1a87-49aa-b90b-ffe5ab77d298
search --no-floppy --fs-uuid --set=root 9ad5ffb5-1a87-49aa-b90b-ffe5ab77d298
search --no-floppy --fs-uuid --set=root 9ad5ffb5-1a87-49aa-b90b-ffe5ab77d298
谢谢!
答案1
问题是,尽管 grub 启动正常,但有对映像机器磁盘的引用:
/var/lib/dpkg/info/grub-pc.postinst
/var/lib/dpkg/info/grub-pc.preinst
删除两个文件并运行:
dpkg --configure grub-pc
一切顺利