![]() |
|
Модераторы: powerfox, ZeeLax |
![]()
|
|
| SparF |
|
||||||||||||||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: 2 Всего: 18 |
Имеем:
Кратко поясню, почему для хранения backup-данных была выбрана именно эта (reiser4) файловая система. Явные минусы ее использования:
Столкнуться с этой ситуацией очень просто. Как это происходило у меня: на следующий день, после того, как на backup-сервера был установлен backuppc, оказалось, что ночной бэкап вывалился с ошибкой и оказался работать. При этом на тестовых каталогах backuppc отрабатывал просто прекрасно. Утыкание патрона в патроннике происходило при обработки файла вот с таким вот забавным именеем: Московский Дом книги - Глазунов С_А_ «Новый англо-русский словарь современной разговорной лексики 16000 словарных статей, 45000 единиц перевода ».htm Если кратко, то предпосылками этого милого бага является:
превратится в: /var/lib/backuppc/pc/server.domain.local/23/fD$/fПапка/fИмя файла.doc Примечание: предполагается, что используется копирование по протоколу smb с доступом через ресурс D$. В нашем примере количество кириллических символов в строке имени файла немного переваливает за сотню. В итоге общая длина строки составляет 263 байт. В итоге мы получаем ошибку создания файла (file name too long). Сразу отмечу, изменение системной кодировки на однобайтную (cp1251, к примеру) проблему не решает, так как backuppc все равно продолжает создавать файлы с именами в utf8. Единственная разница в том, что после изменения кодировки вы начинаете наблюдать кракозябры в своей файловой системе. Файловая система reiser4 прекрасно решает эту проблему. Решение. К сожалению, backuppc спроектирован таким образом, что подразумевает использование только одного хранилища данных. Иначе говоря он сохраняет все данные только в одном каталоге. Можно указать другой каталог в настройках, можно вместо текущего каталога примонтировать другой, но он все равно останется только один. Существующие варианты решения: 1. Монтировать наш внешний жесткий диск в /var/lib/backuppc; 2. Копировать на наш внешний жесткий диск данные из /var/lib/backuppc; 3. Каждый раз менять в настройках /var/lib/backuppc на путь, по которому примонтирован наш внешний жесткий диск. Почему они не подходят: 1. Продолжительность полного бэкапа в системе может достигать более суток. Соответственно непрерывность процесса будет нарушена, так как мы сможем писать данные или на внешний диск или на сервер. 2. Доступный для бэкапов объем на сервере почти 2Тб. Объем внешнего диска 500Гб. Мало того, что первый больше второго в 4 раза, так там еще используется достаточно сложная для понимания сходу структура хранения данных с жесткими ссылками на файлы. Обычное копирование тут не подойдет. На корректное решение задачи при данной ее постановке уйдет больше времени, чем мы можем себе позволить. 3. Оставлю без комментариев))) Таким образом, мы приходим к необходимости установки и настройке второго экземпляра backuppc на нашем сервере. У нас есть два варианта: 1. Установка второго экземпляра на сервер и настройка его на хранение данных на внешнем диске. 2. Установка экземпляра на внешний диск. При этом (в самом простом случае) на сервере останутся только старт-стопные скрипты (для монтирования диска и запуска backuppc) и конфиг-файл apache. Второй вариант мне нравится больше, так как уменьшает количество действий, которые придется предпринять в случае падения backupс-сервера. По сути, все сведется к копированию нескольких файлов на новый сервер и запуску одного из них. Единственным камнем преткновения является необходимость поддержки reiser4 ядром нового сервера. Однако, надеюсь, что в ближайшее время reiser4 все же войдет в ядро и этот вопрос будет исчерпан. Ниже предполагается, что на backup-сервере уже установлен и функционирует backuppc. Поэтому некоторые моменты его конфигурирования и установки будут упущены, а другие будут рассмотрены более подробно. Итак, поехали. 1. Настроим udev таким образом, чтобы при подключении нашего внешнего диска ему всегда присваивалось одно и то же имя в каталоге /dev. Для этого создадим файл /etc/udev/rules.d/10-external-backup-disks.rules содержащий
Теперь при подключении диска к backup-серверу вместо /dev/sde у меня появляется устройство /dev/backuphdd Более подробно (по пунктам) о написании правил udev можно прочитать здесь [2]. 2. Теперь настроим прозрачное шифрование для этого диска. Устанавливаем cryptsetup: aptitude install cryptsetup Сейчас и в дальнейшем будем предполагать, что все наши скрипты и ключевой файл лежат в каталоге /root/extbackup/ mkdir /root/extbackup/ Запишем парольную фразу в файл external-backup-disk.key echo "verysecretpassword" > /root/extbackup/external-backup-disk.key Создадим криптоконтейнер на нашем устройстве: cryptsetup luksFormat /dev/backuphdd /root/extbackup/external-backup-disk.key Откроем его: cryptsetup luksOpen /dev/backuphdd cbackuphdd --key-file /root/extbackup/external-backup-disk.key Теперь у нас в системе должно появится новое устройство: /dev/mapper/cbackuphdd После подключения контейнера работа с этим устройствам полностью аналогична работе с обычным диском. Наши данные будут прозрачно расшифровываться/шифроваться при чтении/записи. Примечание: в данном случае для криптоконтейнера мы используем формат LUKS - Linux Unified Key Setup Более подробно о cryptsetup и LUKS можно прочитать здесь [3] 3. Создадим на этом диске файловую систему reiser4 mkfs.reiser4 /dev/mapper/cbackuphdd Монтировать диск будем в каталог /external-backup-disk mkdir /external-backup-disk mount /dev/mapper/cbackuphdd /external-backup-disk/ cd /external-backup-disk/ 4. Скопируем настройки Так как один экземпляр backuppc у нас уже настроен, то просто скопируем его настройки: mkdir etc cp -r /etc/backuppc/ ./etc/ Создадим каталоги, необходимые для работы backuppc на нашем диске mkdir /external-backup-disk/backuppc mkdir -p /external-backup-disk/usr/share/backuppc mkdir -p /external-backup-disk/usr/share/backuppc/cgi-bin Подправим конфиг backuppc mcedit /external-backup-disk/etc/backuppc/config.pl Примечание: здесь и далее я использую текстовый редактор mcedit (входит в пакет mc). Вы можете использовать любой другой. Необходимо установить следующие параметры:
Теперь все готово к установке нового экземпляра. 5. Произведем установку backuppc Скачаем последнюю стабильную версию с сайта проекта: wget http://downloads.sourceforge.net/project/b...PC-3.1.0.tar.gz Примечание: в данной статье рассматривается установка версии 3.1.0 (последней стабильной на данный момент). Возможно, при установке более ранних или поздних версий, что-то придется делать немного иначе. Разархивируем ее и запустим установщик: tar -xzvf BackupPC-3.1.0.tar.gz cd BackupPC-3.1.0 ./configure.pl --config-path /external-backup-disk/etc/backuppc/config.pl Во время первого запуска configure.pl начал ругаться: bash: ./configure.pl: /bin/perl: плохой интерпретатор: Нет такого файла или каталога Вылечил так: ln -s /usr/bin/perl /bin/perl Во время установки нам будет задано несколько вопросов. Необходимо убедится, что на них даны ответы, соответствующие конфигурации нашей системы: --> Full path to existing main config.pl [/external-backup-disk/etc/backuppc/config.pl]? --> BackupPC will run on host [your_backup_server_name]? --> BackupPC should run as user [backuppc]? --> Install directory (full path) [/external-backup-disk/usr/share/backuppc]? --> Data directory (full path) [/external-backup-disk/backuppc]? --> CGI bin directory (full path) [/external-backup-disk/usr/share/backuppc/cgi-bin]? --> Apache image directory (full path) [/external-backup-disk/usr/share/backuppc/image]? --> URL for image directory (omit http://host; starts with '/') [/backuppc-external/image]? Теперь скопируем на диск стартовый скрипт для демона backuppc: cp init.d/debian-backuppc /external-backup-disk/etc/init.d/ chmod 755 /external-backup-disk/etc/init.d/debian-backuppc Дадим права пользователю backuppc изменять свои конфиги chown -R backuppc:backuppc /external-backup-disk/etc/backuppc Подправим символическую ссылку на каталог с конфигами хостов (напомню: мы скопировали эти конфиги из /etc/backuppc) ls -l /external-backup-disk/etc/backuppc lrwxrwxrwx 1 backuppc backuppc 13 Июл 22 20:29 pc -> /etc/backuppc rm /external-backup-disk/etc/backuppc/pc ln -s /external-backup-disk/etc/backuppc/ /external-backup-disk/etc/backuppc/pc К сожалению, configure.pl несколько некорректно устанавливает настройки backuppc (или я не правильно понимаю логику его работы) и запустить его сейчас у нас не получится. Для того, чтобы исправить ситуацию подправим один из файлов backuppc mcedit /external-backup-disk/usr/share/backuppc/lib/BackupPC/Lib.pm Необходимо заменить вот это:
на:
Судя по всему, мейнтейнер пакета для debian тоже столкнулся с этой проблемой. Обошел он ее также. Теперь запуск демона backuppc должен произойти успешно: /external-backup-disk/etc/init.d/debian-backuppc start Starting backuppc: ok. 6. Настроим apache для отображения web-интерфейса нашего экземпляра backuppc Для этого создадим файл /etc/apache2/conf.d/backuppc-external.conf со следующим содержимым:
Создадим этот каталог в файловой системе сервера: mkdir /var/www/backuppc-external Положим в него индексный файл-заглушку index.cgi содержащий
Разрешим выполнение этого файла: chmod 554 /var/www/backuppc-external/index.cgi и сделаем его резервную копию (связано с блокировками, подробности смотри ниже) cp /var/www/backuppc-external/index.cgi /var/www/backuppc-external/index.cgi.old Перезапустим apache /etc/init.d/apache2 restart Проверим, что наша заглушка открывается: http://your_backup_server_name/backuppc-external/index.cgi Теперь посмотрим на работу веб-интерфейса самого backuppc ln -sf /external-backup-disk/usr/share/backuppc/cgi-bin/index.cgi /var/www/backuppc-external/index.cgi ln -sf /external-backup-disk/usr/share/backuppc/image /var/www/backuppc-external/image После создания этих символических ссылок по адресу http://your_backup_server_name/backuppc-external/index.cgi Должен открываться интерфейс backuppc, при этом в нем мы должны увидеть настройки хостов идентичные настройкам первого экземпляра. В будущем, перед тем как размонтировать диск, нам необходимо будет восстановить удалить эти ссылки и восстановить заглушку: rm /var/www/backuppc-external/index.cgi rm /var/www/backuppc-external/image cp /var/www/backuppc-external/index.cgi.old /var/www/backuppc-external/index.cgi 7. Напишем скрипты для монтирования и размонтирования диска В первом выполняется все действия, выполненные нами выше вручную external-backup-disk_mount.sh
Второй служит для отключения диска и восстановления заглушки external-backup-disk_umount.sh
В дальнейшем предполагается, что эти скрипты лежат в каталоге /root/extbackup/ Проверим работу этих скриптов: при запуске external-backup-disk_mount.sh должно происходить монтирование зашифрованного диска и запуск экземпляра backuppc c него. после запуске external-backup-disk_umount.sh диск должен быть отмонтирован и может быть извлечен. Примечание: во время тестирования работы этих скриптов будьте внимательны. Так, например, диск может использоваться - и не будет отмонтирован. Реакция на ошибки в скрипты мной на данном этапе не закладывалась. 8. Автоматизируем процесс монтирования диска Применение udev для присваивания диску определенного имени на этом не ограничивается. Можно так же заставить его при подключении диска выполнять определенную программу. В нашем случае это будет скрипт /root/extbackup/external-backup-disk_mount.sh Для этого незначительно изменим файл /etc/udev/rules.d/10-external-backup-disks.rules добавив в него параметр RUN
Теперь монтирование и запуск backuppc должен производится автоматически при подключении USB-диска к серверу. Примечание: Необходимо отметить, что автоматическое подключение выполняется чуть дольше чем при запуске скрипта с консоли. Помимо того, при выполнении скрипта udev проявляются блокировки. Так, первая версия скрипта работающая по логике: mv index.cgi index.cgi.old ln -s /external-backup-disk/usr/share/backuppc/cgi-bin/index.cgi /var/www/backuppc-external/index.cgi ln -s /external-backup-disk/usr/share/backuppc/image /var/www/backuppc-external/image прекрасно отрабатывала при запуске вручную и дико сбоила при запуске udev: вместо создания резервной копии index.cgi с именем index.cgi.old создавалась ссылка index.cgi.old на /external-backup-disk/usr/share/backuppc/cgi-bin/index.cgi 9. Автоматизируем процесс размонтирования диска Установим sudo aptitude install sudo Cоздадим файл /var/www/backuppc-external/stop.cgi
Создадим файл /root/extbackup/external-backup-disk_web_umount.sh
И разрешим пользователю www-data выполнять его от имени root. Для этого пропишем в /etc/sudoers
Примечание: вы, конечно, знаете, что непосредственная правка /etc/sudoers не рекомендуется, и изменения в него необходимо вносить с помощью команды visudo И последний штрих: добавим ссылку на stop.cgi в интерфейс backuppc. Для этого необходимо в файле config.pl mcedit /external-backup-disk/etc/backuppc/config.pl изменить параметр $Conf{CgiNavBarLinks} Сейчас у меня он выглядит так:
Примечание: перед нажатием на кнопку YES необходимо завершить все выполняемые на данный момент задания. И все. Теперь монтирование выполняется автоматически при подключении диска к серверу, а размонтирование и отключение доступно через веб-интерфейс. Необходимости входить на консоль нет. 10. И все же на последок. А если вдруг настанет большой кабздец и бэкап сервер со всеми дисками перейдет в мир иной. То для восстановления информации с внешнего зашифрованного диска понадобится: как минимум: ключевой файл (или ключевая фраза из него) /root/extbackup/external-backup-disk.key в идеале: ядро с поддержкой reiser4 сервер с apache на борту конфиг апача: /etc/apache2/conf.d/backuppc-external.conf скрипты: /root/extbackup/external-backup-disk_mount.sh /root/extbackup/external-backup-disk_umount.sh /root/extbackup/external-backup-disk_web_umount.sh /etc/udev/rules.d/10-external-backup-disks.rules 11. А что дальше. На текущий момент данная конфигурация полностью удовлетворяет моим требованиям. Однако я вижу, что кое что еще можно усовершенствовать. а. Cделать возможность загрузки с внешнего диска. При этом автоматически поднимать на нем apache и backuppc. Добиться того, чтобы этот backuppc подхватывал конфиги и данные находящиеся на зашифрованном диске. В этом случае данный usb-диск станет самодостаточным для восстановления информации. б. Усовершенствовать скрипты и предусмотреть принудительное завершение заданий при получении команды на отмонтирование. Станислав Жельнио aka SparF август 2009 г. Источники: 1. Сравнение файловых систем — Википедия 2. Writing udev rules by Daniel Drake (dsd) 3. Работа с зашифрованными дисками в Linux, FreeBSD, NetBSD, OpenBSD by Mark Silinio 4. BackupPC Это сообщение отредактировал(а) SparF - 20.2.2011, 11:48 -------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||
![]()
|
| Правила форума "Linux/UNIX: Администрирование" | |
|
|
Этот форум предназначен для решения вопросов по администрации *n?x-систем, в частности по настройке сложных сетей и обслуживанию серверного оборудования.
За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу). В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим. Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Администрирование *NIX систем | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |