Продолжаю цикл постов о нашем домашнем сервере. Сегодня буду писать о резервном копировании данных - или бэкапе, как его называют айтишники. У бэкапа, как известно, две основных беды: во-первых, его всегда лень делать, а во-вторых - для него жаль места. Поэтому, когда наступает час X, часто выясняется, что последний бэкап был сделан год назад, и к тому же, как назло, самое важное и нужное именно сейчас как раз и не было скопировано. Впрочем, бывает и еще обиднее. Лет десять назад у меня навернулся 80-гигабайтник - диск по тем временам весьма немалых размеров. И то, что я делал относительно регулярные бэкапы, меня не спасло - потому что я делал их на другой логический раздел того же самого жесткого диска. Весь размер своей глупости я осознал слишком поздно. Я почему-то тогда больше боялся вирусов и собственных кривых ручек (в равной степени способных порушить файловую систему) чем физической смерти винчестера. Верно говорят, в смерть трудно поверить, пока не увидишь ее своими глазами... Так что бэкап должен обязательно делаться на другой физический носитель. Конечно, возможны ситуации, когда и это может не спасти - например, пожар, потоп или кража квартиры с выносом всей техники - но это все-таки риски уже совсем другого порядка.. С какой стороны подойти к бэкапу
Поэтому лично мне абсолютно пустого двухтерабайтного винчестера, расположенного на сервере и отведенного специально под бэкап, в общем, хватило с лихвой на то, чтобы обслуживать несколько компьютеров, суммарный объем дисков на которых составляет практически те же два терабайта. Конечно, довольно внушительный объем данных хранился и на самом сервере, но это были по большей части те самые фильмы с музыкой, которых, в случае чего, не жалко. По задумке, схема резервного копирования предполагалась следующей: Такая схема не только гарантирует, что резервная копия на сервере не старше одного дня, но и позволяет получить доступ к более ранним резервным копиям, то есть увидеть свои данные такими, какими они были вчера, позавчера, неделю назад... Для того, чтобы бэкап делался регулярно, существует большое количество разнообразных программ, которые осуществляют резервное копирование автоматически по заданному расписанию. Знакомство с АкронисомПервой программой, которую мы попробовали, был Акронис. Достаточно распространенная система с очень внятной, хотя и не очень подробной документацией. Привлек он, помимо всего прочего, еще и тем, что позволяет делать полный образ системного раздела. Это значит, что если вдруг система по тем или иным причинам навернется, можно ее не переустанавливать, а восстановить из архива, как было. Очень удобно. В теории :) На практике проверять не доводилось - хотя, по-хорошему, надо бы хотя бы один раз обкатать тестовое восстановление, чтобы потом сюрпризов не было. Первое копирование, конечно, длилось очень долго: копирование десятков гигабайт по локальной сети - процесс небыстрый. Но в дальнейшем все пошло довольно гладко: каждую ночь где-то за полчаса-час все изменения сливались в архив, помечались сегодняшней датой и складывались рядышком. Через каждый из этих архивов можно было получить все файлы, находившиеся на компьютере в момент создания этого архива. Можно было тут же, не сходя с места, открыть Акронисовским проводником архив за любую дату, посмотреть, что там внутри, погулять по папкам и даже скопировать с сервера к себе на компьютер. Проблемы начались, когда прошел месяц. Сначала я чуть поподробнее расскажу, что такое инкрементный архив. Это копия данных с компьютера за первый день, плюс длинная цепочка каждодневных изменений этих самых данных. Нетрудно догадаться, что достаточно повредить хотя бы один архив в этой цепочке - и все последующие архивы также окажутся непригодными для использования.. Естественно, такой риск меня не устраивал, поэтому в настройках я указал, что глубина архива должна быть не более 30 дней. Согласно этим настройкам, при превышении заданной глубины Акронис должен был “подбирать хвост”, объединяя основной, первый архив с одним из последующих. При работе с удаленным диском, находящимся в локальной сети, эта процедура оказалась безумно долгой. За ночь Акронис не успел завершить резервное копирование, и стало понятно, что такая схема нас не устраивает. К сожалению, я тогда то ли не догадался, то ли просто руки не дошли попробовать заменить инкрементное копирование дифференциальным (когда каждый последующий архив включает в себя изменения не от последнего архива, а от самого начала), поэтому я просто оставил цепочку инкрементных архивов расти без ограничений. Когда грянул гром (умер один из жестких дисков на компьютере жены), оказалось, что в цепочке архивов, отвечающих за этот диск, поврежден фрагмент годовалой давности. До сих пор не могу понять, как это получилось - но факт, что в итоге данные удалось восстановить только в то состояние, в котором он был год назад. Все, что там появилось за последний год было потеряно. К этому моменту уже накопилось некоторое количество нареканий и к поведению Акрониса. В частности, когда он работает, делать что-то еще на машине невозможно - и иногда он напрочь игнорирует команды “остановить операцию”. Короче говоря, он не оправдал надежд (и уплаченных за него денег), поэтому было принято решение искать другие решения. Общие впечатления от Акрониса. Новая идеология: rsync и rsnapshotМетодикой резервного копирования при помощи UNIX-утилиты под названием rsync я заинтересовался давно, когда прочитал про нее в одной пространной статье, посвященной сложностям бэкапа под Windows. Меня привлекло то, что rsync оптимизирована под работу через сеть. Она находится по обе стороны сети: и на той машине, с которой делается бэкап, и на той, на которую он пишется. Это позволяет передавать информацию об изменениях, не перекачивая по сетке все файлы целиком, а отправляя только служебную информацию, позволяющую сравнить файлы и их содержимое, что чертовски экономит время. Кроме очень эффективной работы по сети, у rsync есть еще одно преимущество. Заключается оно в том, что создаваемые ею резервные копии можно размещать на диске при помощи механизма жестких ссылок - этим занимается утилита rsnapshot, являющаяся надстройкой над rsync. Таким образом, бэкапы, созданные при помощи rsnapshot, можно представить в виде обычных папок, датированных определенным числом, куда можно зайти и получить состояние системы на определенный день. Но при этом те файлы, которые не менялись, не занимают лишнего места, поскольку их имена во всех папках являются ссылками на одно и то же физическое тело файла. Плюсы rsnapshot: Разумеется, у такой великолепной схемы не может быть минусов: Все то же самое, только под Windows: cwRsyncВ природе существует такая замечательная штука, как cygwin - маленькая программа для создания UNIX-среды в Windows. Когда речь заходит о чем-то, что работает только под UNIX, но хотелось бы запустить это под Windows, первым делом вспоминают про cygwin. Так вот, на базе cygwin был создан cwRsync - аналог rsync, работающий под Windows, что позволяет распространить преимущества rsync на Windows-машины. cwRsync существует в двух ипостасях: Насколько я понимаю, недавно cwRsync стал коммерческим продуктом, но бесплатную версию по-прежнему можно скачать здесь. О том, как его настраивать, написано здесь. Как устроено резервное копирование у меняНа сервере, на двухтерабайтнике, отведенном под бэкап, есть четыре каталога: Поскольку резервное копирование осуществляется со стороны Linux-сервера, на ноутбуке мне потребовалось установить только cwRscync-сервис, обслуживающий те каталоги, которые я хочу бэкапить. Все остальные машины являются UNIX-системами, на них ничего дополнительно ставить не потребовалось. Отдельно следует отметить, что для доступа ко всем удаленным машинам потребовалось настроить беспарольный доступ на к ним с сервера через ssh по ключу. О том, как это сделать, рассказано в замечательной статье на linsovet.com. После чего можно настраивать rsnapshot. В rsnapshot.conf на сервере прописано следующее: # local system backup /boot/ localhost/ backup /bin/ localhost/ backup /home/ localhost/ backup /etc/ localhost/ backup /lib/ localhost/ backup /root/ localhost/ backup /sbin/ localhost/ backup /usr/ localhost/ backup /var/ localhost/ # ostankin.net website backup ostankin@ostankin.net:/home/ostankin/rsync/ ostankin-web/ backup ostankin@ostankin.net:/home/ostankin/public_html/ ostankin-web/ # Vlad’s laptop backup bfly-laptop::drive_d/Documents/ bfly-laptop/ backup bfly-laptop::drive_d/Stuff/ bfly-laptop/ # Julia’s iMac backup julia@imac:/Users/julia/ julia-mac/ Соответственно, каждую ночь rsnapshot просыпается по расписанию и начинает по различным сетевым протоколам собирать со всех четырех хостов изменения, произошедшие за последние сутки. Отдельно на хостинге запускается задача ежедневного архивирования базы данных блога. В результате у меня на сервере хранится семь ежедневных бэкапов глубиной в неделю, а также четыре еженедельных бэкапа глубиной в месяц: vlad@bfly-server:/mnt/backup/rsnapshot$ ll total 4 drwxr-x--- 13 root adm 4096 Dec 27 03:29 . drwxr-xr-x 10 root root 119 Aug 21 20:25 .. drwxr-xr-x 7 root root 92 Dec 27 04:02 daily.0 drwxr-xr-x 7 root root 92 Dec 26 04:03 daily.1 drwxr-xr-x 7 root root 92 Dec 24 04:07 daily.2 drwxr-xr-x 7 root root 92 Dec 23 04:08 daily.3 drwxr-xr-x 7 root root 92 Dec 22 04:07 daily.4 drwxr-xr-x 7 root root 92 Dec 21 04:02 daily.5 drwxr-xr-x 7 root root 92 Dec 20 04:06 daily.6 drwxr-xr-x 7 root root 92 Dec 17 04:05 weekly.0 drwxr-xr-x 7 root root 92 Dec 10 04:01 weekly.1 drwxr-xr-x 7 root root 92 Dec 3 05:51 weekly.2 drwxr-xr-x 7 root root 92 Nov 26 04:00 weekly.3 Акронис был также оставлен (раз уж мы все равно за него заплатили), но теперь он занимается исключительно бэкапом системных разделов - единственной задачей, которая не под силу rsync. Что еще посмотреть на тему бэкапов?Во-первых, очень рекомендую почитать статью “Померяемся бэкапами?”, написанную профессиональным Windows-администратором, где он на пальцах рассказывает, что такое бэкапы и с чем их едят. Мне эта статья попалась на глаза очень поздно, поэтому большую часть граблей, описанных там, я собрал самостоятельно :) Во-вторых, хочу упомянуть пару систем, которые люди мне рекомендовали из личного опыта (к сожалению, обе строго англоязычные):
|
|||

