FreeBSD: Резервное копирование данных с Windows серверов

SAMBAЕсли на Вашем сервере с операционной системой FreeBSD имеется большое количество свободного дискового пространства, то одним из эффективных способов его применения может стать организация резервного копирования данных с других компьютеров. Если они работают под управлением операционных систем семейства Linux / Unix, не должно возникнуть никаких проблем, если под управлением Windows, то задача немного усложнится. Данная статья описывает один из способов ее решения.

Постановка задачи и исходные данные

Необходимо организовать резервное копирование содержимого общих папок \NTSERVER1SHARE1 и \NTSERVER2SHARE2, находящихся на серверах с Windows, в папки /backup/share1 и /backup/share2 локальной файловой системы сервера с FreeBSD по заданному расписанию. Для выполнения резервного копирования (синхронизации) файлов и папок следует использовать утилиту cpbk, установленную из обновленной коллекции портов.

Добавление поддержки SMBFS

Добавление поддержки SMBFS потребуется только при наличии серверов с FreeBSD версии ниже 5.0 (начиная с версии 5.0, операционная система содержит модуль ядра, обеспечивающий нужную функциональность). Для включения поддержки SMBFS в старых версиях операционной системы придется добавить в файл конфигурации ядра опции NETSMB, NETSMBCRYPTO, LIBMCHAIN, LIBICONV, SMBFS, пересобрать ядро и перезагрузить систему.

Файл конфигурации утилит SMBFS

По умолчанию утилиты SMBFS используют глобальный файл конфигурации /etc/nsmb.conf и пользовательские файлы конфигурации ~/.nsmbrc. Опции, заданные в глобальном файле конфигурации, переопределяют опции, заданные в файлах конфигурации пользователей. Лично я использую файл конфигурации .nsmbrc, находящийся в домашней папке суперпользователя root. В рассматриваемом случае этот файл должен обеспечивать корректную перекодировку русских букв в именах файлов и папок, возможность обращения к серверам с Windows по именам NetBIOS и возможность подключения к выбранным общим папкам без ввода пароля. С учетом сказанного файл ~/.nsmbrc должен иметь следующее содержимое:

[default]
charsets=koi8-r:cp866
nbns=192.168.0.2
workgroup=WORKGROUP
[NTSERVER1:USER1]
password=$$********
[NTSERVER2:USER2]
password=$$********

Секция [default] является общей для всех серверов с Windows. В рассматриваемом случае она содержит параметры перекодировки имен файлов charsets, IP-адрес сервера WINS nbns и имя домена или рабочей группы workgroup. Секции вида [<Имя сервера>:<Имя пользователя>] задают параметры подключения конкретных пользователей Windows к конкретным серверами с Windows. В рассматриваемом случае они содержат пароли password. По умолчанию пароли хранятся в открытом виде. Для частичного избавления от данной неприятности предназначена команда smbutil crypt <пароль>, результатом выполнения которой является закодированный пароль. В связи с тем, что кодирование не является шифрованием и спасает только от подглядывания, не забудьте выполнить команду chmod 600 ~/.nsmbrc, которая запретит доступ к файлу ~/.nsmbrc всем, кроме владельца. Для тестирования созданного файла конфигурации можно запросить списки общих папок серверов с Windows командами:

smbutil view //USER1@NTSERVER1
smbutil view //USER2@NTSERVER2

а также создать точки монтирования и попытаться смонтировать выбранные общие папки серверов с Windows командами:

mkdir -p /ntserver1/share1 /ntserver2/share2
mount -t smbfs //USER1@NTSERVER1/SHARE1 /ntserver1/share1
mount -t smbfs //USER2@NTSERVER2/SHARE2 /ntserver2/share2

Если Вы были внимательны, команды smbutil... и mount... отработают без ошибок и ни разу не попросят Вас ввести пароль.

Обновление таблицы файловых систем

Для повышения удобства работы необходимо добавить общие папки серверов с Windows в таблицу файловых систем /etc/fstab:

//USER1@NTSERVER1/SHARE1 /ntserver1/share1 smbfs rw,noauto 0 0
//USER2@NTSERVER2/SHARE2 /ntserver2/share2 smbfs rw,noauto 0 0

Теперь для монтирования общих папок \NTSERVER1SHARE1 и \NTSERVER2SHARE2 можно будет использовать команды:

mount /ntserver1/share1
mount /ntserver2/share2

Синхронизация данных с помощью cpbk

Установку утилиты cpbk следует выполнить из портов:

cd /usr/ports/sysutils/cpbk
make install clean

Cpbk не нуждается в дополнительной настройке, поэтому для решения поставленной задачи остается подготовить простейший скрипт, который будет запускаться по необходимому расписанию с помощью cron’а и выполнять монтирование, синхронизацию и размонтирование нужных папок. С учетом описанного выше обновления таблицы файловых систем такой скрипт должен иметь примерно такое содержимое:

