Какой модуль zfs command / systemd должен зависеть, чтобы обеспечить доступность точки монтирования?

Вот что я придумал примерно через 5-10 минут, просто играя с AWK.

$ select entry in $(awk '{printf "%s-%s ",$1,$2}'  ips.txt) ; do                                      
> ip_address=$(awk -F '-' '{print $1}' <<< "$entry" )                                                                 
> echo "You selected "  "$ip_address"
> done
1) 127.0.0.1-us
2) 127.0.0.2-uk
3) 127.0.0.3-cn
4) 127.0.0.4-fr
5) 127.0.0.5-ru
6) 127.0.0.6-bd
7) 127.0.0.7-hk
#? 2
You selected  127.0.0.2

Трудная часть вашего вопроса - это просто обработка строк текстового файла, который может быть соответствующим образом использован структурой select, потому что у вас есть две записи в строке. Ну, почему бы не превратить их в один элемент и просто отправить процесс для извлечения ip-адреса? Это именно то, что я делаю в коде выше.

Обратите внимание, что первая подстановка параметров не задана без кавычек - мы хотим, чтобы первая команда расширялась до каждого отдельного элемента, разделенного пробелами, мы не хотим, чтобы он рассматривался как одна строка.

Что хорошего в этом подходе, так это то, что он невосприимчив к отсутствующему местоположению, например, если в выборе # 2 uk отсутствует, мы все равно будем читать 127.0.0.2

2
задан 23 December 2017 в 19:56

2 ответа

Системные значения по умолчанию

Здесь много магии, но на Ubuntu 18.04 ответ обычно кажется zfs.target, который указан как WantedBy для всех различных zfs-*.service s ( mount, modprobe и т. д.). Вы увидите это, если будете читать через

more /lib/systemd/system/zfs* | less

. Вы можете заметить, что есть и zfs-import.target, который выполняется после того, как zpool import запущен, но до того, как монтируются файловые системы.

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

Конкретные точки монтирования

Для конкретных точек монтирования я бы рекомендовал не полагаться на общий zfs.target, а скорее добавить свой собственный сервис (возможно, с Wants=zfs.target), который проверяет состояние конкретных монтировок, на которые опирается ваша система. Например, если вы полагаетесь на установленный /blah/my/zfs/mount, просто создайте службу для того, что может проверить статус монтирования zfs перед возвратом, возможно, с помощью

zfs get mounted blah/my/zfs/mount | grep yes

Пример

/etc/systemd/system/my-zfs-mount.service

[Unit] Description=ZFS mount blah/my/zfs/mount Wants=zfs.target [Service] Type=oneshot RemainAfterExit=true ExecStart=/sbin/zfs get mounted blah/my/zfs/mount | grep yes [Install] WantedBy=multi-user.target

И тогда ваши другие сервисы могут зависеть от этого.

0
ответ дан 18 July 2018 в 00:35

Системные значения по умолчанию

Здесь много магии, но на Ubuntu 18.04 ответ обычно кажется zfs.target, который указан как WantedBy для всех различных zfs-*.service s ( mount, modprobe и т. д.). Вы увидите это, если будете читать через

more /lib/systemd/system/zfs* | less

. Вы можете заметить, что есть и zfs-import.target, который выполняется после того, как zpool import запущен, но до того, как монтируются файловые системы.

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

Конкретные точки монтирования

Для конкретных точек монтирования я бы рекомендовал не полагаться на общий zfs.target, а скорее добавить свой собственный сервис (возможно, с Wants=zfs.target), который проверяет состояние конкретных монтировок, на которые опирается ваша система. Например, если вы полагаетесь на установленный /blah/my/zfs/mount, просто создайте службу для того, что может проверить статус монтирования zfs перед возвратом, возможно, с помощью

zfs get mounted blah/my/zfs/mount | grep yes

Пример

/etc/systemd/system/my-zfs-mount.service

[Unit] Description=ZFS mount blah/my/zfs/mount Wants=zfs.target [Service] Type=oneshot RemainAfterExit=true ExecStart=/sbin/zfs get mounted blah/my/zfs/mount | grep yes [Install] WantedBy=multi-user.target

И тогда ваши другие сервисы могут зависеть от этого.

0
ответ дан 24 July 2018 в 17:15

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

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