内核更新后,我的 proxmox(基于 Debian)家庭服务器无法启动:
# dmesg | grep -i microcode
[ 0.080090] [Firmware Bug]: TSC_DEADLINE disabled due to Errata; please update microcode to version: 0x22 (or later)
[ 0.200978] MDS: Vulnerable: Clear CPU buffers attempted, no microcode
[ 1.043840] microcode: sig=0x306c3, pf=0x2, revision=0x19
[ 1.043870] microcode: Microcode Update Driver: v2.2.
我发现这和这对第一个错误的问题TSC_DEADLINE disabled due to Errata
。所以我更新了我的BIOS到可用的最新版本,即 2015 年 5 月 19 日起的 V1.12。更新过程中没有报错,看来已经应用了:
# dmidecode -t BIOS | grep -E 'Version|Date'
Version: V1.12
Release Date: 05/19/2015
但错误仍然发生。我发现 5.4.41-1-pve 是最新的内核,可以成功启动:
较旧的版本(例如 5.3)也可以使用,但较新的版本则不行。因此,我安装了该intel-microcode
软件包,如果没有可用的 BIOS 更新来解决该问题,建议您安装该软件包。但问题仍然存在,我无法启动较新的内核版本。
正则表达式错误
其他正则表达式错误似乎是由/etc/lvm/lvm.conf
.我在那里配置了以下过滤器:
global_filter = [ "r|/dev/zd.*|", "r|/dev/mapper/pve-.*|" "r|/dev/mapper/.*-(vm|base)--[0-9]+--disk--[0-9]+|" "r|/dev/sda" "r|/dev/sdd"]
这避免磁盘的待机问题,因为 proxmox 定期从磁盘获取信息(例如它们的使用情况),这使它们保持清醒。
我想我需要在末尾放置一个分隔符,这意味着r|/dev/sda|
而不是r|/dev/sda
这在过去是可以容忍的,我目前正在测试这一点。
编辑
我在运行时遇到了相同的正则表达式错误,并尝试在最后update-grub
修改模式。|
之后update-grub
运行就不会报错了。但是在重新启动到新内核后,Invalid filter pattern "r|/dev/sda"
尽管我|
在/etc/lvm/lvm.conf
.
运行时apt upgrade
,我收到来自 proxmox 的警告,内核已更新但尚未加载(需要重新启动)。此外,它还表示预计微码修订版为 0x28,而不是当前有效的 0.19:
硬件细节
# dmidecode -t Baseboard | grep -E 'Manufacturer|Product|Version'
Manufacturer: MSI
Product Name: Z87-GD65 GAMING (MS-7845)
Version: 1.0
# grep "model name" /proc/cpuinfo
model name : Intel(R) Core(TM) i3-4150 CPU @ 3.50GHz
# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 10 (buster)
Release: 10
Codename: buster
# egrep ^deb /etc/apt/sources.list
deb http://ftp.de.debian.org/debian buster main contrib non-free
deb http://security.debian.org buster/updates main contrib non-free
deb [arch=amd64] https://download.docker.com/linux/debian buster stable
deb http://ftp.de.debian.org/debian buster-backports main
答案1
问题是,/etc/lvm/lvm.conf
仅仅调用 就不会重新加载update-grub
。本文给了我正确的提示(后来也这个是德语的):
备份现有的 initramfs 并重建它,以便更改后的 /etc/lvm/lvm.conf 文件将用于后续重新启动。
为了重建,我找到了更新 initramfs命令并像这样执行它:
update-initramfs -u -k all
由于我有多个内核版本,并且预计某些内核版本可能会出现问题(如我之前的测试),因此我重建了所有内核版本。通常情况下,重建最新的版本就足够了,无需-k all
切换。
现在服务器重新启动,没有任何问题,我可以验证微代码是否已更新:
# dmesg | grep -i microcode
[ 0.000000] microcode: microcode updated early to revision 0x28, date = 2019-11-12
[ 0.200700] SRBDS: Mitigation: Microcode
[ 0.929176] microcode: sig=0x306c3, pf=0x2, revision=0x28
[ 0.929231] microcode: Microcode Update Driver: v2.2.
之前我有 0x19,现在是 0x28,正如 proxmox 所预期的那样。似乎这些更新没有应用,直到我手动更新它们。我猜想这与(现在)无效的正则表达式模式有关,|
最后没有,这阻止了应用更新。