Использование NFS для бекапа удаленных файлов FreeBSD

NFS (Network File System) позволяет совместно использовань удаленные файлы и каталоги. Для работы используются следующие демоны:

nfsd – демон NFS, обслуживающий запросы клиентов NFS;
mountd – демон монтирования NFS, который выполняет запросы, передаваемые ему от nfsd;
rpcbind – демон, позволяющий клиентам NFS определить порт, используемый сервером NFS.

В /etc/rc.conf прописываем запуск сервера NFS:

rpcbind_enable= “YES”
nfs_server_enable=”YES”
nfs_server_flags=”-u -t -n 4″
mountd_flags=”-r”

Флаги -u и -t обозначают обслуживание клиентов как по UDP так и по TCP, -n 4 – запуск 4-х своих копий. На клиенской машине в /etc/rc.conf следует прописать: nfs_client_enable=”YES”. Создаем на сервере файл /etc/exports, в котором указываем какие папки разрешены для совместного использования, например:

/cdrom -ro host1 host2 – для юзеров host1 и host2 разрешен доступ к /cdrom.
/home -alldirs host1 host2 – для юзеров host1 и host2 разрешен доступ к /cdrom. -alldirs дает возможность монтировать каталоги, расположенніе ниже /home.
/home -maproot=root host1 host2 – maproot позволяет root делать запись в /home.

Перегружаем сервер или запускаем из под root следующие команды:

# rpcbind
# nfsd -u -t -n 4
# mountd -r

На клиенте:

#nfsiod -n 4

Нам нужно бекапить файлы с каталога /usr/files сервера NFS. Для этого пишем скрипт и добавляем его в /etc/crontab клиентской машины:

#/bin/sh
mount nfs-server:/usr/files /mnt
tar -zcvpf /usr/backup/`date ‘+%d-%B-%Y’`.tar.gz /mnt
umount nfs-server:/usr/files /mnt

Скрипт монтирует удаленный каталог /usr/files в /mnt клиентской машины, архивирует файл, после чего размонтирует удаленный каталог. Здесь предполагается, что на сервере прописано:/usr/files -alldirs IP_client в /etc/exports. Ключи tar:

-z – сжатие gzip;
-c – создание нового архива;
-v – выводить список обработанных файлов(для crontab можно не указывать);
-p – сохранение информации о правах доступа;
-f – использование указанного файла, куда будет сохранен результат;
-t – просмотр содержимого архива;
-x – извлечение из архива.

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

#/bin/sh
find /usr/backup -type f -mtime +10 | xargs rm -f

Ниже приведены несколько примеров работы с архивами:

tar -ztvpf /usr/backup/01-March-2005.tar.gz – просмотр содержимого архива.
tar -ztvpf /usr/backup/01-March-2005.tar.gz | grep file.txt – поиск в архиве.
tar -zxvpf /usr/backup/01-March-2005.tar.gz – извлечение всех файлов из архива.
tar -zxvpf /usr/backup/01-March-2005.tar.gz home/user1/backup.xml \ home/user2/backup.xml – восстановление указанных файлов из архива. Если не указывать восстанавливаемые файлы, будут восстановлены все файлы из архива.

Источник информации:
1. http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/network-nfs.html
2. http://www.bsdportal.ru/kb.php?mode=article&k=29
3. http://heap.altlinux.ru/alt-docs/modules/backup.alenitchev/index.html

© mick, 2006.