- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF125:BackUpPC
Материал из Linuxformat.
- Сети Свяжем ваши Linux-ПК, и пускай они вас обслуживают
Содержание |
BackupPC: Как решить вопрос
- Часть 12: Делать резервные копии нудно, но Нейл Ботвик поможет вам взвалить этот тяжкий груз на плечи сервера всего несколькими строками кода.
К сожалению, потеря данных – горькая правда жизни, и стопроцентно надежных носителей на свете нет. Потому и бытует поговорка, что все люди делятся на два типа: те, что не делают резервные копии, и те, кто их уже делают.
Тем не менее, вряд ли кому доставляет удовольствие торчать у компьютера, скармливая ему DVD-болванки. Машины созданы, чтобы упрощать жизнь, и как нам освежать копии важных данных, если нет ни времени, ни желания этим заниматься? Мы здесь говорим о сетях, и дело еще осложняется тем, что нужно хранить резервные копии данных с нескольких компьютеров, причем на некоторых из них может даже не быть графического интерфейса.
Разве не здорово было бы завести программу, которая следила бы за тем, когда и для каких компьютеров созданы резервные копии, и обновляла бы их в нужный момент, и все это без особых запросов? А еще лучше было бы уметь восстанавливать данные, частично или полностью, с любого компьютера сети, даже если целевому компьютеру стало настолько худо, что он грузится только с Live CD! К счастью, это не мечта – BackupPC (http://backuppc.sourceforge.net) может делать все это и даже больше. Для создания резервных копий с Linux и Mac она применяет rsync, а для резервных копий Windows – SMB (протокол разделения файлов Windows). Она помнит и про отсутствующие компьютеры, ожидая, пока те повторно включатся в сеть, и даже возобновит процесс резервного копирования после прерывания. Мы возьмем текущую версию BackupPC, 3.1.0. Версия 3.2.0 сейчас в процессе бета-тестирования, и она еще не готова для новых пользователей.
Начальная настройка
BackupPC состоит из двух основных частей: сервера, который занимается созданием резервных копий других компьютеров сети (и себя самого), и web-интерфейса для проверки резервных копий и восстановления данных из них. Последний работает через стандартный web-сервер Apache. Лучше всего добавить BackupPC через менеджер пакетов дистрибутива, если в репозитории есть соответствующий пакет. Установить его нетрудно, но так как это программа на Perl, она требует множество модулей, и список зависимостей почти такой же длинный, как и список отговорок, которые можно придумать, чтобы пока не делать резервную копию.
Следующий этап – настройка сервера. Здесь нужно принять во внимание три файла: /etc/BackupPC/hosts содержит список компьютеров, для которых создаются резервные копии, /etc/BackupPC/config.pl содержит глобальные настройки резервного копирования, а в файле /etc/BackupPC/pc/имя_хоста.pl эти настройки переписываются (или добавляются новые) для каждого компьютера. Продумайте также, где хранить резервные копии. Места потребуется много, но не так много, как кажется. Видите ли, когда BackupPC сохраняет файл, то проверяет, есть ли он уже в хранилище резервных копий, и если да – создает на него жесткую ссылку вместо сохранения новой копии. Итак, один у вас компьютер или сто, память, занятая операционной системой, будет все той же. Когда вы примете во внимание данные, ситуация может измениться, но значительная экономия места все равно получится.
Резервные копии лучше всего хранить на отдельном диске, особенно если вы планируете создавать резервную копию для того же компьютера, на котором запущен BackupPC. В файле config.pl можно изменить каталог, используемый для хранения данных, но это может вызвать непредвиденные побочные эффекты, поэтому оставьте его как /var/lib/BackupPC и смонтируйте туда свою файловую систему, выделенную для резервной копии. В файле hosts перечисляются компьютеры, резервные копии данных с которых нужно создать, в следующем формате:
hostname dhcp-flag username
Здесь hostname, как вы уже догадались, это имя хоста, а флаг DHCP нужно установить в 0, если у компьютера статический адрес или его можно найти через Windows NMB, или 1, если его нужно искать через DHCP. Пользователь username – лицо, ответcтвенное за данный компьютер, и он должен иметь на нем права запуска, просмотра и восстановления данных из резервных копий. Он же получит письмо от BackupPC, если что-то пойдет не так. Вы можете взвалить ответственность за управление пользовательскими резервными копиями на самих пользователей или оставить эту возможность себе. Можно добавить и четвертое поле – список других пользователей, которые могут пользоваться web-интерфейсом для данного хоста.
Большинство настроек задаются в файле config.Pl. Как это часто бывает, это огромный файл с подробными комментариями, но большинство настроек вначале можно оставить без изменений. Также нужно заметить, что этот файл и файлы настройки для каждого компьютера представляют собой скрипты Perl, поэтому будьте поосторожнее с их синтаксисом, если не знаете языка. В частности, пропуск точки с запятой в конце строки часто приводит к неожиданным результатам.
Разберем файл настройки
Первый раздел файла содержит основные настройки сервера, такие как $Conf{MaxBackups} — максимальное количество одновременных процессов созданий резервных копий, выполняемых сервером. Следующий раздел описывает, что и когда копировать, хотя эти параметры можно задать в файлах настройки отдельных компьютеров. BackupPC создает как полные, так и инкрементные резервные копии, и с параметрами $Conf{FullPeriod} и $Conf{IncrPeriod} в значениях по умолчанию это будет делаться раз в неделю и раз в день соответственно. На практике промежуток будет чуть длиннее, чем указанный здесь, поэтому установите чуть меньшие значения, чем целое число дней, в противном случае резервное копирование будет каждый раз выполняться чуть позже. При этом $Conf{FullKeepCnt} устанавливает число полных резервных копий, которые будут храниться. Установка его в 1 оставляет только самую свежую резервную копию, тогда как список чисел позволит вам гибко управлять этим процессом. Например, если установить значение $Conf{FullKeepCnt} = [4, 0, 6], то будут храниться четыре последних резервных копии плюс по одной для каждого из предыдущих шести месяцев. Если вы не поняли, о чем я, прочтите комментарии в файле config.pl, там это объясняется подробнее.
Теперь пора решить, когда выполнять резервное копирование. Если компьютеры работают постоянно, хорошее время для этого – ночь. В офисе, где они выключаются на несколько часов, подходяще время для этого – обед или, по крайней мере, время, когда они не заняты. $Conf{BlackoutPeriods} устанавливает время, когда резервные копии не делаются. Для задания нескольких интервалов можно воспользоваться массивом списков. Например:
$Conf{BlackoutPeriods} = [ { hourBegin => 8.0, hourEnd => 18.5, weekDays => [1, 2, 3, 4, 5], }, { hourBegin => 8, hourEnd => 13, weekDays => [6], }, ];
Такая конфигурация вычеркивает интервалы с 8 утра до 6:30 вечера с понедельника по пятницу и с 8 утра до часа дня по субботам. Если время начала позже времени окончания, имеется в виду ночной интервал.
Впрочем, все это относится только к компьютерам, подключенным к сети постоянно или большую часть времени. Если компьютер был длительно отключен, BackupPC попробует создать резервную копию сразу же, как обнаружит подключение, независимо от вычеркнутых интервалов. Ведь может случиться так, что пользователь зашел лишь ненадолго, и система «ловит момент» поработать.
Закончив основную настройку, задайте параметры для отдельных компьютеров. Это делается в файле /etc/BackupPC/pc/имя_хоста.pl, где имя_хоста – имя хоста из файла hosts. Настройки для rsync и SMB различны, поэтому сначала рассмотрим rsync. В этом файле нужно указать три основных настройки – используемый протокол, каталоги, резервные копии которых нужно создать, и каталоги, которые нужно пропустить. Например:
$Conf{XferMethod} = ‘rsync’; $Conf{RsyncShareName} = [‘/’]; $Conf{BackupFilesExclude} = [‘lost+found’, ‘/var/run/*’, ‘/var/tmp/*’, ‘/var/lock/*’, ‘/dev’, ‘/proc/*’, ‘/sys/*’, ‘/media/*’, ‘/tmp/*’];
Здесь для передачи файлов используется rsync, работающий через SSH, и это самый эффективный метод, так как передаются только изменения. RsyncShareName — это путь, резервную копию которого нужно создать (здесь – корень файловой системы, то есть все), и потом мы используем BackupFilesExclude, чтобы пропустить содержимое различных каталогов (но не сами каталоги, поэтому мы используем /dirname/* вместо /dirname). Незачем делать резервную копию временных файлов, содержимого сменных устройств, смонтированных на каталог /media, и, возможно, /mnt или содержимого виртуальных файловых систем в каталогах /dev, /proc и /sys.
Есть и другой способ исключить эти каталоги, с более четкой конфигурацией. Найдите параметр $Conf{RsyncArgs} в config.pl и добавьте --one-file-system в список аргументов. Эта настройка велит rsync не выходить за границы файловой системы, поэтому сам каталог / будет обработан, но ни одна файловая система, смонтированная на каталоги внутри него, не будет, и сменные устройства и виртуальные файловые системы исключатся автоматически. Обратите внимание, что если /home или /var смонтированы на отдельную файловую систему, потребуется отметить это в RsyncShareName следующим образом:
$Conf{RsyncShareName} = [‘/’, ‘/home’,];
Нужно сделать еще кое-что. Так как rsync работает через SSH, нужно дать права доступа пользователю backuppc на сервере. Если вы копируете не только домашние каталоги, этому пользователю потребуется доступ с правами root для чтения системныхфайлов. Однако каждый раз вводить пароль или оставлять его в файле настройки неудобно и небезопасно, поэтому для аутентификации используются ключи SSH. Это означает, что нужно сгенерировать пару ключей для пользователя backuppc на сервере следующей командой:
su -s /bin/sh -c “ssh-keygen -t rsa” backuppc
Она запустит ssh-keygen под пользователем backuppc'. Для него не задана оболочка по умолчанию, поэтому укажите ее через параметр -s. При создании пары ключей в /var/lib/BackupPC/.ssh примите настройки по умолчанию. Скопируйте публичную часть ключа на USB-брелок, вставьте его в компьютер, данные с которого будут копироваться, и введите команду:
cat /media/usbstick/id_rsa.pub >>/root/.ssh/authorized_keys
Если у пользователя root на целевом компьютере еще нет пары ключей SSH, запустите ssh-keygen -t rsa и на этой машине.
Копирование сервера
Если вы хотите, чтобы сервер сделал резервную копию самого себя, SSH – не самый эффективный вариант: гораздо лучше запустить rsync напрямую. Однако это следует делать от имени суперпользователя-root, поэтому воспользуйтесь sudo. Добавьте такие строки в начало файла настройки хоста:
$Conf{XferMethod} = ‘rsync’; $Conf{RsyncClientCmd} = ‘/usr/bin/sudo $rsyncPath $argList+’; $Conf{RsyncClientRestoreCmd} = ‘/usr/bin/sudo $rsyncPath $argList+’;
Затем запустите visudo в терминале и добавьте в конфигурацию sudo строку, чтобы разрешить пользователю BackupPC запускать rsync от имени root без запроса пароля:
backuppc ALL = NOPASSWD: /usr/bin/rsync
Позаботьтесь об удалении /var/lib/BackupPC из списка каталогов для резервирования, иначе место на диске кончится со свистом.
Зачем нужно Visudo?
При изменении настроек sudo воспользуйтесь visudo вместо непосредственного редактирования файла /etc/sudoers. Для правки файла будет использован редактор из переменной $EDITOR, не обязательно Vi, и перед перезаписью оригинала выполняется проверка. Это может спасти вас от самоблокировки из-за опечатки.
Последнее подтверждение
Есть еще один шаг, необходимый перед тем, как можно будет пользоваться SSH-соединением. При первом подключении к компьютеру, SSH перед записью аутентификационных данных в файл known_hosts запрашивает подтверждение. Это остановило бы автоматическое резервирование, поэтому зайдите на каждый компьютер вручную с помощью следующей команды:
su -s /bin/sh -c “ssh root@целевой_компьютер echo” backuppc
По сути дела, эта команда подключается, выводит пустую строку и разрывает соединение, но она будет запрашивать подтверждение при первом подключении к каждому хосту. Теперь всего готово для запуска BackupPC и создания резервных копий компьютеров Linux. Читайте дальше – и узнаете, как сделать то же самое с компьютерами Windows…
Для связи с клиентами Windows BackupPC использует SMB. В некоторых версиях Windows диск C: открыт для общего доступа как C$ только для администраторов, в противном случае придется предоставить к нему общий доступ. Основной файл настройки для клиента Windows выглядит примерно так:
$Conf{XferMethod} = ‘smb’; $Conf{SmbShareName} = [‘C$’]; $Conf{SmbShareUserName} = ‘backup’; $Conf{SmbSharePasswd} = ‘yeahright’;
Так как здесь указан пароль администратора, нужно гарантировать, что файл не прочесть никаким другим пользователям:
chown backuppc: hostname.pl chmod 600 hostname.pl
Web-интерфейс
Ну вот, мы установили сервер и настроили его на резервное копирование данных с одного или нескольких клиентов; но совершенно не представляем, что и когда он скопировал, так как пользовательского интерфейса у нас нет. При установке сервера BackupPC также добавляется несколько скриптов Perl для управления программой через браузер. Их расположение зависит от дистрибутива и выбранного установочного пакета; у меня это каталог /var/www/localhost/backuppc. Чтобы воспользоваться интерфейсом, может потребоваться изменение конфигурации Apache. Вопервых, убедитесь, что опция AllowOverride для этого каталога установлена в all. Директива AllowOverride позволяет переопределять некоторые настройки каталога и его подкаталогов, подключая их из файла .htaccess. В зависимости от дистрибутива и установки, эта директива может находиться в файле vhost, по умолчанию в /etc/apache, или в основном файле настройки. Некоторые дистрибутивы сделают это автоматически, но если у вас есть сомнения, добавьте следующие строки в основной конфигурационный файл:
<Directory /var/www/localhost/backuppc> AllowOverride all </Directory>
Пользователь backuppc будет создан с паролем по умолчанию или случайным паролем; измените его командой
htpasswd2 -c /etc/BackupPC/authUser имя_пользователя
Эта команда удалит существующего пользователя и пароль и запросит у вас новый пароль. Имя пользователя должно быть таким, какое установлено для $Conf{CgiAdminUsers} в файле config.Pl. Если в файле хоста есть другие пользователи, запустите команду для каждого из них, но не указывайте ключ -c для второго и последующих пользователей, иначе данные всех предыдущих пользователей будут стерты. Использовать для этого виртуальный хост или нет, решать вам, хотя запускать BackupPC в установке Apache для публичного web-сервера – не лучшая идея (см. Безопасность). Впрочем, если компьютер – только сервер резервного копирования и не будет доступен извне, беспокоиться не о чем.
Теперь можно открыть в браузере адрес http://имя_хоста/backuppc и войти с только что заданными именем и паролем. Web-интерфейс позволяет просматривать различные компьютеры и резервные копии, запускать операции резервного копирования или восстановления, читать документацию и даже менять конфигурационные файлы. Для начала зайдите на страницу Host Summary [Сводка хостов], кликните на первом компьютере и нажмите кнопку Start Full Backup [Запуск полного резервирования], чтобы начать резервное копирование. На странице Status [Состояние] будут показаны создаваемые резервные копии и информация обо всех ошибках, которые могут возникнуть. Если появляется ошибка «невозможно прочесть данные» (‘unable to read’) с компьютера Linux, проверьте, что можете подключиться к нему через SSH как пользователь backuppc. Восстановить отдельные файлы или целые файловые системы можно непосредственно на нужный компьютер или в tar- или zip-архив, а потом при желании скопировать его вручную.
Безопасность
Для резервирования системных файлов потребуется дать пользователю backuppc доступ к клиентским компьютерам с правами root. Это означает, что нужно обязательно убедиться в том, что сервер и работающий с ним web-сервер нельзя взломать извне. Если сервер резервного копирования работает не на отдельном компьютере и Apache обслуживает на нем другие web-приложения, есть шанс, что «дыра в безопасности» в них может дать хакеру доступ к вашим резервным копиям. Один из способов избежать этого – запустить отдельный экземпляр Apache для резервных копий. Для этого достаточно сделать копию каталога /etc/apache, удалить оттуда все ссылки на другие хосты и изменить порт в основном конфигурационном файле. Можно также задать в качестве корневого каталога [document root] web-каталог BackupPC, который нужно убрать подальше от существующего корневого каталога. Потом запустите второй экземпляр Apache командой:
apache2 -f /путь/к/основной/конфигурации
и подключите его к http://имя_хоста:номер_порта
Забирайте выше
Здесь мы лишь поверхностно коснулись возможностей BackupPC. Начальная установка довольно сложна, но как только, вам на радость, программа заработает, больше делать ничего не нужно. Чтобы добавить новые компьютеры для резервного копирования, обычно достаточно лишь дописать строку в файл hosts и создать новый файл hostname.pl, скопировав и изменив существующий. В базовой установке еще есть с чем повозиться – поройтесь в документации и комментариях файла настройки, коли охота. А можно просто оставить программу в этом состоянии и мирно спать с осознанием того, что BackupPC обо всем позаботится и отправит вам письмо, если что-то пойдет не так.
И последнее, что нужно знать о BackupPC. Здесь нет возможности проверять резервные копии, и сохранность ваших данных обеспечивается только проверками нижележащего протокола. Однако это не означает невозможности убедиться, что архив содержит то, что ему полагается. Для этого выберите все файлы в резервной копии и сохраните их в tar-архив, а затем проверьте его с помощью аргумента --compare команды tar.