При загрузке системы с установленным udev-096-alt1 вызов udevsettle иногда завершается аварийно (Populating /dev [FAILED]), в результате дальнейшая загрузка продолжается, не дожидаясь завершения создания всех файлов устройств, что в дальнейшем приводит к различным проблемам. Кроме того, скрипт /etc/init.d/udevd при ошибке udevsettle отмонтирует tmpfs, ранее смонтированный в /dev, но перед этим не останавливает запущенный udevd, в результате udevd продолжает писать в /dev на корне вместо tmpfs. Как выяснилось, причина ненадёжной работы udevsettle - race при инициализации. В udevsettle предполагается, что запуск udevd выполняется с ключом --daemon; запущенный таким образом udevd сначала создаёт файл /dev/.udev/uevent_seqnum, и только потом выполняет fork() и начинает работать как демон. Однако в /etc/init.d/udevd запуск udevd выполняется без ключа --daemon, вместо этого используется ключ --make-pidfile функции start_daemon. В результате после завершения выполнения функции start_daemon инициализация демона может быть ещё не завершена, и последующий вызов udevsettle может обнаружить отсутствие файла /dev/.udev/uevent_seqnum, в этом случае он завершается с ошибкой. Наиболее правильный способ решения данной проблемы - добавить создание pid-файла в сам udevd и не использовать ключ --make-pidfile. Однако есть более простой способ обхода проблемы - создать файл /dev/.udev/uevent_seqnum заранее, чтобы при вызове udevsettle он гарантированно существовал.
Created attachment 1583 [details] fake /dev/.udev/uevent_seqnum for udevsettle Можно просто записать 0 в /dev/.udev/uevent_seqnum. Вызовы sync, которые были вставлены при попытке скрыть race, теперь можно удалить (они всё равно не давали требуемого эффекта).
Сергей, мне кажется что лучше тебя никто эту ошибку всё равно не исправит.
Fixed in udev-097-alt1.