LINUX.ORG.RU
ФорумAdmin

Монтирование сетевой папки, если она доступна при поднятии интерфейса

 ,


0

1

Помогите организовать монтирование сетевой папки, если она доступна, при поднятии интерфейса.

Как я решил это сделать:

у меня в VPN-сети есть два компьютера:

10.15.0.6
10.15.0.4
На компьютере «10.15.0.6» есть расшаренная папка «/mnt/disc»
10.15.0.6:/mnt/disc

Устанавливаю все необходимое на компьютере «10.15.0.4»

apt-get install -y portmap nfs-common
Создаю папку «/mnt/disc»
mkdir /mnt/disc

На компьютере «10.15.0.4» в папке (при поднятии интерфейсов)

/etc/network/if-up.d
создаю скрипт, который будет выполнять ее монтирование в папку «/mnt/disc»

nano z1mnt.sh
#!/bin/bash
i="10.15.0.6:/mnt/disc"
j="/mnt/disc"

 while  test ! -e "$i";
 do
   sleep 2
 done
   mount "$i" "$j"

exit 0
chmod +x z1mnt.sh

но команда

test -e
как я понял не работает с сетевыми папками, так как команда «showmount -e» показывает что папка присутствует
showmount -e 10.15.0.6
Export list for 10.15.0.6:
/mnt/disc 10.15.0.0/255.255.255.0

Вручную папка монтируется успешно

mount 10.15.0.6:/mnt/disc /mnt/disc
Автомонтирование вот таким методом
echo "10.15.0.6:/mnt/disc /mnt/disc nfs timeo=50,hard,intr" | tee -a /etc/fstab
не подходит, так как оно происходит раньше, чем поднимается VPN-сеть.

1. Как проверить доступность сетевой папки вместо «test -e»?

2. Правильно ли я делаю все остальное, не считая команды «test -e»?



Последнее исправление: pospelov (всего исправлений: 1)

Ответ на: комментарий от Deleted

Когда вписал тему, задел кнопку Enter, поэтому сообщение было пустое

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

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

А эта команда

test -e /mnt/folder
которую я использую в своем скрипте проверяет только наличие на локальном компьютере папки, например «/mnt/folder», а нужно использовать команду, которая проверяет наличие сетевой папки.

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

я тоже не понял задачу, но предположил, что тебе нужно что-то типа

while [ -z "`nmap -sV -p 445 10.15.0.6|grep '445/tcp'|grep open`" ]

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

Вы имеете в виду autofs?

Хотелось бы просто свой скрипт дописать

#!/bin/bash
i="10.15.0.6:/mnt/disc"
j="/mnt/disc"

 while  test ! -e "$i";
 do
   sleep 2
 done
   mount "$i" "$j"

exit 0

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

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

Вы имеете в виду autofs?

Да.

Хотелось бы просто свой скрипт дописать

Простите но нафейхуа? Дергать набор команд, раз в 2 секунды, когда оно нафиг не уперлось?

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

я тоже не понял задачу

Логика моего скрипта такова:

1. [проверить существует ли сетевая папка, имя которой записано в переменной $i]

2. --> если "да", - то монтируем сетевую папку $i в папку $j --> конец

3. --> если "нет" то подождать 2 секунды и повторить пункт 1

дальше закидываем этот скрипт в папку

/etc/network/if-up.d

и все, дело в шляпе!

что тебе нужно что-то типа

while [ -z "`nmap -sV -p 445 10.15.0.6|grep '445/tcp'|grep open`" ]

Не могли бы вы пояснить что здесь выполняется и как?

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

Дергать набор команд, раз в 2 секунды

если папка доступна, он сразу ее смонтирует и не будет больше «дергать»

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

Попробую пояснить, фактически действительную доступность ресурса можно узнать только по возврату от mount. Можно конечно устроить «пирог», сначала в цикле ping, потом если хост доступен, в цикле mount, но тут надо не забывать про ввод тайаутов (хост же может подняться и сразу упасть) что бы опять вернуться к пингам.

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

Я про autofs

стоит ли ставить autofs для такой простой задачи как монтирование сетевой папки единоразово при загрузке компьютера?

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

стоит ли ставить autofs для такой простой задачи как монтирование сетевой папки единоразово при загрузке компьютера?

... с единственным но, если можно - монтируем если нет - ждем а потом монтируем

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

Возможно я не до конца понял задачу. У вас два клиента, .6 и .4 клиент .4 должен смонтировать ресурс расположенный на .6 Верно же?
Далее, раз это клиенты vpn предполагаю что с рандомной вероятностью .6 может быть как доступен так и нет.
Так вот повторюсь, зачем городить скрипты, когда все уже «украдено до нас» придумано и работает давноооо (личный опыт емнип с начала 2000-х).

стоит ли ставить autofs для такой простой задачи

Которая исполняет именно вашу задачу. Ну не знаю, у вас какой-то офтоп-подход «под каждую задачу костылим заново».

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

для такой простой задачи как монтирование сетевой папки единоразово при загрузке компьютера?
чтобы бесконечно не «дергать» можно вписать ограниченное количество попыток, например 20

Если вам так уж интересно костылить, то просто mount в цикле пока не получиться или не закончиться кол-во попыток.

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

Возможно я не до конца понял задачу. У вас два клиента, .6 и .4 клиент .4 должен смонтировать ресурс расположенный на .6 Верно же?

да

Далее, раз это клиенты vpn предполагаю что с рандомной вероятностью .6 может быть как доступен так и нет.

нет. сеть построена так, что каждому компьютеру выдается его личный IP-адрес, все компьютеры всегда в сети. Сетевые папки смонтированы, но только до перезагрузки, а чтобы они остались смонтироваными после перезагрузки, в тырнете пишут что нужно сделать запись:

echo "10.15.0.6:/mnt/disc /mnt/disc nfs timeo=50,hard,intr" | tee -a /etc/fstab
Но эта запись в «/etc/fstab» некорректно работает если это WiFi или VPN. Поэтому нужно просто монтировать так:
mount 10.15.0.6:/mnt/disc /mnt/disc
только с задержкой, задержка неизвестна, значит после поднятия интерфейса, так тоже не выйдет, потому что имя интерфейса то «tun0» то «tun0-00» то еще как-нибудь. По логике значит:

1. монтировать папку

2. но если она доступна

3. но перед этим подождать

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

можете «носом тыкнуть» - написать мне код?

P.S. Если честно программировать могу только немного и только в Delphi

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

спасибо Вам большое за совет об «autofs», я обязательно прочту документацию, попробую его и потом отпишусь.

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

можете «носом тыкнуть» - написать мне код?

Как говорил Матроскин «Это перебор». Не хотите учиться и хотите готового решения - для этого есть раздел Jobs. Если что-то конкретно не получается, поможем здесь, направления я вам уже указал больше одного.

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

спасибо Вам большое за совет об «autofs», я обязательно прочту документацию, попробую его и потом отпишусь.

Можно не отписываться, там полторы строки в конфиге :)

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.