Такая интересная чтуковина со мной приключилась. Одним словом вкратце если, сервер отказывался при старте монтировать nfs, прописанный в fstabe. На полупути до запуска вываливался с ошибкой и ожидал от ЛОКАЛЬНОГО пользователя действий.
Есть сервер (FreeBDS), на нем есть quagga, используется для анонсирования своих белых ИПов, и мне захотелось данные данного сервера бекапить на внешний источник.
В силу того что данных весьма много в виде мелких файлов то tar'ить их просто не имело никакого смысла, проще было использовать rsnapshot (практически надстройка над rsync'ком).
Хранилище под эти бэкапы смонтировано по nfs ... и всё бы хорошо было если онное, хранилище удаленное, было доступно бы по фейковой сети, но увы, не наш случай. Удаленное хранилище имеет белый ИП.
И вот вылезли грабли.
Когда сервак ребутится, он не подымается, почему? Квага еще не успел анонсировать сети и маршруты еще не выстроены, freebsd, не просто ругается и запускается далше ... она просто напросто на этом месте стопорится и не грузится дальше ... другими словами железяка лежит трупом.
Три решения:
- либо разбираться как настроить монтирование после удачного анонса кваги, более похож на unixway =)
- либо использовать rc.local с проверочными функциями маршрутов ...
- или, мой вариант, монтировать в момент нужды =) в момент когда по крону будет запущен сценарий бекапа сервера.
Что получилось:
Вот сценарий запуска бекапа сервера:
#!/usr/local/bin/bash PID="`basename $0`.pid" MOUNT_PATH="/var/backups/storage" if [ -e $PID ]; then ps -p `cat $PID` -o pid= -o start= -o command= | grep $0 > /dev/null if [ "$?" == 0 ]; then echo process has already started, pid `cat $PID`, the abolition of the current run >&2 exit 1 fi fi echo $$ > $PID if [ -z "`mount | grep '$MOUNT_PATH'`" ]; then mount -t nfs -o rw,soft,intr,bg remote_host.net:/mass2/remote_storage $MOUNT_PATH if [ "$?" != 0 ]; then echo Eroor mount on remote_host.net. Backup is not running. >&2 exit 1 fi fi /usr/local/bin/rsnapshot -c /usr/local/etc/rsnapshot.conf daily umount /var/backups/storage
Другими словами мы прежде чем запустить процесс бекапа, проверяем следы ранних запусков (повиссшие они или еще выполняются не суть), если ничего подозрительного, проверяем смонтированно ли удаленное хранилище. В случае если нет, пробуем смонтироваться и если нас ожидает фиаско то собственно с ругательствами прекращаем свои деяния по бекапу. Иначе запускаем процесс бекапинга после чего отмонтируемся.
Отмонтируюсь только по той причине, что у меня еще один непонятный глюк ... хоть и монтируюсь с флагом soft ... то всё равно порой происходит подвисание процессов, которые по девтке килятся не хотят (kill -9) ... причем даже не обязательно в системе значатся как зомби. Пару раз уже такое ловил и именно тогда когда было смонтировано удаленное хранилище. Что более странно ... команда reboot просто повисала и никакого соответственно ребута не происходило ... сервер продолжал глюченно жить до хардребута, то бишь по кнопке.
всё ... выплакался =)
А про amd (не процессор, а автомонтировщик) автор слышал? Под линукс для аналогичных вещей есть automount. Но nfs поверх публичной сети - это что-то. Файрвола считай, что нет. Или его и так нет?
ОтветитьУдалитьЛеш, слышал о нем, и даже пробовал играться когда то давным давно и забыл про него напрочь.
ОтветитьУдалитьЧто касается фаервола, есть правила ipfw'шные на стороне nfs сервера ограничивающие доступ к нему, но что они из себя представляют знать не знаю так как сервер тот не в моей компетенции, мне просто дали место на нем для бекапинга.
пошел вспоминать и играться с amd =) спасибо!