automount nfs: настройки времени ожидания autofs для ненадежных серверов - как избежать зависания?

18

Я использую небольшой сервер для нашей квартиры. В основном это файловый сервер с некоторыми дополнительными сервисами. Клиентами являются Linux-машины (в основном Ubuntu, но также и другие дистрибутивы) и некоторые Mac (-Book) между ними (но они не важны для вопроса). На сервере установлена Ubuntu 11.10 (Oneiric Ocelot) «Server Edition», система, с которой я выполняю настройку и тестирование, запускает 11.10 «Desktop Edition». Мы в течение некоторого времени запускали наши общие ресурсы с Samba (с которым мы более знакомы), но затем переходили на NFS (потому что у нас нет пользователей Windows в локальной сети, и мы хотим попробовать это), и пока все работает нормально ,

Теперь я хочу настроить автоматическое монтирование с помощью функции autofs, чтобы сгладить ситуацию (до сих пор каждый монтирует ресурсы вручную, когда это необходимо). Авто-монтаж, кажется, тоже работает. Проблема в том, что наш «сервер» не работает 24 часа в сутки, чтобы сэкономить энергию (если кому-то нужны какие-то данные с сервера, он / она включает и выключает его, поэтому он работает только пару часов каждый день). Но так как настройка autofs, клиенты часто зависают, когда сервер не работает.

  • Я могу нормально запускать все клиенты, даже если сервер не работает.

  • Но когда я хочу отобразить каталог (в терминале или наутилусе), который содержит символические ссылки на общий ресурс, /nfsкогда сервер не работает, он зависает не менее двух минут (поскольку autofs не может подключиться к серверу, но сохраняет пытаюсь, я полагаю).

    • Есть ли способ избежать этого? Чтобы монтирование было отложено до изменения каталога или до доступа к содержимому этого каталога? Не когда "глядя" на ссылку в разделе под /nfs? Я думаю, что нет, но, возможно, можно не пытаться получить к нему доступ так долго? И просто дайте мне пустой каталог или "не могу найти / подключиться к этому каталогу" или что-то в этом роде.
  • Когда сервер работает, все работает нормально.

  • Но когда сервер отключается, до того как общий ресурс отключен , инструменты (например, dfили ll) зависают (при условии, что они думают, что общий ресурс все еще включен, но сервер больше не отвечает).

    • Есть ли способ автоматического размонтирования общих папок при потере соединения?
  • Также клиенты не будут выключаться или перезагружаться, когда сервер не работает, и у них все еще установлены общие ресурсы. Они висят (как кажется, бесконечно), « убивая оставшиеся процессы », и, похоже, ничего не происходит.

Я думаю, что все сводится к точным значениям таймаута для монтажа и демонтажа. И, возможно, удалить все общие ресурсы, когда соединение с сервером теряется.

Поэтому мой вопрос: как с этим справиться? И в качестве бонуса: есть ли хороший способ для ссылки внутри /nfsбез необходимости монтировать реальные ресурсы (опция autofs или, возможно, использование псевдо-FS, /nfsкоторый заменяется при монтировании или что-то в этом роде)?

Моя настройка

Настройка NFS довольно проста, но до сих пор хорошо себя зарекомендовала (используя NFSv4 ):

/ И т.д. / по умолчанию / NFS-общие

NEED_STATD=
STATDOPTS=
NEED_IDMAPD=YES
NEED_GSSD=

/etc/idmapd.conf

[General]
Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = localdomain
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup

/ и т.д. / экспорта

/srv/   192.168.0.0/24(rw,no_root_squash,no_subtree_check,crossmnt,fsid=0)

Под корнем экспорта /srvмы получили две директории с bind:

/ etc / fstab (сервер)

...
/shared/shared/      /srv/shared/      none    bind  0 0
/home/Upload/        /srv/upload/      none    bind  0 0

Первый один в основном только для чтения (но я в жизни , что через атрибуты файлов и собственности вместо настройки NFS) , а второй является RW для всех. Примечание: у них нет дополнительных записей в / etc / exports , хотя их монтирование работает отдельно.

На стороне клиента они настраиваются /etc/fstabи монтируются вручную по мере необходимости ( mortonэто имя сервера, и оно разрешается нормально).

/ etc / fstab (клиент)

morton:/shared  /nfs/shared nfs4    noauto,users,noatime,soft,intr,rsize=8192,wsize=8192    0   0
morton:/upload  /nfs/upload nfs4    noauto,users,noatime,soft,intr,rsize=8192,wsize=8192    0   0

Для настройки autofs я удалил записи /etc/fstabна клиентах и ​​настроил остальные так:

/etc/auto.master

/nfs    /etc/auto.nfs

Сначала я связал прилагаемый исполняемый файл /etc/auto.net(вы можете посмотреть его здесь ), но он автоматически ничего не монтирует для меня. Затем я пишу на /etc/auto.nfsоснове некоторых HowTos, которые я нашел в Интернете:

/etc/auto.nfs

