У меня есть небольшое встраиваемое устройство (MIPS), работающее под управлением очень легковесного Linux.
Он способен монтировать общие ресурсы NFS (вручную)устанавливатькоманда).
Однако я хочу монтировать его автоматически, поэтому я определил его вfstabфайл.
Проблема в том, что на момент обработки fstab устройство не имеет доступного соединения:
mount: mounting 10.1.1.1:/srv/fs on /nfs failed: Input/output error
Затем система продолжает загрузку (инициализирует модуль Wi-Fi, подключается к точке доступа и запрашивает IP-адрес с помощьюudhcpc.
После того, как udhcpc успешно получит IP-адрес, я могу запустить:
mount -a
и /nfs будет успешно смонтирован.
Как мне указать fstab ждать и постоянно повторять попытки?
Обратите внимание, что это урезанный Linux. Скрипты systemd или ifup отсутствуют.
Конечно, я могу запустить скрипт при загрузке, который будет постоянно выполнять команду «mount -a» до тех пор, пока не произойдет успех, но это метод грубой силы, и я ищу что-то более сложное, если таковое существует.
решение1
Обычное решение — сделатьDHCP-клиентинформировать вас после того, как он закончит настройку сети. Большинство клиентов DHCP имеют возможность запускать скрипты оболочки "hook" для этой цели, и udhcpc тоже. Согласнодокументация,
Когда происходит событие, udhcpc вызывает сценарий действия. Сценарий по умолчанию -/usr/share/udhcpc/default.scriptно это можно изменить с помощью аргументов командной строки. Три возможных аргумента для скрипта: [...]
граница: Этот аргумент используется, когда udhcpc переходит из несвязанного в связанное состояние. Все параметры задаются в переменных окружения, скрипт должен настроить интерфейс и задать любые другие соответствующие параметры (шлюз по умолчанию, сервер DNS и т. д.).
Это означает, что вы можете просто поместить скрипт оболочки в нужное место (используйте --script
опцию при необходимости) и заставить его запускать монтирования всякий раз, когда он вызывается с $1
параметром, установленным в значение bound
.
#!/bin/sh
if [ "$1" = bound ]; then
mount -a
fi