?

Log in

Простая система бэкапа для Unix или средство от бессоницы - Tutorial.Ru

> Свежие записи
> Архив
> Друзья
> Личная информация
> Tutorial.Ru

Март 24, 2006


Previous Entry Поделиться Next Entry
nmind
11:42 am - Простая система бэкапа для Unix или средство от бессоницы
Туториал: Простая система бэкапа для Unix или средство от бессоницы

Автор: nmind . konstantin kalachev / http://tutorial.ru

Дата последней модификации: 2006.03.22

Дополнительные файлы:
- backup.2006.03.tutorial.ru.tar.gz

- Введение

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

В этом туториале описан способ установки скриптов в /usr/local/tools/backup а самих бэкапов в /usr/local/backup. Буддте внимательны, если захотите изменить эти пути.

- Инсталяция

Вся инсталяция заключается в создании рабочей директории, скачивании архива со скриптами и их распаковки


mkdir -p /usr/local/tools cd /tmp wget http://tutorial.ru/files/backup/backup.2006.03.tutorial.ru.tar.gz tar -zxvf backup.2006.03.tutorial.ru.tar.gz -C /usr/local/tools rm -f backup.2006.03.tutorial.ru.tar.gz chmod -R 644 /usr/local/tools/backup


Теперь в директории /usr/local/tools/backup находятся семь файлов. Вкраце о всех:
backup_daily.sh - делает ежедневный бэкап
backup_weekly.sh - копирует ежедневный бэкап в папки с еженедельным бэкапом
backup_monthly.sh - копирует ежедневный бэкап в папки с ежемесячным бэкапом
backup_single.sh - создает архив из указаной директории или файла
backup_list.sh - создает по архиву на каждую поддиректорию или подфайл
exclude.txt - текстовый файл, содержащий пути, которые не должны бэкапиться
crontab - строки, которые должны быть добавлены в /etc/crontab

- Скрипты backup_single.sh и backup_list.sh

Обоим скриптам на вход нужно давать два параметра:
1. Директория или файл, которые будут бэкапиться
2. Директория, куда будет складываться бэкап

backup_single.sh делает один файл из директории или файла. То есть, если вы хотите забэкапить директорию /home/www/some.ru в /usr/local/backup/daily/www , то команда "backup_single.sh /home/www/some.ru /usr/local/backup/daily/www" сделает в директории /usr/local/backup/daily/www только один архив (файл), в котором будет все содержимое директории /home/some.ru. Он будет называться /usr/local/backup/daily/www/YYYY.MM.DD/YYYY.MM.DD-HH.MM.SS-some.ru.tar.gz . Такое непростое название файла обеспечивает его уникальность и информативность, что важно для бэкапа.

backup_list.sh делает отдельный архив на каждую поддиректорию. Зачем это нужно? Например для очень больших директорий, каждый подкаталог которых является отдельным сайтом. Итак, если в /home/www находится несколько каталогов (some.ru, another.ru, site.ru), то команда "backup_list.sh /home/www /usr/local/backup/daily/www" сделает в /usr/local/backup/daily/www три архива из каталогов some.ru, another.ru, site.ru

- Файл exclude.txt

Так же в нашей системе бэкапа должен присутствовать файл exclude.txt . В него пишутся все файлы и дериктории, которые не должны попасть в архив.

В этот файл можно записывать как имена директорий, которые вы не хотите архивировать, с полными путями, так и строки, которые они могут включать. Например, если вы не хотите архивировать все папки с именами Maildir и конкретно папку /home/www/tutorial.ru/tmp , то файл exclude.txt будет выглядеть так


Maildir /home/www/tutorial.ru/tmp


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

- Скрипты backup_daily.sh , backup_weekly.sh и backup_monthly.sh / Основная настройка

Самым важным из них является backup_daily.sh , в нем описаны все директории и файлы, которые нужно бэкапить. В приведеном примере директория /var/lib/mysql будет сохраняться в директорию /usr/local/backup/daily/mysql_data как несколько файлов с помощью backup_list.sh . А директория /usr/local/apache/conf будет сохраняться в /usr/local/backup/daily/apache_conf одним файлом с помощью backup_single.sh . Таким образом каждая база mysql будет сохранена в отдельный архив, а вся конфигурация apache будет сохранена в один архивный файл.

Это содержимое backup_daily.sh . Замените приведеные примеры с базой mysql и конфигурацией apache на свои параметры. Например для бэкапа директории /home/www подойдет такая строчка "sh ${SCRIPT_ROOT}/backup_list.sh /home/www ${BACKUP_ROOT}/www"


