尽管 BIOS 更新和英特尔微码软件包,TSC_DEADLINE 由于勘误表而被禁用

尽管 BIOS 更新和英特尔微码软件包,TSC_DEADLINE 由于勘误表而被禁用

内核更新后,我的 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 所预期的那样。似乎这些更新没有应用,直到我手动更新它们。我猜想这与(现在)无效的正则表达式模式有关,|最后没有,这阻止了应用更新。

相关内容