в ЖЖ-френдленте
в RSS-ленте
Итак, две проблемы: регулярность и место на диске. Проблема с местом на удивление легко решается, если критически подойти к вопросу: а что собственно следует архивировать? К особо ценной информации явно не относятся такие легко восполняемые ресурсы, как музыка и фильмы, а также дистрибутивы программ - все это легко скачивается из Интернета, причем зачастую новее и лучше качеством, чем было. А все, что помимо этого, уже вполне разумных размеров.
Re: Настройка бэкапа в домашней локальной сети
Слушай, а вот попроще, для одинокого чайника есть что-нибудь подходящее? Локалки нет, сервера с двухтерабайтником тоже нет. Есть простой 500Мб диск - ну с такой кривой и тормозной синхронизацией, что у меня от первой попытки осталось четкое понимание "больше никогда и ни за что". В итоге примерно раз в месяц (либо как вспомню, либо как место на винте заканчивается) копирую файлы тупо через проводник. Попутно тренирую память, вспоминая в какие именно папки вносились изменения за отчетный период :-) А уж что я пережила после переустановки системы - это вообще цензурно не описать.
Re: Настройка бэкапа в домашней локальной сети
500Мб или все-таки 500Гб? :)
Я тоже когда-то с такой схемы начинал (она, кстати, меня спасла, когда у меня ноут украли). Единственное отличие - у меня был скрипт, в котором было прописано, что нужно бэкапить, и который я время от времени запускал, когда было не лень и не жаль машинного времени :) Фактически он создавал один большой ZIP-архив и писал его сразу на внешний диск. При последующих запусках обновлял то, что изменилось (PKZIP это умеет).
Если хочешь - я тебе такой скрипт тоже сделаю, потом только задашь там все необходимые пути.
А вообще, я бы порекомендовал поэкспериментировать с CrashPlan'ом. Мне самому интересно, что за зверь, и готов попробовать с тобой побэкапиться друг к другу, выделив под тебя, скажем, 100Гб. Единственное - придется прокачивать английский :)
Re: Настройка бэкапа в домашней локальной сети
Вот, нашел свой старый скрипт, держи ссылку.
Инструкция по использованию следующая:
1. Создаешь на съемном диске каталог, где будут создаваться архивные файлы.
2. Распаковываешь туда файлы, лежащие в backup_script.zip. Их там ровно два:
- pkzip25.exe
- run_backup.cmd
3. Редактируешь файл run_backup.cmd под себя.
4. Запускаешь run_backup.cmd.
В результате создается несколько zip-файлов, каждый из которых включает в себя копию соответствующей папки, по принципу: "одна папка - один zip-архив".
Теперь о том, как редактировать скрипт. Нужно открыть его в Блокноте (ни в коем случае не в Ворде!). Мой выглядит так:
В нем есть три строчки, каждая отвечает за определенную папку. Первая архивирует логи асечного клиента, вторая - логи и настройки скайпа, третья - папочку "Мои документы". Соответственно, на выходе получается три архива (причем первые два лежат в специально созданной подпапочке AppData):
- Pidgin.zip
- Skype4.zip
- my_documents.zip
Каждая строчка - это команда на создание архива. Начинаются они все одинаково: pkzip25 -add=freshen -max -dir=relative - это менять не нужно. Дальше идет местоположение архивного zip-файла - он указывается либо сразу (как в третьей строчке) либо с указанием подпапок (как в первых двух).
Далее идет указание того, что, собственно, архивировать. Это строка, заключенная в кавычки. Она может содержать либо просто обычный путь к папочке (например, "C:\Documents and Settings\Vlad\My Documents\*") либо относительный ("%userprofile%\My Documents\*"). Последний вариант короче и идеологически правильнее, а первый стоит применять только если нужно архивировать что-то не из своего профиля, а из произвольного места на диске (например, "C:\Photos\*").
В конце каждого указания обязательно должна стоять "звездочка" - это означает "архивировать папку вместе со всем содержимым". В третьей строчке я указал исключение: -excl=Downloads. Это значит, что всякий мусор, который я накачал из Интернета, архивировать не нужно, и папку Downloads, лежащую в "Моих документах" нужно исключить из архива.
Если ты Pidgin'ом не пользуешься, то первую строчку можешь смело убивать - она тебе не нужна. Остальные вполне можно оставить как есть, плюс добавить к ним еще несколько своих.
При каждом последующем запуске скрипт найдет все изменившиеся файлы и обновит их в архиве. Если у него в процессе что-то не получится - то старый архив останется неизменным. Поэтому успешность операции проверить очень просто - достаточно проверить дату изменения архивного файла. Если она сегодняшняя - значит, все прошло успешно.
Удачи! Пиши, если будут вопросы.
Re: Настройка бэкапа в домашней локальной сети
ооооййй... мне точно понадобится переводчик :-) ну или хотя бы попробовать прочитать это днем на свежую голову (где б ее еще взять)
Re: Настройка бэкапа в домашней локальной сети
Свежая голова - вещь нужная в хозяйстве :) Найдешь - поделись :)
Ты, главное, не бойся экспериментировать. Скрипт совершенно не опасен, данные убить не может. В худшем случае просто не отработает или (совсем уж в маловероятном и экзотическом случае) создаст архив где-нибудь, где ты не ожидаешь :) Так что просто бери и пробуй - в процессе использования придет понимание.
Re: Настройка бэкапа в домашней локальной сети
Спасибо, Влад, очень интересно. Я как раз вчера сутки копировала спасенные данные с убитого винта обратно на него же и думаю организовать похожим путем хотя бы ежемесячную синхронизацию с домашним сервером - мне из всех документов может быть жалко только фото :)
Re: Настройка бэкапа в домашней локальной сети
Всегда пожалуйста! Если нужна будет консультация - обращайтесь, готов поделиться всем опытом, что у меня есть :)
Re: Настройка бэкапа в домашней локальной сети
Спасибо, Владичка :*