Понимание процесса загрузки Linux, инициализация подсистемы и правила udev?

Я создаю правила UDEV для автоматического монтирования внешних дисков на автономном сервере, во многом так же, как Gnome-VFS выполняет автоматическое монтирование во время сеанса пользователя.

Я обеспокоен поведением правила во время загрузки. Есть большая вероятность, что один из этих дисков будет подключен во время загрузки, и я бы предпочел, чтобы все подключенные диски были подключены в нужном месте. Диски могут быть либо USB, либо Firewire, и они монтируются из сценария оболочки, запускаемого UDEV при обнаружении "добавления".

Вот мои вопросы:

  1. Когда UDEV запускает mount для этих устройств при загрузке система будет готова к монтированию? Или сценарий будет запущен слишком рано?

  2. Если это слишком рано, каков хороший сценарий, чтобы сказать, что система еще не готова (так что поспите, прежде чем проверять снова)?

  3. Правило UDEV соответствует ACTION=="add", Это событие даже срабатывает при загрузке системы?

4 ответа

Только что заполучил udev, чтобы заставить USB-накопитель автоматически монтироваться, когда не работает графический интерфейс (и не используется autofs).

  1. Да, Вероника, Удев бежит очень рано.

    Сценарии агента могут с радостью отключаться и запускаться после сна.

  2. Udevadm урегулирования может помочь вам в дополнение к проверке уровня выполнения.

  3. action ="Add" запускается при загрузке, а не просто hotplug.

Если действие ="удалить" выполняется при выключении, теперь это рыба другого цвета.

Вы объединяете две концепции. Вы должны использовать UDEV для назначения постоянных имен устройств накопителям, которые будут постоянными независимо от того, в каком порядке они подключены. Затем вы можете использовать autofs для монтирования их по требованию в тех местах, где вы хотите, чтобы они были доступны.

  1. Нет, UDEV отключит этот сценарий (если он вообще появится) задолго до того, как система будет готова к монтированию; UDEV начинается в /etc/rcS.d/S03udevи стандартные fstab монтируются в /etc/rcS.d/S35mountall.sh,

  2. Лучше, чем просто гадать; проверьте /bin/runlevel (спасибо Brent & rh0dium):

    # at boot, system runs /etc/rcS.d/S* scripts, 
    #                 then /etc/rcN.d/S* scripts, N is destination runlevel
    # runlevel not set at least until we're running /etc/rcN.d scripts
    
    RUNLEVEL=`/sbin/runlevel | cut -d " " -f 2`
    until [ $RUNLEVEL -ge 1 ] && [ $RUNLEVEL -le 6 ]; do
          sleep 10
          RUNLEVEL=`/sbin/runlevel | cut -d " " -f 2`
    done
    
    ## run the action i want here
    
  3. Точно сказать не могу.

Я не думаю, что правила udev являются предпочтительным решением для этого. Я думаю, что вам будет гораздо лучше работать с autofs или, может быть, с ivman, когда система загрузится, udev - это очень низкий уровень, на котором можно подключиться, и есть много инструментов, построенных поверх него, таких как Gnome-VFS, которые проще использовать и управлять. В конечном счете, вы беспокоитесь о монтировании доступа (то есть автозаполнения) и наличии предсказуемых механизмов высокого уровня для обнаружения или реагирования на сбой. Если вы работаете на уровне udev, вам снова придется заняться всеми этими проблемами.

Другие вопросы по тегам