微代碼就是由 Intel/AMD 提供的 CPU 固件。Linux 的核心可以在引導時更新 CPU 固件,而無需 BIOS 更新。處理器的微碼儲存在記憶體中,在每次啟動系統時,核心可以更新這個微碼。這些來自 Intel/AMD 的微碼的更新可以去修複 bug 或者使用更新檔來防範 bug。
如果你是一個 Linux 系統管理方面的新手,如何在 Linux 上使用指令行方式去安裝或者更新 Intel/AMD CPU 的微碼固件呢?
以 root 使用者運作下列指令:
輸出如下:
注意,你的 CPU 有可能出現沒有可用的微碼更新的情況。這時它的輸出可能是如下這樣的:
如何在 Linux 上使用包管理器去安裝微碼固件更新
對于運作在 x86/amd64 架構的 CPU 上的 Linux 系統,Linux 自帶了工具去更改或者部署微碼固件。在 Linux 上安裝 AMD 或者 Intel 的微碼固件的過程如下:
打開終端應用程式
Debian/Ubuntu Linux 使用者推輸入:sudo apt install intel-microcode
CentOS/RHEL Linux 使用者輸入:sudo yum install microcode_ctl
對于流行的 Linux 發行版,這個包的名字一般如下 :
microcode_ctl 和 linux-firmware —— CentOS/RHEL 微碼更新包
intel-microcode —— Debian/Ubuntu 和衍生發行版的适用于 Intel CPU 的微碼更新包
amd64-microcode —— Debian/Ubuntu 和衍生發行版的适用于 AMD CPU 的微碼固件
linux-firmware —— 适用于 AMD CPU 的 Arch Linux 發行版的微碼固件(你不用做任何操作,它是預設安裝的)
intel-ucode —— 适用于 Intel CPU 的 Arch Linux 發行版微碼固件
microcode_ctl 、linux-firmware 和 ucode-intel —— Suse/OpenSUSE Linux 微碼更新包
警告 :在某些情況下,微碼更新可能會導緻引導問題,比如,伺服器在引導時被挂起或者自動重置。以下的步驟是在我的機器上運作過的,并且我是一個經驗豐富的系統管理者。對于由此引發的任何硬體故障,我不承擔任何責任。在做固件更新之前,請充分評估操作風險!
示例
在使用 Intel CPU 的 Debian/Ubuntu Linux 系統上,輸入如下的 apt 指令/apt-get 指令:
指令執行成功後,需要重新開機伺服器,以激活微代碼的更新。重新開機以後,我們再次執行 dmesg 指令,可以看到輸出已經變為:
如果你是 CentOS 系列的系統,需要安裝的對應的包名為 linux-firmware 和 microcode_ctl。
隻有在你的 CPU 制造商建議這麼做的時候,才可以使用下列的方法去更新/安裝微碼,除此之外,都應該使用上面的方法去更新。大多數 Linux 發行版都可以通過包管理器來維護、更新微碼。使用包管理器的方法是經過測試的,對大多數使用者來說是最安全的方式。
我隻在 CentOS 7.x/RHEL 7.x、Debian 9.x 和 Ubuntu 17.10 上測試了以下的操作。如果你沒有找到 <code>/sys/devices/system/cpu/microcode/reload</code> 檔案的話,舊版本的核心也許不能使用此方法更新。
檢查一下,确儲存在 <code>/sys/devices/system/cpu/microcode/reload</code>。然後需要用 cp 指令拷貝 <code>intel-ucode</code> 目錄下的所有檔案到 <code>/lib/firmware/intel-ucode/</code> 下面:
你隻需要将 <code>intel-ucode</code> 這個目錄整個拷貝到 <code>/lib/firmware/</code> 目錄下即可。然後在重新加載接口中寫入 <code>1</code> 去重新加載微碼檔案:
更新現有的 initramfs,以便于下次啟動時它能通過核心來加載:
重新開機後通過以下的指令驗證微碼是否已經更新:
到此為止,就是更新處理器微碼的全部步驟。如果一切順利的話,你的 Intel CPU 的固件将已經是最新的版本了。
原文釋出時間:2018-03-07