systemd-udevd: Event time out: resolving /sys/devices/... taking too long
Linux / DevOps
Ошибка systemd-udevd: Event time out resolving sys devices — Решение
Во время загрузки системы или подключения оборудования systemd-udevd зависает, выводя: systemd-udevd: Event time out: resolving /sys/devices/... taking too long с последующим принудительным завершением worker-процесса (killing worker).
| Компонент сбоя | Тайм-аут по умолчанию | Следствие |
|---|---|---|
| Сетевые интерфейсы / SR-IOV | 180 секунд | Задержка загрузки ОС, сетевые карты не переименовываются |
| Дисковые массивы / Multipath | 180 секунд | Не создаются символические ссылки в /dev/disk/by-id/ |
| Пользовательские udev-правила | Блокирующий вызов | Worker блокируется скриптом, ожидающим сеть или ресурс |
- Включите подробный дебаг udev для локализации проблемного правила:
sudo udevadm control --log-priority=debug sudo journalctl -u systemd-udevd.service -f - Проверьте кастомные правила в
/etc/udev/rules.d/на наличие долгих блокирующих командPROGRAM=илиRUN+=:grep -rn "RUN+=" /etc/udev/rules.d/ - Убедитесь, что все скрипты в
RUN+=запускаются асинхронно либо через отдельный systemd-юнит (TAG+="systemd"). - Увеличьте или скорректируйте тайм-аут в параметрах загрузки ядра или в
/etc/udev/udev.conf:sudo nano /etc/udev/udev.conf # Задайте лимит выполнения события: event_timeout=60 - Обновите initramfs и перезагрузитесь:
sudo update-initramfs -u # Debian/Ubuntu sudo dracut -f # RHEL/CentOS
Архитектурный стандарт: Запрещено использовать в правилах udev команды, требующие сетевого подключения (curl, mount NFS), так как на этапе работы udev сеть еще не инициализирована.
Практический опыт инженера:
В 90% случаев сбой на серверах вызван попыткой инициализации несуществующих LUN Fibre Channel или зависшими NFS/iSCSI таргетами.
Частые вопросы (FAQ)
Почему udevd убивает worker процесс?
Если обработка события udev не завершается в течение event_timeout (по умолчанию 180с), udevd принудительно убивает worker по SIGKILL во избежание зависания загрузки ОС.
Как протестировать конкретное правило udev?
Используйте команду: udevadm test /sys/class/net/eth0 (или путь к вашему устройству).