udev: устройство подключено во время загрузки - PullRequest
6 голосов
/ 23 августа 2011

Я использую udev для обнаружения подключения и отключения USB-накопителя на моем сервере Ubuntu 10.04 LTS x64. Все работает нормально, когда USB-устройства подключены во время работы машины, но если они уже присутствуют во время загрузки, мой сценарий не завершается, по-видимому, потому что mkdir /tmp/blah не работает.

Если я потом наберу sudo udevadm trigger в терминале, все в порядке.

Я предполагаю, что в тот момент, когда udev сначала оценивает подключенные устройства по своим правилам, корневая файловая система не была смонтирована.

Поэтому мои вопросы:

  1. Правильно ли я идентифицировал проблему?
  2. Есть ли стандартный способ ее решения - то есть есть ли альтернатива /tmp/, что я могу использовать оба до и после монтирования /?

Ответы [ 3 ]

5 голосов
/ 23 августа 2011

Корневая файловая система смонтирована, но в данный момент доступна только для чтения. /dev/shm (файловая система в памяти) должна быть доступна; В более новых дистрибутивах Linux также может быть ramdisk /run. Вы также можете выбрать постоянный каталог где-нибудь, смонтировать над ним tmpfs в своем скрипте и выполнить там свою работу.

2 голосов
/ 16 января 2013

Одним из решений этой проблемы является написание скрипта, который вызывается вашими правилами udev, который немедленно отсоединяется и ожидает некоторого события, чтобы убедиться, что система «достаточно загружена» для создания точек монтирования и т. Д. Для монтирования ваших устройств. , Человек, который ответил на следующий пост (http://superuser.com/questions/53978/ubuntu-automatically-mount-external-drives-to-media-label-on-boot-without-a-u), написал сценарий, который проверяет, запущен ли httpd, прежде чем продолжить. Я уверен, что, вероятно, есть и другие "лучшие" способы сделать это тоже.

1 голос
/ 23 августа 2011

1 - Я не знаю, даже в initramfs, до монтирования корневой файловой системы существует каталог / tmp с возможностью записи.

True, когда монтируется настоящий корень, этот / tmp будетотбрасывается и финал / tmp будет пустым.Вы уверены, что команда mkdir /tmp/blah не работает?Или вы предполагаете, что поскольку его там нет, когда вы его ищете?

2- В Ubuntu (я не знаю других дистрибутивов) у вас есть скрытый каталог в /dev/.initramfs для такого рода потребностей.,Поскольку /dev - это точка монтирования tmpfs (или devtmpfs), сохраненная в конечной корневой файловой системе, она все равно будет там находиться.

...