您的位置:首页 >如何在Linux中配置具体的系统物理内存保留区大小
发布于2026-08-12 阅读(0)
扫一扫,手机访问
有个细节很容易踩坑:crashkernel 参数必须写进 GRUB_CMDLINE_LINUX,不能放到 _GRUB_CMDLINE_LINUX_DEFAULT 里,不然内核根本不会解析。配置完之后,别只看“像是生效了”,最好做三步确认:先用 cat /sys/kernel/kexec_crash_size 看返回值是否非零;再检查 dmesg 里有没有 “Reserving...for crashkernel”;最后确认 /proc/iomem 中是否出现 “Crash kernel” 条目。这三项都对上,才算真正生效。

Linux 中为 kdump 预留内存,crashkernel= 必须出现在 GRUB_CMDLINE_LINUX(而非 GRUB_CMDLINE_LINUX_DEFAULT)里,否则内核根本不会解析它。很多用户改错位置后发现 dmesg | grep -i crash 没输出、/sys/kernel/kexec_crash_size 为 0,就是这个原因。
实操建议:
/etc/default/grub,找到 GRUB_CMDLINE_LINUX= 行(不是 _DEFAULT),在其引号内添加 crashkernel=128M 或更复杂的表达式GRUB_CMDLINE_LINUX="crashkernel=128M"sudo update-grub 再 sudo reboot,否则修改不生效crashkernel=auto 这项配置,别把它理解成“系统会自动挑一个最优值”。它本质上还是按硬编码规则去查表执行:在 x86_64 平台上,只有物理内存 ≥ 1GB 时才会生效;而 ARM64 和 Power 平台,则要求物理内存 ≥ 2GB。达不到这个门槛,系统就不会预留任何内存——这时在 /proc/meminfo 里也看不到 CmaTotal,同时 kdump 服务启动会直接失败,并报出 “No memory reserved for crash kernel”。
手动指定更可靠:
crashkernel=128M:固定预留 128MB,适用于内存 ≥ 2GB 的常见服务器crashkernel=512M-2G:64M,2G-:128M:按物理内存分段预留,避免小内存机器浪费过多M(兆字节)合法,m 或 MB 在多数内核版本中会被忽略或报错mem= 是限制内核可管理的内存上限,比如 mem=32G 在 64G 机器上,会导致后 32G 物理内存完全不可见 —— /proc/meminfo 的 MemTotal 就是 32G,dmesg 里 e820 显示那段区域标记为 reserved,但这段内存连 DMA、PCIe 设备都用不了,和 kdump 的 crashkernel 机制完全无关。
典型误用场景:
mem=,结果网卡驱动报 dma_alloc_coherent failedcrashkernel= 同时使用,导致实际可用内存远低于预期(两者叠加裁剪)mem= 值设得过大(如 mem=128G 在 64G 机器上)会被内核静默忽略,但日志里会有 warning/proc/meminfo 的 MemTotal 是扣除 crashkernel 后的可用内存,但它不体现预留区本身。真正确认方式是:
cat /sys/kernel/kexec_crash_size —— 输出非 0 即已分配(单位字节)dmesg | grep -i "crash kernel" —— 应出现类似 Reserving 131072K of memory at 0x37b00000 for crashkernelcat /proc/iomem | grep "Crash kernel" —— 显示该段物理地址范围,且状态为 reserved如果 kexec_crash_size 为 0,但 iomem 里有 Crash kernel 条目,说明 kdump 服务没起来或未加载模块;如果两者都无,则 GRUB 配置或内核参数根本没生效。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9