Палата9

Вы здесь: Главная > Все блоги > "Паяльник" > Linux: резервное копирование по расписанию штатными средствами


Linux: резервное копирование по расписанию штатными средствами

AuthenticAMD

25 блогов

5667 комментариев

Не в сети

Создан: 20.02.2015 1:50

Практически во всех популярных десктопных дистрибутивах Linux есть уже установленные и нередко настроенные программы резервного копирования. В Debian и Ubuntu - наиболее популярных дистрибутивах - это Deja Dup. Вроде бы удобный, понятный инструмент, умеющий делать резервные копии по расписанию, сохраняющий архивы в сжатом формате в файлах по ~30 Мб (т.е. даже если в архиве есть большие файлы, их можно разместить по множеству мелких носителей; правда с большими файлами у этой программы как раз проблемы). Все бы хорошо, но делать с помощью этой программы бекапы более-менее крупных файлов или множества файлов - большая проблема. Первое копирование происходит достаточно долго, о чем Deja Dup честно предупреждает. Последующие архивации, вроде бы, должны происходить быстрее - не измененные файлы заменять-то не надо, а только копировать новые файлы и заменять устаревшие... Но не тут-то было! Вторичная архивация (особенно больших файлов) происходит очень... нет, ОЧЕНЬ медленно. Программа, судя по всему, игнорирует такие мета-данные, как время правки и создания файла, а проверяет... да хрен его знает, что она там проверяет, но делает это очень долго! На то, чтобы выяснить, что файл не нуждается в замене уходит невообразимо много времени (на повторную архивацию пары сотен гигабайт может уйти до недели!!!)
Конечно, функция восстановления файлов от определенной даты иногда может быть полезна, однако именно из-за этой "фичи" Deja Dup не копирует измененный файл целиком, а только лишь находит изменения в нем и архивирует эти изменения... экономит место - хорошо, а то, что архивация происходит недели да со 100% загрузкой процессора, кстати, - неприемлемо.
Архивировать такой штукой мелкие (по объему занимаемой памяти) документы и файлы - пожалуйста, довольно удобно. А вот заархивировать образ жесткого диска виртуальной машины (что нужно было мне) Deja Dup практически не может. Кроме того, в сети есть немало жалоб, что восстановить архив потом бывает невозможно...

Тогда я обратился к довольно древнему инструменту резервного копирования - rsync.
Это консольная утилита, делающая... резервные копии, как ни странно. Впрочем, функционал ее довольно широк, о котором можно узнать в мануале (man rsync). В самом простом варианте для копирования файлов (или папок) достаточно испльзовать такую конструкцию:

Code:



rsync /[то, что нужно копировать] /[куда копировать]


Но это, как стрельба из пушки по воробьям, с этой задачей вполне справится обычная утилита копирования (cp / [files] / [target] ). Для выработки оптимального кода для копирования я воспользовался графической оболочкой для rsync - LuckyBackup.


Можно в понятном виде выбрать необходимые опции:

...в частности, выбрать в качестве пункта назначения удаленный хост, соединение с которым осуществляется через shh с открытым ключем, как было показано здесь

Получившийся скрипт можно скопировать, нажав на кнопку "Проверить":


Так, этот скрипт копирует данные из нужной папки на удаленную машину, заменяя устаревшие файлы и исключая некоторые папки:

Code:



rsync -h --progress --stats -r -tgo -p -l -D --numeric-ids --update --exclude='www/video/' --exclude='www/music/' --protect-args -e "ssh -i /root/.ssh/id_rsa -p 22" /var/ root@192.168.0.20:/home/victor/backup-host/var/


где: первые три аргумента - вывод информации о процессе копирования;
-r - рекурсивное копирование, т.е. внутрь папок и подпапок, если таковые имеются, в противном случае заменятся только файлы, находящиеся в корне копируемой папки;
-tgo - согласно мануалу - заменяет время правки файла (в противном случае заменяться будут все файлы без разбора), а так же оставляет неизменным владельца файла и группу;
-p - оставляет права (на чтение, запись, исполнение) такими же, какие были изначально в копируемом файле (папке);
-l - создает заново ссылки в месте назначения, если таковые будут;
-D - воссоздает на удаленной машине файлы блочных устройств (работает только под рутом) [вообще-то нафиг не нужна, но luckybackupзачем-то приплел и эту опцию] ;
--numeric-ids - передает вместе с файлом ID пользователя и группы. Полезно, иначе после восстановления файла (или множества файлов), доступ к ним будет запрещен...
--update - пропускает файлы, которые моложе (время правки меньше), чем исходные файлы. Если файлы имеют одинаковое время правки, то файл будет заменен, если различаются их размеры;
--exclude='/путь/к/файлу/или/папке/' - файл или папка, исключаемые из копирования (есть несколько примеров синтаксиса, но работает (у меня) только этот);
--protect-args - запрещает удаленному серверу интерпретировать специальные символы, например: пробел, ~, $, ;, & и т.д.;
-e - позволяет использовать удаленную оболочку;
"ssh -i /root/.ssh/id_rsa -p 22" - (кавычки обязательны) - означает, что необходимо соединится с удаленным сервером посредством ssh, используя ключ, а так же указывается порт;
/var/ - источник;
root@192.168.0.20:/home/victor/backup-host/var/ - назначение. В данном случае пункт назначения - удаленный сервер.
Важно! На удаленной машине так же должен быть установлен rsync.



