Условное `mount` в Linux: dev или nfs

Условное `mount` в Linux: dev или nfs

У меня есть точка монтирования — пусть будет /media/question— и два возможных устройства: физический HDD и удаленная папка NFS. Иногда я подключаю устройство физически, в других случаях я монтирую его через NFS.

Есть ли способ указать их оба, fstabчтобы при выполнении mount /media/questionпредпочтительнее был выбран физический том, а когда он недоступен — NFS?

решение1

Вам необходимо создать Bash-скрипт, который проверяет, существует ли физическое устройство, и если существует, монтирует устройство, в противном случае монтирует общий ресурс NFS.

Что-то вроде этого :

if [ -d /media/disk ] ; then {
mount /media/disk ...
}
else{ ...

Вы можете поместить этот скрипт в /etc/init.d для запуска при запуске или добавить в cron для проверки каждые 5 минут или через другой промежуток времени...

решение2

Вы также можете посмотреть на udev, если он установлен. Это позволяет выполнять действия при добавлении или удалении устройства; например, при появлении сетевого интерфейса. Чтобы увидеть это в действии, посмотрите файлы, которые охватывают сетевой доступ в /etc/udev/rules.d/ (называемые 77-network.rules на моем SuSE-боксе). Вы можете определить действия, когда интерфейс включается/выключается:

/etc/udev/rules.d/77-network.rules

# ПОДСИСТЕМА=="сеть",

ENV{INTERFACE}=="ppp*|ippp*|isdn*|plip*|lo*|irda*|dummy*|ipsec*|tun*|tap*|bond*|br*|vlan*|modem*|dsl*",GOTO="skip_ifup"

SUBSYSTEM=="net", ACTION=="add", RUN+="/sbin/ifup $env{INTERFACE} -o hotplug"

SUBSYSTEM=="net", ACTION=="remove", RUN+="/sbin/ifdown %k -o hotplug"

МЕТКА="skip_ifup"

(строка «ENV(INTERF....» используется для игнорирования нестандартных сетевых интерфейсов, при совпадении происходит переход к соответствующему оператору LABEL. Строки SUBSYTEM срабатывают при совпадении оператора ACTION – т.е. интерфейс ДОБАВЛЯЕТСЯ или УДАЛЯЕТСЯ)

Итак, если вы измените ДЕЙСТВИЕ «add/remove» для вызова вашего скрипта, который вызовет ifup/ifdown, а затем запустит все, что вам нужно после этого. Например, вызовите «ifup $@», затем проверьте IP интерфейса и смонтируйте соответствующие записи. Если монтирования были перечислены в fstab с опцией «noauto», то вам нужно только простое соглашение об именовании, чтобы найти запись и выполнить монтирование.

Аналогичным образом скрипт /etc/udev/rules.d/56-idedma.rules охватывает диски IDE (или sata) и будет запущен при обнаружении дисков. Этот скрипт позволит инициировать локальные монтирования на основе присутствия, используя альтернативный скрипт RUN.

Наименование и порядок правил аналогичны используемым в системе init. Посмотрите файлы справки и правил для получения дополнительных примеров и опций.

Связанный контент