起動時にこのエラーが発生します:
[Firmware Bug]: TSC_DEADLINE disabled due to Errata; please update microcode to version (or later)
/boot/intel-ucode.imgのファームウェアバージョンとdmesgによって報告されるバージョンの間に不一致の可能性があることがわかりました。ただし、問題の解決方法がわかりません。
カーネル/ディストリビューション:
# uname -a
Linux workstation 4.13.9-1-Arch #1 SMP PREEMPT Sun Oct 22 09:07:32 CEST 2017 x86_64 GNU/Linux
CPU情報(マシンはデュアルXeon、各CPUには10コアがあり、1つだけがリストされています)
# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 79
model name : Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
stepping : 1
microcode : 0xb00001c
cpu MHz : 2200.126
cache size : 25600 KB
physical id : 0
siblings : 20
core id : 0
cpu cores : 10
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 20
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc Arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
bugs :
bogomips : 4402.59
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical, 48 bits virtual
power management:
このエントリは、必要な2つのinitrd行を使用しており、最初にintel-ucode.imgがリストされていることを示しています。
# cat /boot/loader/entries/Arch.conf
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options ...
上記のエントリを使用していることを確認します。
# cat /boot/loader/loader.conf
default Arch
私のintel-ucode.imgファイルが正しい日付であり、正しい場所にあることを確認します。
# ls -la /boot/
total 137324
drwxr-xr-x 5 root root 4096 Nov 7 02:18 .
drwxr-xr-x 1 root root 224 Oct 29 02:38 ..
drwxr-xr-x 4 root root 4096 May 16 2016 EFI
-rwxr-xr-x 1 root root 35074017 Nov 2 05:58 initramfs-linux-fallback.img
-rwxr-xr-x 1 root root 19212497 Nov 2 05:58 initramfs-linux.img
-rwxr-xr-x 1 root root 27503970 May 19 2016 initramfs-linux-lts-fallback.img
-rwxr-xr-x 1 root root 19029219 Nov 2 05:58 initramfs-linux-lts.img
-rwxr-xr-x 1 root root 21556194 May 29 2016 initramfs-linux-simple-fallback.img
-rwxr-xr-x 1 root root 6569920 May 29 2016 initramfs-linux-simple.img
-rwxr-xr-x 1 root root 1303040 Jul 9 08:15 intel-ucode.img
drwxr-xr-x 3 root root 4096 Jun 24 2016 loader
-rwxr-xr-x 1 root root 5502736 Oct 22 03:09 vmlinuz-linux
-rwxr-xr-x 1 root root 4827424 Oct 30 04:20 vmlinuz-linux-lts
dmesgは、マイクロコードバージョン0xb000020(またはそれ以降)が必要であり、バージョンが0xb00001cであることを示します
# dmesg | grep microcode
[ 0.000000] microcode: microcode updated early to revision 0xb00001c, date = 2016-05-20
[ 0.000000] [Firmware Bug]: TSC_DEADLINE disabled due to Errata; please update microcode to version: 0xb000020 (or later)
[ 22.175583] microcode: sig=0x406f1, pf=0x1, revision=0xb00001c
[ 22.177119] microcode: Microcode Update Driver: v2.2.
マイクロコードのバージョンが0xb00001cであることを確認しているようです
$ grep microcode /proc/cpuinfo
microcode : 0xb00001c
ただし、iucode_tool
は、私のファイル/boot/intel-ucode.imgにマイクロコードrev 0xb000021が含まれていることを示しているようです。
bsdtar -Oxf /boot/intel-ucode.img | iucode_tool -tb -lS -
iucode_tool: system has processor(s) with signature 0x000406f1
microcode bundle 1: (stdin)
selected microcodes:
001/139: sig 0x000406f1, pf_mask 0xef, 2017-03-01, rev 0xb000021, size 26624
問題は、マイクロコードrev 0xb000021が使用されない理由と、それを適切に「ロード」する方法です。
更新-jasonwryanからの要求に応じて、もう少し情報を追加します。 ただし、最初にこの質問をしてからこのアップデートを提供するまでの間に、pacman -Syu
を実行して新しいカーネルを取得しました。だからここに要求された情報とuname -a
の現在の出力があります
# pacman -Q linux intel-ucode
linux 4.13.11-1
intel-ucode 20170707-1
# uname -a
Linux workstation 4.13.11-1-Arch #1 SMP PREEMPT Thu Nov 2 10:25:56 CET 2017 x86_64 GNU/Linux
インストールされているカーネルとinitramfsが読み込まれていません(uname
とpacman -Q linux
の出力の違いを確認してください。これは、/boot
をマウント解除して更新を実行した可能性があることを意味します。
Chrootで、/boot
がマウントされていることを確認し、アップグレードを再実行してinitramfsを再生成します。 /boot
がマウントされているはずの場所にインストールされるファイルをクリーンアップする必要がある場合があります。
この問題は、intel-ucode.img
ファイルは起動時にロードされません。 ArchWikiの説明の マイクロコード ページ:
マイクロコードは、ブートローダーによってロードされる必要があります。ユーザーの初期ブート設定にはさまざまなバリエーションがあるため、Archのデフォルト設定ではマイクロコードの更新が自動的にトリガーされない場合があります。多くのAURカーネルはこの点に関して公式のArchカーネルの道を歩んできました。
これらのアップデートは、ブートローダー設定ファイルの最初のinitrdとして/boot/AMD-ucode.imgまたは/boot/intel-ucode.imgを追加して有効にする必要があります。これは通常のinitrdファイルに追加されます。一般的なブートローダーの手順については、以下を参照してください。
詳細については、そのページを参照してください。私の場合、systemd-bootを使用しているので、ファイル/boot/loader/entries/Arch.conf
から:
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=/dev/sda6 rw ipv6.disable=1
に
title Arch Linux 2
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options root=/dev/sda6 rw ipv6.disable=1