Показаны последние комментарии

Linux: резервное копирование по расписанию штатными средствами

20.02.2015 1:50

#1

Практически во всех популярных десктопных дистрибутивах Linux есть уже установленные и нередко настроенные программы резервного копирования. В Debian и Ubuntu - наиболее популярных дистрибутивах - это Deja Dup. Вроде бы удобный, понятный инструмент, умеющий делать резервные копии по расписанию, сохраняющий архивы в сжатом формате в файлах по ~30 Мб (т.е. даже если в архиве есть большие файлы, их можно разместить по множеству мелких носителей; правда с большими файлами у этой программы как раз проблемы). Все бы хорошо, но делать с помощью этой программы бекапы более-менее крупных файлов или множества файлов - большая проблема. Первое копирование происходит достаточно долго, о чем Deja Dup честно предупреждает. Последующие архивации, вроде бы, должны происходить быстрее - не измененные файлы заменять-то не надо, а только копировать новые файлы и заменять устаревшие... Но не тут-то было! Вторичная архивация (особенно больших файлов) происходит очень... нет, ОЧЕНЬ медленно. Программа, судя по всему, игнорирует такие мета-данные, как время правки и создания файла, а проверяет... да хрен его знает, что она там проверяет, но делает это очень долго! На то, чтобы выяснить, что файл не нуждается в замене уходит невообразимо много времени (на повторную архивацию пары сотен гигабайт может уйти до недели!!!)
Конечно, функция восстановления файлов от определенной даты иногда может быть полезна, однако именно из-за этой "фичи" Deja Dup не копирует измененный файл целиком, а только лишь находит изменения в нем и архивирует эти изменения... экономит место - хорошо, а то, что архивация происходит недели да со 100% загрузкой процессора, кстати, - неприемлемо.
Архивировать такой штукой мелкие (по объему занимаемой памяти) документы и файлы - пожалуйста, довольно удобно. А вот заархивировать образ жесткого диска виртуальной машины (что нужно было мне) Deja Dup практически не может. Кроме того, в сети есть немало жалоб, что восстановить архив потом бывает невозможно...

Тогда я обратился к довольно древнему инструменту резервного копирования - rsync.
Это консольная утилита, делающая... резервные копии, как ни странно. Впрочем, функционал ее довольно широк, о котором можно узнать в мануале (man rsync). В самом простом варианте для копирования файлов (или папок) достаточно испльзовать такую конструкцию:

Code:



rsync /[то, что нужно копировать] /[куда копировать]


Но это, как стрельба из пушки по воробьям, с этой задачей вполне справится обычная утилита копирования (cp / [files] / [target] ). Для выработки оптимального кода для копирования я воспользовался графической оболочкой для rsync - LuckyBackup.


Можно в понятном виде выбрать необходимые опции:

...в частности, выбрать в качестве пункта назначения удаленный хост, соединение с которым осуществляется через shh с открытым ключем, как было показано здесь

Получившийся скрипт можно скопировать, нажав на кнопку "Проверить":


Так, этот скрипт копирует данные из нужной папки на удаленную машину, заменяя устаревшие файлы и исключая некоторые папки:

Code:



rsync -h --progress --stats -r -tgo -p -l -D --numeric-ids --update --exclude='www/video/' --exclude='www/music/' --protect-args -e "ssh -i /root/.ssh/id_rsa -p 22" /var/ root@192.168.0.20:/home/victor/backup-host/var/


где: первые три аргумента - вывод информации о процессе копирования;
-r - рекурсивное копирование, т.е. внутрь папок и подпапок, если таковые имеются, в противном случае заменятся только файлы, находящиеся в корне копируемой папки;
-tgo - согласно мануалу - заменяет время правки файла (в противном случае заменяться будут все файлы без разбора), а так же оставляет неизменным владельца файла и группу;
-p - оставляет права (на чтение, запись, исполнение) такими же, какие были изначально в копируемом файле (папке);
-l - создает заново ссылки в месте назначения, если таковые будут;
-D - воссоздает на удаленной машине файлы блочных устройств (работает только под рутом) [вообще-то нафиг не нужна, но luckybackupзачем-то приплел и эту опцию] ;
--numeric-ids - передает вместе с файлом ID пользователя и группы. Полезно, иначе после восстановления файла (или множества файлов), доступ к ним будет запрещен...
--update - пропускает файлы, которые моложе (время правки меньше), чем исходные файлы. Если файлы имеют одинаковое время правки, то файл будет заменен, если различаются их размеры;
--exclude='/путь/к/файлу/или/папке/' - файл или папка, исключаемые из копирования (есть несколько примеров синтаксиса, но работает (у меня) только этот);
--protect-args - запрещает удаленному серверу интерпретировать специальные символы, например: пробел, ~, $, ;, & и т.д.;
-e - позволяет использовать удаленную оболочку;
"ssh -i /root/.ssh/id_rsa -p 22" - (кавычки обязательны) - означает, что необходимо соединится с удаленным сервером посредством ssh, используя ключ, а так же указывается порт;
/var/ - источник;
root@192.168.0.20:/home/victor/backup-host/var/ - назначение. В данном случае пункт назначения - удаленный сервер.
Важно! На удаленной машине так же должен быть установлен rsync.


Так!