如何在Linux上安裝/更新Intel微碼固件
如果你是一個(gè) Linux 系統(tǒng)管理方面的新手,如何在 Linux 上使用命令行方式去安裝或者更新 Intel/AMD CPU 的微碼固件呢?
微碼就是由 Intel/AMD 提供的 CPU 固件。Linux 的內(nèi)核可以在引導(dǎo)時(shí)更新 CPU 固件,而無需 BIOS 更新。處理器的微碼保存在內(nèi)存中,在每次啟動系統(tǒng)時(shí),內(nèi)核可以更新這個(gè)微碼。這些來自 Intel/AMD 的微碼的更新可以去修復(fù) bug 或者使用補(bǔ)丁來防范 bug。這篇文章演示了如何使用包管理器或由 lntel 提供的 Linux 處理器微碼更新來安裝 AMD 或 Intel 的微碼更新。
如何查看當(dāng)前的微碼狀態(tài)
以 root 用戶運(yùn)行下列命令:
# dmesg | grep microcode
輸出如下:
Verify microcode update on a CentOS RHEL Fedora Ubuntu Debian Linux
請注意,你的 CPU 在這里完全有可能出現(xiàn)沒有可用的微碼更新的情況。如果是這種情況,它的輸出可能是如下這樣的:
[ 0.952699] microcode: sig=0x306a9, pf=0x10, revision=0x1c
[ 0.952773] microcode: Microcode Update Driver: v2.2.
如何在 Linux 上使用包管理器去安裝微碼固件更新
對于運(yùn)行在 x86/amd64 架構(gòu)的 CPU 上的 Linux 系統(tǒng),Linux 自帶了工具去更改或者部署微碼固件。在 Linux 上安裝 AMD 或者 Intel 的微碼固件的過程如下:
- 打開終端應(yīng)用程序
- Debian/Ubuntu Linux 用戶推輸入:
sudo apt install intel-microcode
- CentOS/RHEL Linux 用戶輸入:
sudo yum install microcode_ctl
對于流行的 Linux 發(fā)行版,這個(gè)包的名字一般如下 :
microcode_ctl
和linux-firmware
—— CentOS/RHEL 微碼更新包intel-microcode
—— Debian/Ubuntu 和衍生發(fā)行版的適用于 Intel CPU 的微碼更新包amd64-microcode
—— Debian/Ubuntu 和衍生發(fā)行版的適用于 AMD CPU 的微碼固件linux-firmware
—— 適用于 AMD CPU 的 Arch Linux 發(fā)行版的微碼固件(你不用做任何操作,它是默認(rèn)安裝的)intel-ucode
—— 適用于 Intel CPU 的 Arch Linux 發(fā)行版微碼固件microcode_ctl
、linux-firmware
和ucode-intel
—— Suse/OpenSUSE Linux 微碼更新包
警告 :在某些情況下,微碼更新可能會導(dǎo)致引導(dǎo)問題,比如,服務(wù)器在引導(dǎo)時(shí)被掛起或者自動重置。以下的步驟是在我的機(jī)器上運(yùn)行過的,并且我是一個(gè)經(jīng)驗(yàn)豐富的系統(tǒng)管理員。對于由此引發(fā)的任何硬件故障,我不承擔(dān)任何責(zé)任。在做固件更新之前,請充分評估操作風(fēng)險(xiǎn)!
示例
在使用 Intel CPU 的 Debian/Ubuntu Linux 系統(tǒng)上,輸入如下的 apt 命令/apt-get 命令:
$ sudo apt-get install intel-microcode
示例輸出如下:
How to install Intel microcode firmware Linux
你 必須重啟服務(wù)器以激活微碼 更新:
$ sudo reboot
重啟后檢查微碼狀態(tài):
# dmesg | grep 'microcode'
示例輸出如下:
[ 0.000000] microcode: microcode updated early to revision 0x1c, date = 2015-02-26
[ 1.604672] microcode: sig=0x306a9, pf=0x10, revision=0x1c
[ 1.604976] microcode: Microcode Update Driver: v2.01 <tigran@aivazian.fsnet.co.uk>, Peter Oruba
如果你使用的是 RHEL/CentOS 系統(tǒng),使用 yum 命令 嘗試去安裝或者更新以下兩個(gè)包:
$ sudo yum install linux-firmware microcode_ctl
$ sudo reboot
$ sudo dmesg | grep 'microcode'
如何更新/安裝從 Intel 網(wǎng)站上下載的微碼
只有在你的 CPU 制造商建議這么做的時(shí)候,才可以使用下列的方法去更新/安裝微碼,除此之外,都應(yīng)該使用上面的方法去更新。大多數(shù) Linux 發(fā)行版都可以通過包管理器來維護(hù)、更新微碼。使用包管理器的方法是經(jīng)過測試的,對大多數(shù)用戶來說是最安全的方式。
如何為 Linux 安裝 Intel 處理器微碼塊(20180108 發(fā)布)
首先通過 AMD 或 Intel 網(wǎng)站 去獲取***的微碼固件。在本示例中,我有一個(gè)名稱為 ~/Downloads/microcode-20180108.tgz
的文件(不要忘了去驗(yàn)證它的檢驗(yàn)和),它的用途是去防范 meltdown/Spectre
bug。先使用 tar
命令去提取它:
$ mkdir firmware
$ cd firmware
$ tar xvf ~/Downloads/microcode-20180108.tgz
$ ls -l
示例輸出如下:
drwxr-xr-x 2 vivek vivek 4096 Jan 8 12:41 intel-ucode
-rw-r--r-- 1 vivek vivek 4847056 Jan 8 12:39 microcode.dat
-rw-r--r-- 1 vivek vivek 1907 Jan 9 07:03 releasenote
我只在 CentOS 7.x/RHEL、 7.x/Debian 9.x 和 Ubuntu 17.10 上測試了如下操作。如果你沒有找到
/sys/devices/system/cpu/microcode/reload
文件的話,更老的發(fā)行版所帶的更老的內(nèi)核也許不能使用此方法。參見下面的討論。請注意,在應(yīng)用了固件更新之后,有一些客戶遇到了系統(tǒng)重啟現(xiàn)象。特別是對于那些運(yùn)行 Intel Broadwell 和 Haswell CPU 的用于客戶機(jī)和數(shù)據(jù)中心服務(wù)器上的系統(tǒng)。不要在 Intel Broadwell 和 Haswell CPU 上應(yīng)用 20180108 版本。盡可能使用軟件包管理器方式。
檢查一下,確保存在 /sys/devices/system/cpu/microcode/reload
:
$ ls -l /sys/devices/system/cpu/microcode/reload
你必須使用 cp 命令 拷貝 intel-ucode
目錄下的所有文件到 /lib/firmware/intel-ucode/
下面:
$ sudo cp -v intel-ucode/* /lib/firmware/intel-ucode/
你只需要將 intel-ucode
這個(gè)目錄整個(gè)拷貝到 /lib/firmware/
目錄下即可。然后在重新加載接口中寫入 1
去重新加載微碼文件:
# echo 1 > /sys/devices/system/cpu/microcode/reload
更新現(xiàn)有的 initramfs,以便于下次啟動時(shí)它能通過內(nèi)核來加載:
$ sudo update-initramfs -u
$ sudo reboot
重啟后通過以下的命令驗(yàn)證微碼是否已經(jīng)更新:
# dmesg | grep microcode
到此為止,就是更新處理器微碼的全部步驟。如果一切順利的話,你的 Intel CPU 的固件將已經(jīng)是***的版本了。