# 配置操作系统dump
#### 操作场景
云服务器的操作系统在运行过程中如果出现故障，可能导致系统崩溃，例如操作系统蓝屏或死机。在这种情况下，如果使用操作系统dump，系统会将内存中的数据以存储文件的形式进行保存，以便于进行云服务器的故障定位和问题分析。
本文介绍如何配置操作系统dump的方法。
- [配置操作系统dump（Windows）]
- [配置操作系统dump（Linux）]
 
#### 背景知识
操作系统dump，即内核转储或崩溃转储，是当云服务器系统运行出现异常时，对操作系统内存数据的实时完整备份。
操作系统dump功能主要利用操作系统内核对硬件异常的处理能力。操作系统内核可以监测到硬件异常，并根据异常的类型来决定处理方式。当系统遇到无法处理的异常或错误时，系统的部分或全部运行状态信息将会转储到磁盘上，这些状态信息包括：CPU的寄存器、物理内存、进程状态、文件系统状态、硬件设备状态等。
操作系统dump可以由以下几种方式触发：
- 系统崩溃：当操作系统遇到无法处理的异常或错误时，例如非法的内存访问、内核panic等，系统会自动触发dump。
- 手动触发：系统管理员也可以通过一些命令或者操作手动触发系统dump，例如在Linux系统中可以通过向/proc/sysrq-trigger写入c字符来触发系统dump。
- 计划触发：某些情况下，系统管理员为了获取系统的某一时刻的运行状态信息，或者模拟系统崩溃的情况，也可以设置在某一特定的时间触发系统dump。
在多数情况下，为了准确获得系统dump，需要对系统进行相关的配置，例如在Linux系统中，需要配置kdump服务等。本文主要介绍手动触发dump的操作指导。
#### 约束与限制
- 执行操作系统dump会重启云服务器，请提前做好业务备份，避免数据丢失。
- 鲲鹏架构的云服务器不支持操作系统dump。
- 支持运行中、故障状态的云服务器进行操作系统dump。
- 仅支持对4vCPUs，8GiB内存以上规格的ECS使用操作系统dump功能。
- dump转储文件目标保存位置必须具有足够可用空间，需大于ECS规格的内存。
 
 #### 配置操作系统dump（Windows）
本文以Windows Server 2016版本操作系统为例进行介绍，更多版本的操作，请参考对应操作系统官网帮助文档。
1. [远程登录云服务器](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0092494943.html)。
2. 在"控制面板中，打开"系统 \> 高级系统配置"。
   图1高级系统配置   
   ![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0000001934673973.png "点击放大") 
3. 在"系统属性"的"性能"区域，单击"设置"。
4. 在"高级"页签的"虚拟内存"区域，单击"更改"。
   图2性能选项设置   
   ![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0000001891661536.png "点击放大") 
5. 在"虚拟内存"页面，勾选"自动管理所有驱动器的分页文件大小"。
   图3虚拟内存设置   
   ![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0000001891443900.png "点击放大") 
6. 单击"确定"，完成虚拟内存设置。
7. 在"系统属性"的"启动和故障恢复"区域，单击"设置"。
8. 设置参数。
   - 写入调试信息：设置为"完全内存转储"。
   
   - 转储文件：可以将路径从"*%SystemRoot%\\Memory.dmp* "更改为指向具有足够磁盘空间的本地驱动器，例如"*E：\\Memory.dmp*"。
   
   
   图4启动和故障恢复设置   
   ![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0000001891436096.png "点击放大") 
9. 单击"确定"。
10. 重启云服务器，完成配置。
 
 #### 配置操作系统dump（Linux）
本文以CentOS 7.5版本操作系统为例进行介绍，更多版本的操作，请参考对应操作系统官网帮助文档。
1. [远程登录云服务器](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771089.html)。
2. 执行以下命令，安装kexec-tools。 **yum install kexec-tools**
   
3. 执行以下命令，查看crashkernel预留内存大小。 **cat /etc/default/grub**
   ```
   GRUB_TIMEOUT=5
   GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
   GRUB_DEFAULT=saved
   GRUB_DISABLE_SUBMENU=true
   GRUB_TERMINAL_OUTPUT="console"
   GRUB_CMDLINE_LINUX="net.ifnames=0 consoleblank=600 console=tty0 console=ttyS0,115200n8 spectre_v2=off nopti crashkernel=auto  "
   GRUB_DISABLE_RECOVERY="true"
   ```
   
4. 执行以下命令，设置crashkernel的大小。 **vim /etc/default/grub**
   当前crashkernel预留内存大小为"auto"，您可以在"GRUB_CMDLINE_LINUX"字段，修改"**crashkernel**"的值，设置crashkernel的大小。
   ```
   GRUB_TIMEOUT=5
   GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
   GRUB_DEFAULT=saved
   GRUB_DISABLE_SUBMENU=true
   GRUB_TERMINAL_OUTPUT="console"
   GRUB_CMDLINE_LINUX="net.ifnames=0 consoleblank=600 console=tty0 console=ttyS0,115200n8 spectre_v2=off nopti crashkernel=256M"
   GRUB_DISABLE_RECOVERY="true"
   ```
   ![](https://support.huaweicloud.com/usermanual-ecs/public_sys-resources/note_3.0-zh-cn.png)
   您可以根据系统架构决定crashkernel预留内存大小，过小会导致生成coredump文件失败。
   当前示例的系统内存是1GiB，预留内存设置为256M。
   
5. 执行以下命令，重新生成grub配置文件。 **grub2-mkconfig -o /boot/grub2/grub.cfg**
   
6. 执行以下命令，编辑内核参数文件/etc/sysctl.conf。 **vim /etc/sysctl.conf**
   在/etc/sysctl.conf配置文件中增加以下参数，以便于在收到NMI时将操作系统切换到应急模式，并生成内存转储。
   ```
   kernel.panic_on_unrecovered_nmi=1
   kernel.unknown_nmi_panic=1
   ```
   
7. 重启系统。 **reboot**
   
8. 执行以下命令，修改kdump默认配置/etc/kdump.conf。 **vim /etc/kdump.conf**
   ```
   #指定coredump文件存储位置
   path /var/crash
   #增加-c参数，代表压缩coredump文件
   core_collector makedumpfile -c -l --message-level 1 -d 31
   #生成coredump后，重启系统
   default reboot
   ```
   
9. 执行以下命令，开启kdump服务并设置开机自启动。 **systemctl start kdump.service**
   **systemctl enable kdump.service**
   
10. 执行以下命令，检查kdump是否开启成功。 **service kdump status**
    ```
    Redirecting to /bin/systemctl status kdump.service
    ● kdump.service - Crash recovery kernel arming
       Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
       Active: active (exited) since Wed 2024-05-22 21:19:47 CST; 11min ago
     Main PID: 591 (code=exited, status=0/SUCCESS)
       CGroup: /system.slice/kdump.service
    ```
    **systemctl is-active kdump.service**
    ```
    active
    ```
    
 
#### 触发操作系统dump
1. 登录[管理控制台](https://console.huaweicloud.com/console/?#/home)。
2. 单击管理控制台左上角的![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0000002188678994.png)，选择区域和项目。
3. 单击"![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0000001854788188.jpg)"，选择"计算 \> 弹性云服务器"。
4. 在弹性云服务器列表的"操作"列，单击"更多 \> 故障排查 \> 触发操作系统dump"。
5. 了解风险须知后，勾选已知晓风险的提示。
6. 单击"确定"，完成触发操作系统dump。
 
