LINUX.ORG.RU
ФорумAdmin

Запуск .mount после isc-dhcp-server в systemd в debian 11

 , , ,


0

2

Добрый день, пытаюсь разобраться с настройками systemd!

На сервере поднимается dhcp с помощью isc-dhcp-server. Затем включается СДХ, получает ip согласно настройкам в /etc/dhcp/dhcpd.conf (198.168.8.1) и затем, я хочу подключатся по nfs к папкам на этой СДХ. Например, сделал в /etc/systemd/system/ файл home.mount

[Unit]
Description = Mount NFS home

[Mount]
What=192.168.8.1:/NAS/RAID0_home
Where=/home
Type=nfs
Options=rw,async,noauto,soft

[Install]
WantedBy=multi-user.target

Если его запустить systemctl start home.mount, то все отлично монтируется. Однако, я хочу чтобы при перезагрузке также происходило автоматическое монтирование папки и тут начинаются проблемы. Т.к. похоже dhcp поднимается уже после попытки монтирования. Логи монтирования выглядят так:

systemd[1]: Mounting Mount NFS home...
systemd[1]: home.mount: Mounting timed out. Terminating.
systemd[1]: home.mount: Mount process exited, code=killed, status=15/TERM
systemd[1]: home.mount: Failed with result 'timeout'.
systemd[1]: Failed to mount Mount NFS home.

По логике требуется просто в [Unit] добавить правильные команды типа After=network.target. Но я не понимаю, какой именно объект добавлять в правой части. Я так понимаю, что isc-dhcp-server нормально не взаимодействует с systemd? Читал что можно через systemd-networkd поднимать dhcp, но для этого придется переделывать конфиг по типу dhcpd.conf?

Выглядит все как глупость. При чем тут вообще dhcp-сервер?

На сервере поднимается dhcp с помощью isc-dhcp-server.

явно не понимаешь, что пишешь. Какой dhcp и зачем он поднимается?

AVL2 ★★★★★
()

Вообще говоря, рекомендуется монтировать ФС через fstab, а не создавать юниты напрямую. Там можно написать _netdev в столбце опций и systemd сам всё поймёт.

Но выше правильно написали, что у тебя какая-то каша. Для начала определись, тебе нужен DHCP-сервер или всё-таки DHCP-клиент? И да, всё это можно делать через networkd. Если в твоём дистрибутиве он есть и актуальный — не поленись, перепиши конфиг, будет проще и удобнее.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Я такие файловые системы не монтирую, а добавляю юнит *.automount. Там же заодно можно указать таймаут для автоотмонтирования.

В этом случае они монтируются при обращении к директории, и это по сути самый поздний момент, после всего и только по необходимости.

AVL2 ★★★★★
()
9 февраля 2023 г.
Ответ на: комментарий от intelfx

Извините, долго не отвечал.

Как появилось время ещё посидел покопался.

У меня управляющий узер(сервер о котором я писал) является DHCP-сервером (если я правильно это называю), но к нему также подмонтируются разделы с СДХ. Т.е. не существует отдельного физического сервера задачи которого просто создавать сеть и все. Это осуществляется на управляющем узле о котором я говорю. Так как СДХ перезагружается крайне редко, то описываемая ситуация происходит при перезагрузке управляющего узла и, в идеале, в процессе загрузке системы должна создастся dhcp сеть, СДХ уже будет знать свой ip (так как сервер, только что перезагружен) и нужные папки должны будут подмонтироваться, а затем уже загружаться другие сервисы, такие как например slurm, конфиг которой лежит в общей папке на СДХ. Теперь по поводу того, почему все не работает так, как мне бы хотелось. Насколько я понимаю, по умолчанию модуль .mount грузится до remote-fs.target, при этом согласно конфигу, который сформирован автоматически systemd из init.d/isc-dhcp-server

systemctl cat isc-dhcp-server

[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/init.d/isc-dhcp-server
Description=LSB: DHCP server
Before=multi-user.target
After=remote-fs.target
After=network-online.target
After=slapd.service
After=nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SuccessExitStatus=5 6
ExecStart=/etc/init.d/isc-dhcp-server start
ExecStop=/etc/init.d/isc-dhcp-server stop

Т.е. существует строчка After=remote-fs.target, которая и заставляет dhcp-сервер запускаться позже. Если попытаться, что то изменить, т.е. systemctl edit isc-dhcp-server и добавить

[Unit]
Before=remote-fs.target

то это противоречит основному телу [Unit] и вызывает ошибку при загрузке системы и ‘skipping Remote File System’

Есть ли какой либо более менее простой способ заставить систему грузить сервесы в нужном мне порядке или придется использовать отдельный физический сервер для создания DHCP сети. Ну или есть альтернатива в виде .automount, но скорее всего в этом случае будут те же проблемы при поднятие серверов при загрузке, которые используют конфиги в общих папках.

dnkosiris
() автор топика
Ответ на: комментарий от dnkosiris

должна создастся dhcp сеть

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

СДХ уже будет знать свой ip

По идее, при обычной перезагрузке сервера, ваш СДХ/СХД должен помнить ранее выданый ip-адрес. То есть запуск dhcp-сервера не влияет на проблему монтирования. Или dhcp-сервер при завершении работы отзывает выданые ip-адреса?

Мне вобще не понятно, зачем фиксированым устройствам указывают получение адреса по dhcp?, Если СДХ/СХД будет заменён, всё одно переписывать конфиг dhcp, так как будет другой mac-адрес.

Чем не устраивает automount? А так, вам нужно чтобы юнит монтирования запускался после получения ip-адресах СХД.

mky ★★★★★
()
Последнее исправление: mky (всего исправлений: 1)
Ответ на: комментарий от AVL2

Я такие файловые системы не монтирую, а добавляю юнит *.automount. Там же заодно можно указать таймаут для автоотмонтирования.

И это тоже рекомендуют делать опцией x-systemd.automount в fstab.

intelfx ★★★★★
()
Ответ на: комментарий от dnkosiris

Т.е. существует строчка After=remote-fs.target, которая и заставляет dhcp-сервер запускаться позже. Если попытаться, что то изменить, т.е. systemctl edit isc-dhcp-server и добавить

Предлагаю сменить дистрибутив на вменяемый, т. е. на такой, в котором юнит для isc-dhcp-server написан вручную, а не сгенерирован из (криво написанного) SysV-скрипта. Потому что никакого After=remote-fs.target в этом юните по смыслу быть не должно.

А если серьёзнее, то в вашем локальном патче (который вы редактируете командой systemctl edit) нужно сделать так:

[Unit]
After=
After=network-online.target slapd.service nss-lookup.target
Before=remote-fs-pre.target

И да, вам нужно не Before=remote-fs.target, а Before=remote-fs-pre.target.


Хотя на самом деле это всё бесполезно. Между запуском DHCP-сервера и попыткой примонтировать ФС пройдёт очень мало времени, считанные миллисекунды. Вы точно уверены, что за это время СХД успеет обновить аренду и стать доступной по нужному адресу? Иначе достучаться до СХД всё равно не удастся.

И в любом случае не понятно, почему перезагрузка «управляющего сервера» должна заставить СХД потерять аренду. Если он правда её теряет, то мне кажется, что сеть попросту абсолютно неправильно спроектирована.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Похоже проблему решил, она действительно была связана не с настройкой модулей systemd, а с оборудованием. Большое спасибо, описанное выше помогло мне обратить внимание на взаимодействие сети и решить проблему.

dnkosiris
() автор топика