#!/bin/sh
cmnd="/usr/local/bin/cpbk -nr"
mount -o rdonly /ntserver1/share1
$cmnd /ntserver1/share1 /backup/share1
umount /ntserver/share1
mount -o rdonly /ntserver2/share2
$cmnd /ntserver2/share2 /backup/share2
umount /ntserver2/share2

Ключи -nr утилиты cpbk обеспечивают удаление файлов и папок, которые отсутствуют в папке-источнике, и рекурсивную обработку вложенных папок (в результате в папке-приемнике создается точная копия содержимого папки-источника), а благодаря наличию ключа -o rdonly команды mount, общие папки серверов с Windows монтируются только для чтения. Для того, что созданный скрипт ежесуточно запускался в полночь, следует войти в систему под именем суперпользователя root, выполнить команду crontab -e и добавить в открывшуюся crontab строку:

0 0 * * * <Полное имя скрипта резервного копирования>

Заключение

Выполнив действия, которые описаны в этой статье, Вы сможете использовать простаивающее свободное дисковое пространство сервера с FreeBSD более эффективно. Помните, что все люди, имеющие отношение к компьютерам, делятся на тех, кто еще не делает резервное копирование, и тех, кто уже делает. Я не советую Вам дожидаться неприятностей, которые постигли первых, и рекомендую досрочно присоединиться ко вторым.

Понравилась статья?

Подпишитесь на RSS или почтовую рассылку;

Присоединяйтесь в Twitter, Facebook, Google+, VK;

Поделитесь ссылкой в социальной сети или блоге:

16 комментариев к “FreeBSD: Резервное копирование данных с Windows серверов

  1. Странно я просто тупо tar винчи копирую…
    Но, лучше родного виндового бекапа для винды — еще не наблюдал….
    Просто мельком глянул… Бутовый сектор копируется?

    • Эта статья посвящена не идеальному бэкапу для Windows, а доступу к виндовым шарам из FreeBSD и использованию утилиты cpbk для репликации папок 😉

  2. Порт sysutil/сpbk удален 2011-05-01. Видимо более не развивается и не поддерживается. Что-то я посмотрел в портах и не нашел чем его заменили, может вы подскажете? И поправите статью? Ведь данное сейчас не работает в виду отсутствия порта.

    • Порт sysutil/сpbk удален 2011-05-01. Видимо более не развивается и не поддерживается

      Да порт удалили. Не знаю кому и чем насолила данная утилита.

      Чем его заменили, может вы подскажете?

      Рекомендую смотреть на дату публикации статей, чтобы не задавать подобные вопросы. Чем заменили cpbk, я не знаю. В случае FreeBSD поставленная задача уже давно не возникала, в случае RHEL мы решаем ее с помощью rsync.

      И поправите статью? Ведь данное сейчас не работает в виду отсутствия порта.

      Если Вы хотите поучаствовать в развитии блога и дать полезные комментарии для его читателей, буду очень признателен и обязательно опубликую их, а если ждете, чтобы я научил Вас искать ответы на элементарные вопросы, то зря теряете время. Кроме того, позвольте мне самому решать, что, когда и почему нужно исправить на моем собственном блоге 😉

  3. И еще вопрос вдогонку — можно ли в этом скрипте добавить фильтрацию по маске (интересуют виндовые файловые расширения). как бы туда grep запихнуть?

    • Если я ничего не путаю, cpbk поддерживает символы подстановки, поэтому проблем с масками быть не должно.

  4. Хотелось бы развить эту тему чтобы разобратся. Сам пока еще не такой спец по unix. Из мана следует что утилита работает на уровне директорий (массивов файлов). Так можно явно задать директории исключения через -exclude
    а вот насчет копирования по маске не догоняю пока. в первом приближении получается что нужно встроить что то вроде

    ....|grep '.ext' |....

    между source и destin аргументами cpbk. Такое вообще возможно — разрыв в команде с аргументами?

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

  5. …операционных систем семейства Linux / Unix, не должно возникнуть ни каких проблем, если под уп…

    никаких в данном случае пишется слитно.

      • Да. Стоит у нас терминальный сервер глючит безбожно лучше на FreeBSD всё делать. А с SQL работал только на учёбе так что сказать ничего не могу.

        • Да. Стоит у нас терминальный сервер глючит безбожно лучше на FreeBSD всё делать. А с SQL работал только на учёбе так что сказать ничего не могу.

          Да ничего там не глючит, если приготовить аккуратно. У нас филиалы и терминалы сбора данных на складах прекрасно работают в 1C 8.2. Не у всех баз есть управляемый интерфейс, поэтому без терминала пока никуда (там, где есть управляемый интерфейс все прекрасно работает через тонкий клиент без всяких терминалов). А SQL — такая штука, на которую завязано много софта для Windows, который ничем не заменишь. Еще одна очень полезная фича Windows Server — Active Directory. Пока не будет свободных альтернатив всему перечисленному, не получится полностью отказаться от Windows на серверах 😉

Оставить комментарий