問題
システムは起動プロセスを続行できず、エラー メッセージが表示されたままになります:
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
解決策
systemd ユニットが lvmetad を呼び出した場合 が有効で実行されている場合、メタデータがキャッシュされてディスクのスキャンが減り、LVM コマンドに VG メタデータと PV 状態が提供されます。 LVM コマンドは、ディスクからの情報の読み取りを回避します。基盤となるボリューム グループと物理ボリュームに変更がある場合、LVM メタデータ キャッシュにディスクの変更に関する情報が含まれていない可能性があり、この問題が lvm_scan-sd* などの LVM コマンドでスタックする可能性があります。
もう 1 つの要因として、カーネル パラメータ vm.nr_hugepages の設定が正しくないか不適切なため、このスキャン中にメモリ割り当てが失敗する可能性があります。 .ヒュージ ページは、OS が使用できないメモリの一部を割り当てて専用にするように構成できます。
1. レスキュー ディスクを使用してシステムをレスキュー モードで起動します。
CentOS / RHEL 7 :インストール DVD/ISO からレスキュー モードで起動する方法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
5. /etc/lvm/lvm.conf を編集します 次の行を置き換えます:
差出人:
use_lvmetad = 1 to use_lvmetad = 0
6. 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
7. 変更を有効にするためにシステムを再起動します。
# shutdown -r now