#!/bin/sh ### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ### ### ### (c) tutorial.ru / nmind / konstantin kalachev ### -== look for more tutorials in Russian on http://tutorial.ru ==- ### ### date: 2006.03.22 ### ### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ### BACKUP_ROOT=/usr/local/backup/daily SCRIPT_ROOT=/usr/local/tools/backup rm -rf ${BACKUP_ROOT}/* sh ${SCRIPT_ROOT}/backup_list.sh /var/lib/mysql ${BACKUP_ROOT}/mysql_data sh ${SCRIPT_ROOT}/backup_single.sh /usr/local/apache/conf ${BACKUP_ROOT}/apache_conf


Скрипт backup_weekly.sh занимается тем, что копирует всю информацию из папки /usr/local/backup/daily в /usr/local/backup/weekly .

Содержимое файла backup_weekly.sh :


#!/bin/sh ### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ### ### ### (c) tutorial.ru / nmind / konstantin kalachev ### -== look for more tutorials in Russian on http://tutorial.ru ==- ### ### date: 2006.03.22 ### ### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ### BACKUP_ROOT=/usr/local/backup/weekly BACKUP_DAILY=/usr/local/backup/daily rm -rf ${BACKUP_ROOT}/* cp -R ${BACKUP_DAILY} ${BACKUP_ROOT}


Скрипт backup_monthly.sh делает то же самое. Копирует все их папки /usr/local/backup/daily в /usr/local/backup/monthly

Содержимое файла backup_monthly.sh :


#!/bin/sh ### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ### ### ### (c) tutorial.ru / nmind / konstantin kalachev ### -== look for more tutorials in Russian on http://tutorial.ru ==- ### ### date: 2006.03.22 ### ### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ### BACKUP_ROOT=/usr/local/backup/monthly BACKUP_DAILY=/usr/local/backup/daily rm -rf ${BACKUP_ROOT}/* cp -R ${BACKUP_DAILY} ${BACKUP_ROOT}


Важно! Перед тем, как новый бэкап будет сохранен в директорию, старый будет оттуда удаляться. При этом используется команда "rm -rf" . Будте предельно внимательны, если захотите изменить пути в скриптах на свои, чтобы скрипты, сделаные для сохранности информации не стали работать прямо противоположным способом.

- Проверка

После того, как все будет настроено можно попробывать запустить каждый из скриптов по отдельности


sh /usr/local/tools/backup/backup_daily.sh sh /usr/local/tools/backup/backup_weekly.sh sh /usr/local/tools/backup/backup_monthly.sh


Все работает правильно? Тогда можно продолжать дальше.

- Файл crontab

В нем находятся три строчки, которые нужно вставить в /etc/crontab .


00 04 * * * root sh /usr/local/tools/backup/backup_daily.sh 00 05 * * 6 root sh /usr/local/tools/backup/backup_weekly.sh 00 06 * 15 * root sh /usr/local/tools/backup/backup_monthly.sh


Таким образом backup_daily.sh будет запускаться в 4 часа ночи каждый день, backup_weekly.sh в 5 часов ночи каждую субботу, backup_monthly.sh в 6 часов ночи каждое 15-е число.

Если вы захотите вставить их в свой кронтаб с помощью команды "crontab -e", не забудьте убрать параметр root.

- P.S.

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

1. Перекачивать бэкапы по сети.
Тут все зависит от того, есть ли у вас такая возможность. Этот способ работает в случае нескольких серверов, желательно находящихся в одном сегменте сети, чтобы не загружать канал и не переводить трафик. На сервере с бэкапами можно сделать ftp-аккаунт, с которого они будут доступны. А второй сервер будет переодически их оттуда через этот ftp-аккаунт скачивать. Для большей безопасности можно поднять ftp-сервер на отдельном порту и открыть туда доступ только для проверенных ip на вашем firewall. Еще один вариантом безопасной передачи данных на другой сервер является sftp. Это передача данных по ssh в зашифрованном виде. Почитайте man sftp.
Аналогичную систему можно организовать и в обратную сторону. И получится, что на сервере А у вас есть бэкап сервера Б, а на Б бэкап А. Если один из них умрет, со второго всегда можно будет достать все необходимое.

2. Переписывать на отдельный винчестер.
Цены на железо падают, а цена на информацию повышается. Подумайте, что проще, купить 120gb IDE винчестер меньше чем за сто долларов или потерять все данные, которые стоят в разы дороже.
Надеюсь, убедил :) В общем, если вы этот винчестер все таки купили, то вот вам мое предложение. После того, как бэкапы сделаны монтировать винчестер (mount) и переписывать их на него, после чего демонтировать (umount). Благодаря этому "rm -rf" ему не страшен. Понятно, что в случае умышленного взлома информацию с него так же могут стереть, но дополнительная безопасность никогда не бывает лишней и в большинстве случаев может помочь.

3. Записывать все на CD руками
Да, это тоже работает.


Крепких вам снов .)



-------------
(с) tutorial.ru / дядьки онлайн

(1 комментарий | Оставить комментарий)

Comments:


[User Picture]
From:feelafrica
Date:Сентябрь 9, 2012 01:26 am
(Link)
thanks for the great article

> Go to Top
LiveJournal.com