问题

CentOS/RHEL系统无法继续启动过程,并出现错误消息:

systemd-udevd[369]: fork of '/bin/sh -c '>/tmp/.lvm_scan-sdc;'' failed: Cannot allocate memory
A start job is running for dev-mapper-\x2droot.device
on  it road.com

解决方案

如果名为 lvmetad 的 systemd 单元已启用并正在运行,则元数据将被缓存,从而减少磁盘扫描,并为 LVM 命令提供 VG 元数据和 PV 状态。
然后 LVM 命令将避免从磁盘读取信息。
如果底层卷组和物理卷发生任何更改,LVM 元数据缓存可能没有有关磁盘更改的信息,这可能导致此问题停留在 LVM 命令(例如 lvm_scan-sd*)上。

另一个因素是,在此扫描期间,由于内核参数 vm.nr_hugepages 的设置不正确或者不合适,内存分配可能会失败。
可以配置巨大的页面来分配和专用一部分操作系统无法使用的内存。

  1. 使用 Rescue 盘将系统引导至 Rescue 模式。

  2. 确保 /etc/sysctl.conf 中的大页面设置为推荐值,以避免出现“无法分配内存”错误。

  3. 我们可以在 /etc/systcl.conf 中禁用大页面设置,看看这是否是导致问题的原因。
    编辑 /etc/sysctl.conf 并确保 vm.nr_hugepages 不存在或者将其替换为 #vm.nr_hugepages = 。

  4. 禁用lvmetad:

# systemctl disable lvm2-lvmetad
# systemctl disable lvm2-lvmetad.socket
  1. 编辑 /etc/lvm/lvm.conf 并替换以下行:

从:

use_lvmetad = 1 to use_lvmetad = 0
  1. 重新构建 initramfs 以适应特定内核的更改:
# cp /boot/initramfs-[kernel version].img /root
# cd /boot
# dracut -f -v initramfs-[kernel].img [kernel]

例如:

# dracut -f -v initramfs-3.10.0-514.el7.x86_64.img 3.10.0-514.el7.x86_64
  1. 重新启动系统以使更改生效:
# shutdown -r now
CentOS/RHEL 无法启动 systemd-udevd failed: Cannot allocate memory
日期:2020-09-17 00:12:22 来源:oir作者:oir