shared  -fstype=nfs4  morton:/shared
upload  -fstype=nfs4  morton:/upload

И это вроде работает ... Или будет работать, если сервер будет работать 24/7. Таким образом, мы получаем зависания, когда клиент загружается без запущенного сервера или когда сервер выключается, а общие ресурсы все еще подключены.

Брут
источник

Ответы:

2

Используя любую систему монтирования, вы хотите избежать ситуаций, когда Nautilus перечисляет каталог, содержащий монтирование, которое может быть или не быть смонтировано. Так что с autofs не создавайте монтирования, например, в / nfs. Если вы это сделаете, когда вы используете Nautilus для вывода списка «Файловая система», он попытается создать все монтирования, которые должны существовать в / nfs, и если эти попытки монтирования не пройдут, потребуется несколько минут, чтобы отказаться.

Поэтому я изменил auto.master, чтобы создать монтирование в / nfs / mnt.

Это решило проблему для меня. Я получаю долгую задержку, только если пытаюсь составить список содержимого / nfs / mnt, чего я легко могу избежать.

Тим Пассингем
источник
20

Смонтируйте NFS-ресурс на клиентских компьютерах, используя параметры монтирования "bg, intr, hard".

Наиболее важным в вашем случае является «bg» для фона - который говорит системе не блокировать, когда сервер недоступен.

«intr» для interrruptable - так что вы можете уничтожить висящие монтирования на клиенте с помощью команды kill.

«жесткий» является противоположностью «мягкого». Разница в том, что «hard» будет продолжать попытки бесконечно, в то время как «soft» экспоненциально откажется от попыток, когда сервер недоступен.

Nils
источник
Спасибо за ответ. Я не могу проверить прямо сейчас, потому что я не дома, но после того, как я попытался получить справочную страницу (опять же), у меня появилось еще несколько вопросов: hardи bgпоначалу это звучит мне противно. Я хочу, чтобы крепление не повторило попытку и сразу же вернулось, если оно освободится? intrкажется нормальным, но, похоже, больше не работает: « После монтирования 2.6.25 опция монтирования intr / nointr устарела. Только SIGKILL может прервать ожидающую операцию NFS в этих ядрах, и если указано, эта опция монтирования игнорируется для обеспечения обратной совместимости с более старыми ядрами. "
Брут
2
Hard будет повторяться бесконечно - bg НЕ будет блокироваться, если монтирование сейчас невозможно. В результате он будет смонтирован, когда он будет доступен, но все остальные операции будут продолжены. Кажется, сейчас INTR используется по умолчанию, и это здорово. Вначале вам приходилось перезагружать зависший клиент, если ваш NFS-сервер умер ...
Nils
Я только что проверил это, но добавление hard,bgк, /etc/auto.masterкажется, ничего не меняет. A time ls -l ~(мой пользовательский каталог содержит символическую ссылку /nfs/upload) все еще занимает больше двух минут, когда сервер не работает.
Брут
Вы перезапустили autofs? Только изменения submap будут распространяться без перезапуска autofs.
Нильс
Я сделал:sudo reload autofs && sudo restart autofs
Brutus
7

Я немного поигрался с некоторыми вариантами из справочной страницы. Все bg,hard, bg,soft, fg,hardи fg,softдать мне времена более чем два менуэта вернуться.

Настройка retrans=1,retry=0(в сочетании с любым из вышеперечисленного), тем не менее, дает мне время около трех секунд. Довольно прилично. Хотя я не уверен, что означает каждая комбинация. Покопаемся дальше.

Также я сталкивался с опциями autofs MOUNT_WAITи UMOUNT_WAIT. Я не смог получить с ними разные результаты, но я буду продолжать пытаться. Кажется, это хороший способ использовать «более безопасную» (то есть больше попыток и т. Д.) Опцию NFS, но быстрое время возврата для autofs, или нет?

Брут
источник
1
Там также , как представляется, и другие варианты, например , rsize=32768,wsize=32768,noatimeкак указано здесь: techrepublic.com/blog/opensource/...
Ehtesh Чоудхури
-1

Чтобы настроить файловую систему NFS на автоматическое монтирование при каждом запуске системы Red Hat Linux, необходимо добавить запись для этой файловой системы NFS в файл / etc / fstab. Файл / etc / fstab содержит информацию обо всех видах монтируемых (и доступных для монтирования) файловых систем для вашей системы Red Hat Linux. Пример:: nfs Соответствует имени хоста, IP-адресу или полному доменному имени сервера, экспортирующего файловую систему. Путь к экспортируемому каталогу. Указывает, где в локальной файловой системе монтировать экспортируемый каталог. Эта точка монтирования должна существовать до чтения / etc / fstab, иначе монтирование не удастся. Область указывает параметры монтирования для файловой системы. Например, если в области параметров указано rw, suid, экспортированная файловая система будет смонтирована для чтения и записи, а также будут использоваться пользователь и идентификатор группы, установленные сервером. Обратите внимание, что круглые скобки не должны использоваться здесь

M.Zaman
источник