forked from opennet/FSBackup
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
477 lines (376 loc) · 32.6 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
FSBACKUP - file system backup and synchronization utility.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY WARRANTIES *
For english documentation type 'perldoc fsbackip.pl'
---------------------------------------------------------------------------
FSBACKUP - система инкрементального резервного копирования и синхронизации ФС.
http://www.opennet.ru/dev/fsbackup/
По всем вопросам обращайтесь к автору: Maxim Chirkov <[email protected]>
---------------------------------------------------------------------------
СОДЕРЖАНИЕ:
Назначение.
Комплект поставки.
Выполняемые функции.
Установка.
Файл конфигурации.
Восстановление данных.
Виды бэкапа.
Типы хранилища для архива бэкапа.
Шифрование бэкапа.
Благодарности.
---------------------------------------------------------------------------
Назначение:
Система fsbackup была создана для обеспечения резервного копирования серверов
разного масштаба на специально отведенном сервере бэкапа.
Достоинствами метода резервного копирования на специально отведенном сервере,
с использованием fsbackup, является:
- высокая производительность (скорость передачи по 100Мбит сети намного
выше скорости записи на ленточный накопитель), низкая себестоимость
(цена Мб на современных жестких IDE дисках достаточно низкая);
- надежность (возможность параллельного хранения нескольких резервных
копий за разные моменты времени);
- безопасность (применение PGP шифрования резервных копий перед записью на
бэкап сервер);
- автономность (один раз настроив систему бэкап будет производится
автоматически, не нужно обслуживать стриммер),
- возможность сохранения только измененных с последнего бэкапа данных, без
затрат на копирования не изменившейся информации.
- простота настройки и установки (как правило система способна
функционировать сразу после запуска инсталляционного скрипта)
- простота восстановления (открытый формат для хранения резервных копий
(tar), позволяет восстановить данные без использования входящих в
комплект утилит восстановления).
- гибкость задания масок для помещения файлов и каталогов в архив.
- поддержка бэкапа баз данных хранимых в MySQL и PostgreSQL.
fsbackup может выполнять создание как полного образа сервера, так и резервных
копий основных подсистем, исключая операционную систему. В случае полного бэкапа,
полное восстановление работоспособности происходит в течении нескольких десятков
минут, в случае частичного бэкапа для восстановления требуется несколько часов.
В отличие от многих систем автоматического резервного копирования, в fsbackup
применяется гибкая система построения масок (с использованием regex) для
принятия решения о помещении файлов в бэкап.
---------------------------------------------------------------------------
Комплект поставки:
create_backup.sh
Скрипт для периодического запуска всей подсистемы резервного
копирования из crontab.
install.pl
Скрипт для установки программы и всех недостающих Perl модулей.
fsbackup.pl
Основной скрипт для бэкапа и синхронизации.
cfg_example
Пример файла конфигурации и документация по всем конфигурационным
директивам.
cache/
Образ директории для помещения временных хэшей.
sys_backup/
Образ директории для помещения бэкапов созданных sysbackup.sh.
modules/
Perl модули которые требуются для функционирования fsbackup.pl.
scripts/
Директория со вспомогательными скриптами.
scripts/mysql_backup.sh
scripts/pgsql_backup.sh
Скрипты для создания полного и частичного бэкапа базы данных
хранимой в PostgreSQL или MySQL.
Поддерживаются режимы работы:
1. полный бэкап всех баз и структур;
2. полный бэкап структур всех баз + бэкап данных в избранных базах/таблицах;
3. полный бэкап структур всех баз + бэкап данных во всех базах,
кроме избранных баз/таблиц;
scripts/sysbackup.sh
Скрипт для сохранения списка всех установленных в системе пакетов
для FreeBSD и Linux, для Linux использующих rpm - сохранение файлов
конфигурации всех установленных в системе пакетов.
scripts/sysrestore.sh
Скрипт для автоматической установки всех пакетов, список которых
был сохранен скриптом sysbackup.sh, в свеже-установленной системе.
scripts/fsrestore.sh
Скрипт для восстановления данных из инкрементального бэкапа.
---------------------------------------------------------------------------
Выполняемые функции:
- 2 метода вычисления контрольных сумм:
timesize - по атрибутам (дата, время, размер, права доступа...)
md5 - по содержимому файла.
- 4 вида бэкапа:
backup - инкрементальный бэкап в архив (т.е. копируются только
изменившиеся с момента последнего бэкапа файлы).
full_backup - полный бэкап в архив, без хэша (т.е. всегда копируются
все файлы).
sync - синхронизация дерева.
hash - только генерация хэша, без помещения файлов в архив (может
использоваться для определения какие файлы были изменены)
- 3 типа хранилища бэкапа:
local - хранение бэкапа в локальной файловой системе.
remote_ssh - копирование бэкапа на удаленную машину с использованием SSH
remote_ftp - копирование бэкапа на удаленную машину по FTP.
- 8 встроенных операторов (можно использовать regex) для описания
помещаемых в бэкап (или игнорируемых для помещения в бэкап) файлов:
/dir[/file] - путь к файлу/директории для бэкапа.
!/dir[/file] - отрицание пути, не помещать в бэкап (не маска, а реальный путь).
# - комментарий
=~ - маска для файла или директории, а не абсолютный путь. Первый или второй символ.
f~ - маска для файла. Первый или второй символ.
d~ - маска для директории. Первый или второй символ.
=! - "НЕ" маска для файла или директории, а не абсолютный путь. Первый или второй символ.
f! - "НЕ" маска для файла. Первый или второй символ.
d! - "НЕ" маска для директории. Первый или второй символ.
Ограничен по времени создания и размеру
- Возможность шифрования бэкапа с помощью PGP.
- Гибкое задание уровня инкрементальности. Например, при = 7 - 6 раз
будут помещаться только изменения, на 7 раз бэкап будет объединен в
один файл.
- Скрипт для сохранения списка всех установленных в системе пакетов
для FreeBSD и Linux.
- Скрипты для создания полного и частичного бэкапа базы данных
хранимой в PostgreSQL или MySQL. Поддерживаются режимы работы:
- полный бэкап всех баз и структур;
- полный бэкап структур всех баз + бэкап данных в избранных базах;
- полный бэкап структур всех баз + бэкап данных во всех базах,
кроме избранных баз;
---------------------------------------------------------------------------
Установка:
Для установки достаточно запустить скрипт ./install.pl
Программа автоматически скопируется в заданный директивой --prefix каталог,
по умолчанию установка производится в каталог /usr/local/fsbackup.
После установки достаточно переименовать и отредактировать файл конфигурации
cfg_example, следуя приведенным внутри cfg_example инструкциям.
Затем, отредактируйте скрипт запуска "create_backup.sh", при необходимости
измените путь к хранилищу бэкапа и название список используемых файлов
конфигурации.
Активируйте периодический запуск подсистема бэкапа в crontab:
18 4 * * * /usr/local/fsbackup/create_backup.sh| mail -s"`uname -n` backup report" root
При использовании бэкапа SQL сервера или системы отредактируйте скрипты
в директории ./scripts (mysql_backup.sh, pgsql_backup.sh, sysbackup.sh).
Например:
>su
# ./install.pl
# cd /usr/local/fsbackup
# vi cfg_example
# mv cfg_example server_backup.conf
# vi create_backup.sh
# crontab -e
# cd scripts
# vi sysbackup.sh
# vi pgsql_backup.sh
# exit
>
--------------------------------------------------------------------------
Файл конфигурации:
Подробное описание всех параметров файла конфигурации смотрите в файле
cfg_example.
Внимание, при описании директорий для бэкапа нельзя указывать путь к символической
ссылке, только полный путь к реальной директории. Например, если указано
/home, а это символическая ссылка на /usr/home, то в бэкап будет помещены
данные о символической ссылке, а не содержание директории.
Рекомендуется, описать бэкап разных участков файловой системы в нескольких
файлах конфигурации. Например, мной используется следующие несколько файлов
конфигурации:
server_etc.conf - описывает создание бэкапа директории /etc и секретных
данных с использованием PGP шифрования;
server_local.conf - бэкап /usr/local, за исключением временных файлов,
бэкап БД.
server_home.conf - бэкап директорий пользователей (/home или /usr/home)
Внимание, директории для сохранения бэкапа в каждом конфигурационном файле
должны отличаться ($cfg_remote_path, $cfg_local_path), сохранение в одной и
той же директории нескольких, описанных разными .conf файлами, бэкапов не
допустимо.
---------------------------------------------------------------------------
Восстановление данных:
Полная резервная копия может быть восстановлена в короткий промежуток времени
без использования дополнительных, входящих в комплект fsbackup утилит.
Например, если архив бэкапа сохранен в директории /mnt/full_backup, для полного
восстановления достаточно набрать:
# cd /
# tar xzf /mnt/full_backup/full_backup.tar.gz
# sh /mnt/full_backup/full_backup.dir
Для полного восстановления данных из инкрементального бэкапа может
использоваться скрипт scripts/fsrestore.sh, для восстановления просто
отредактируйте пути внутри скрипта и запустите его.
В случае частичного бэкапа файловой системы, без бэкапа файлов операционный
системы, восстановить исходный набор установленных в момент бэкапа пакетов
(должен быть разрешен запуск scripts/sysbackup.sh в create_backup.sh) поможет
скрипт scripts/sysrestore.sh. После установки ОС, скрипт автоматически
установит недостающие пакеты для FreeBSD и Linux.
При бэкапе данных с SQL сервера PostgreSQL или Mysql, восстановление производится
командами: psql -d template1 -f sqlbackupfile или mysql < sqlbackupfile.
Таким образом можно привести типовой процесс полного восстановления системы:
- базовая установка ОС (без дополнительных пакетов)
- монтирование диска с бэкапом.
- редактирование путей и запуск scripts/sysrestore.sh для установки нужных
пакетов.
- редактирование путей и запуск scripts/fsrestore.sh
- запуск SQL сервера и восстановление баз.
Назначение файлов при инкрементальном бэкапе (для не инкрементального - формат
"имя.ext"):
имя-время-том.tar.gz архив - бэкапа
(имя_бэкапа-YYYY.MM.DD.HH.MM.SS-номер_тома.tar.gz).
имя-время.del список удаленных с момента предыдущего бэкапа файлов
имя-время.hash хэш таблица с контрольными суммами.
имя-время.list список файлов в архиве.
имя-время.dir команды для восстановления прав доступа и пустых директорий.
---------------------------------------------------------------------------
Виды бэкапа:
Вид бэкапа в файле конфигурации определяется параметром $cfg_backup_style:
backup - инкрементальный бэкап в архив. Копируются только
изменившиеся с момента последнего бэкапа файлы, уровень
инкрементальности задается параметром $cfg_increment_level,
параметр определяет через какого числа итераций файлы с
инкрементальными копиями будут объединены в один файл. Например,
при $cfg_increment_level = 7 - 6 раз будут помещаться только
изменения, на 7 раз бэкап будет объединен в один файл.
0 - сколько угодно раз, без объединения. Достоинства - возможность
отследить изменения (и восстановить данные) на любой момент со
времени первой итерации, в архив копируются только измененные и
новые данные, что значительно экономит трафик и место на диске.
Подходит для ежедневного бэкапа динамично меняющейся или критичной
к потере информации.
full_backup - полный бэкап в архив, без хэша. В бэкап всегда помещаются
все файлы отмеченные в файле конфигурации для резервного
копирования). На сервере где сохраняется бэкап рекомендуется
проводить вторичное резервирование, например, в crontab раз
в неделю дублировать бэкап в другую директорию. Недостатки -
огромный трафик для копирования бэкапа по сети и высокие
требования к объему хранилища бэкапа. Достоинство - экономия
процессорных ресурсов и памяти на создание и поддерживание хэша.
Прекрасно подходит для бэкапа маломощных машин с ограниченными
ресурсами или при статичности резервируемых данных (например,
бэкап выносных рутеров раз в месяц).
sync - синхронизация дерева (только для типа хранилища ssh или local).
Почти то же, что и full_backup или backup (в зависимости от задания
ключа -c при запуске fsbackup.pl), за исключением того, что копия
не хранится в архиве, а область файловой системы отмеченная для
бэкапа полностью воссоздается в заданной директории на бэкап сервере.
Предназначено для параллельного хранения (синхронизации дерева)
исходных текстов, содержимого web-сервера, синхронизации проектов
с рабочей машины разработчика на сервер и т.д.
hash - только генерация хэша, без помещения файлов в архив (опция -h).
Может применяться для пометки помещения файлов в бэкап, без
физического их перемещения, для отслеживания изменений в файловой
системе для обнаружения подмены файлов злоумышленниками и т.д.
Скрипт fsbackup.pl, поддерживает ряд ключей задаваемых в командной строке:
fsbackup.pl [-n|-f|-h|-c] файл_конфигурации
-n - создаем новый архив независимо от состояния хэша.
-f - full_backup - полный бэкап в архив, без хэша.
-h - hash - только генерация хэша, без помещения файлов в архив.
-c - clean - очистка хранилища с инкрементальным бэкапом и создание
нового бэкапа.
---------------------------------------------------------------------------
Типы хранилища для архива бэкапа:
Определение типа хранилища для бэкапа определяется в файле конфигурации
переменной $cfg_type. Поддерживается 3 типа хранилищ: local, remote_ssh
и remote_ftp.
- local - сохранение бэкапа в локальной файловой системе.
Конфигурация:
$cfg_type="local";
$cfg_local_path="/var/backup"; # Путь к хранилищу.
- remote_ssh - сохранение бэкапа на удаленном компьютере, данные передаются
через шифрованное соединение организованное с использованием SSH.
На системе с которой производится бэкап должен быть установлен ssh клиент,
на удаленном - ssh сервер. Метод remote_ssh является наиболее защищенным,
но и достаточно ресурсоемким. Предварительно необходимо настроить доступ
бэкап клиента на сервер с использованием шифрованных ключей, без ввода
пароля. Это делается следующим образом:
Примем: локальная машина - машина с которой будет производиться бэкап и
на которой будем запускать скрипт fsbackup.pl. Удаленная машина - машина
на которую будут копироваться файлы с бэкапом.
Запускаем на локальной машине программу ssh-keygen, на все задаваемые
вопросы принимаем значения по умолчанию (поле passphrase оставляем
пустым). Далее, запускаем программу ssh-copy-id user@remotehost, где
user - пользователь удаленной машины remotehost - адрес удаленной машины,
( или вручную, на удаленной машине в директории ~/.ssh, создаем файл
authorized_keys, куда копируем содержимое файла identity.pub с локальной
машины). Для увеличения безопасности в файл ~/.ssh/authorized_keys на
удаленной машине добавляем перед ключом (разделив пробелом) строку
from="localhost", где localhost - адрес локальной машины
(from="localhost" 1024 23 1343.....).
Конфигурация:
$cfg_type="remote_ssh";
$cfg_remote_host="server.remote.ru"; # Сервер на который будет копироваться бэкап.
$cfg_remote_login="backup_login"; # Логин под которым будет сохранятся бэкап.
$cfg_remote_path="/home/backup_login/backup"; # Директория куда должны помещаться файлы бэкапа, директория должна присутствовать.
- remote_ftp - сохранение бэкапа на удаленном компьютере, данные передаются
по протоколу ftp, на удаленном хосте должен быть запущен ftp сервер.
Так как пароль хранится в файле конфигурации в открытом виде, желательно
ограничить доступ к хосту к удаленному хосту через tcpwrapper или firewall,
а так же ограничить вход пользователя, под которым будет храниться бэкап,
только через chroot ftp. Положительными сторонами копирования по ftp,
является высокая производительность закачки и небольшая нагрузка на CPU.
Конфигурация:
$cfg_type="remote_ftp";
$cfg_remote_host="server.remote.ru"; # Сервер на который будет копироваться бэкап.
$cfg_remote_password="Test1234"; # пароль для входа по ftp.
$cfg_remote_login="backup_login"; # Логин под которым будет сохранятся бэкап.
$cfg_remote_path="/home/backup_login/backup"; # Директория куда должны помещаться файлы бэкапа, директория должна присутствовать.
$cfg_remote_ftp_mode=0; # Active (0) или Passive (1) соединение.
---------------------------------------------------------------------------
Шифрование бэкапа:
Для шифрования бэкапа в системе должна быть установлена программа PGP шифрования
GnuPG: http://www.gnupg.org (рекомендуется) или PGP: http://www.pgpi.org
Далее:
Локальная машина - машина на которой производится резервное копирование.
Удаленная машина - машина куда сохраняется архив бэкапа.
Рекомендации по работе с PGP программами для создания шифрованного бэкапа
(для pgp2.6, pgp5.0, gnupg):
Для создания публичного и секретного ключей наберите (на удаленной машине):
pgp2.6> pgp -kg
pgp5.0> pgpk -g
gnupg> gpg --gen-key # если генерация ключа занимает слишком много времени
воспользуйтесь ключом gpg --quick-random
Экспортируйте созданный публичный ключ в файл (на удаленной машине):
pgp2.6> pgp -akx <UserID> <файл куда будет записан ключ>
pgp5.0> pgpk -ax <UserID> <файл куда будет записан ключ>
gnupg> gpg --export -a <UserID> > <файл куда будет записан ключ>
Затем, добавте созданный публичный ключ (на локальной машине):
pgp2.6>pgp -ka <файл с ключом с удаленной машины>
pgp5.0>pgpk -a <файл с ключом с удаленной машины>
gnupg>gpg --import <файл куда будет записан ключ>
# Для pgupg необходимо заверить ключ (gpg --gen-key на локльной машине не забудте):
gnupg>gpg --sign-key <имя ключа>
Для расшифровки необходимо запустить (на удаленной машине):
pgp2.6>cat encrypted.tar.gz | pgp -f -z'пароль' > расшифрованный.tar.gz
pgp5.0>cat encrypted.tar.gz | pgpv -f -z'пароль' > расшифрованный.tar.gz
gnupg>cat encrypted.tar.gz | gpg --decrypt > расшифрованный.tar.gz
Для шифрования используется (на локальной машине):
pgp2.6>cat input| pgp -ef userid > output
pgp5.0>cat input| pgpe -f userid > output
gnupg>cat input| gpg -e -r userid > output
---------------------------------------------------------------------------
Благодарности:
Alex Sokoloff. <[email protected]>
- Предложение о введении уровней говорливости (verbose mode).
- Изменить запуск программы (ввести проверку на длину
письма), вынести ее в файл fsbackup.cron.
- Написал небольшой скрипт fsfind.pl для поиска файла в архивах он
просматривает файлы list в директории с архивами. Может кому-то
будет полезен. Работает с локальными архивами.
- скрипт для бэкапа Interbase баз.
Oleg S. Gints <[email protected]>:
- Предложение по введению дополнительного резервирования при
использовании инкрементального бэкапа.
- Обнаружение ошибки в mysql_backup.sh (для варианта полного архива
пропущен ключ --all-databases)
- Сообщение о неправильном определении уровня инкрементальности для
локального бэкапа.
- Замечание об отсутствии лидирующих нулей в новом формате именования
файлов в бэкапе.
Носков Илья <[email protected]>, Сергей Баукин <[email protected]>:
- Идея разбивки слишком больших файлов на несколько частей,
предложения и патчи по создания архивов занимающих несколько Гб.
Aleksey Kuznetsov <[email protected]>
- Сообщение о пропуске ключа --all-databases в mysql_backup.sh
Pavel Stoliarov <[email protected]>
- Исправление ошибки приводящей к некорректной работе при локальном
бэкапе.
- Предложение по сохранению старых бэкапов после инкремента.
Alexandr Zhukov <[email protected]>
- Замечание по неправильной работе правила для исключения
директории из бэкапа.
Zherdev Anatoly <[email protected]>
- Патч и идея введения директивы $cfg_stopdir_prune, для отключения
рекурсивного просмотра директорий, запрещаемых для помещения в бэкап.
Priamikov Alexei <[email protected]>
- Обнаружение ошибки в fsrestore.sh
Valeriy Zavolodko <[email protected]>
- Сообщение о недоработке при установке $cfg_root_path отличных от "/".
Руслан Стельмаченко <[email protected]>
- Исправление досадной ошибки в скрипте бэкапа MySQL таблиц.