在彈性裸金屬執行個體規格的ECS執行個體中,使用作業系統內建的Kdump服務產生crash dump檔案可能會失敗。本文主要介紹檔案產生失敗的原因以及解決方案。
問題現象
目前已知的問題情境說明如下,該類情境中的ECS執行個體在熱插拔裝置之後,不能成功產生crash dump檔案。
基於6代彈性裸金屬執行個體規格類型系列(包含ebmg6、ebmc6、ebmr6等執行個體規格)的ECS執行個體,在選用以下鏡像時會出現crash dump檔案產生失敗的問題。
CentOS 8.3及以下版本
Ubuntu 16/18
Debian 10
核心版本低於4.19.91-24.al7的Alibaba Cloud Linux 2
基於7代彈性裸金屬執行個體規格類型系列(包含ebmg7、ebmc7、ebmr7等執行個體規格)的ECS執行個體,在選用Debian 10鏡像時會出現crash dump檔案產生失敗的問題。
問題原因
ECS執行個體內Kdump服務在crashkernel
階段,塊裝置vda的pci_resource
資源分派失敗,導致無法成功產生crash dump檔案。造成該問題的根本原因是執行個體規格與作業系統不相容。命令列回顯結果樣本如下圖所示:
解決方案
您可以通過以下任一方式解決該問題:
方式一:自行升級作業系統核心至5.10版本。
方式二:為作業系統新增以下補丁,並重新構建核心(build kernel)。
Benjamin Herrenschmidt (1): PCI: Don't auto-realloc if we're preserving firmware config Kelsey Skunberg (1): PCI: Make pci_hotplug_io_size, mem_size, and bus_size private Logan Gunthorpe (1): PCI: Don't disable bridge BARs when assigning bus resources Nicholas Johnson (2): PCI: Add "pci=hpmmiosize" and "pci=hpmmioprefsize" parameters PCI: Avoid double hpmemsize MMIO window assignment
說明部分核心版本已包含上述的部分補丁,您仍需要將未包含的補丁添加至核心中。例如,Debian 10的4.19核心版本已經包含了上述的第1、3個補丁,但還需要將第2、4、5個補丁添加至核心之後才可以使作業系統正常使用Kdump服務。
除了升級核心版本或為核心打補丁之外,您還需要注意:
對於Debian或Ubuntu作業系統核心,需要調整crashkernel
保留記憶體的參數。推薦的參數設定如下:
crashkernel=0M-2G:0M,2G-8G:192M,8G-:256M
部分作業系統鏡像(例如Debian 10)需要調整保留記憶體為384 M或者512 M。如果保留記憶體的值未調大,則會導致Kdump服務在crashkernel
階段發生OOM,從而產生crash dump檔案失敗。
以大於384 M的記憶體需要保留256 M的配置為例,調整crashkernel
保留記憶體參數的操作說明如下:
開啟/kdump-tools.cfg檔案。
vim /etc/default/grub.d/kdump-tools.cfg
按i鍵進入編輯模式,將
crashkernel
參數修改為以下內容。GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT crashkernel=384M-:256M"
修改完成後,按Esc鍵,輸入
:wq
並按Enter鍵,儲存退出檔案。更新GRUB配置。
update-grub
重啟ECS執行個體使配置生效。
建議您在業務低峰時段重啟ECS執行個體,減少因執行個體重啟對實際業務運行產生的影響。重啟ECS執行個體的具體操作,請參見重啟執行個體。