Что надлежащий путь состоит в том, чтобы активировать VGs/LVs автоматически на начальной загрузке?

Самый простой способ, который я могу придумать, это получить pid до того, как вы запустите процесс.

Например (в bash):

pidfile() { (
    echo $BASHPID > "$1"
    shift
    exec "$@"
) }

mkfifo /var/run/out
while true
do
    pidfile /tmp/cat.pid cat /var/run/out | pidfile /tmp/nc.pid nc -l 8080 > >(
        while read line
        do
            do some stuff
        done
    )
done

Создается функция pidfile, которая записывает текущий PID в указанный файл, а затем выполняет остальные аргументы, используя exec. Функция exec вызывает выполнение команды с тем же pid, что и оболочка, которая только что записала файл.

Обернем всю функцию pidfile() в круглые скобки (), чтобы убедиться, что она выполняется в подоболочке. Ситуация, когда это становится критической, заключается в выполнении команды, которая не находится в процессе обработки. Например:

pidfile /tmp/foo some command here

Когда вы делаете это таким образом, pidfile() будет выполняться в том же процессе, что и остальной скрипт, и поэтому, когда он вызывает exec, выполняемая команда примет PID, и скрипт больше не будет выполняться.

Также обратите внимание, что все вышесказанное написано для bash. $BASHPID является переменной, специфичной для bash. $$ не изменяется при использовании подоболочки, поэтому значение неверно для нашего использования.

1
08.04.2015, 18:17
1 ответ

Да, что-то должно запустить утилиту LVM (как вы говорите, vgchange-y или аналогичный) в какой-то момент. Там нет магии, которая заставляет ядро ​​рисуться тем сама собой.

В initramfs это обычно делается скриптом / init (прямо или косвенно). Некоторые системы также сканируют для VG / LV всякий раз, когда UDEV рассказывает о новом диске, но с DevTMPFS у вас тоже нет этой опции.

Итак, да, конечно, просто сделайте скрипт init для LVM и имейте каким-то образом систему INIT INING.

1
27.01.2020, 23:50

Теги

Похожие вопросы