~Rami ₪ MANUALS

רמי

SUBJECT: RSYNC: Резервное копирование данных

AUTHOR: Rami Rosenfeld

DATE: 08/10/22

TIME: 03.00

LANG: ru, en

LICENSE: GNU FDL 1.3

TAGS: gnu, gnome, software, opensource, linux, system, man, manual, bash, privacy, security, rhel, centos, mate, xfce, lxde, spin, de, systemd, systemctl, selinux, firewalld, dnf, rpm, rsync, backup

RSYNC: Резервное копирование данных

INTRO

Одно из "Правил Розенфельда" (изд. 2-е; испр. и доп. - см. раздел Philosophy) гласит:

0. Надежно защищайте ВСЕ носители информации полнодисковым шифрованием.

1. Шифруйте ВСЕ пользовательские данные.

2. Регулярно создавайте резервные копии пользовательских файлов и каталогов, баз данных, критичных системных областей и настроек прикладного ПО.

3. ЕЩЕ РАЗ: обязательно делайте резервные копии!

4. Храните резервные копии в удаленных местах.

5. Храните резервные копии в РАЗНЫХ удаленных местах.

6. Своевременно обновляйте/синхронизируйте резервные копии.

Именно этому (за исключением шифрования данных - на эту тему см. подразделы LUKS2 и GPG) и посвящена текущая тема. Чтобы быть совсем точным, речь в ней идет о зеркальной синхронизации ("каталог-источник" = "каталог-приемник"), а не о резервном копировании в целом.

NOTE

Проще всего производить синхронизацию из консоли/терминала при помощи rsync. Это прикладное ПО, выполняющее синхронизацию файлов и каталогов с минимизированием трафика (и шифрованием при необходимости). Зеркалирование производится одним потоком в каждом направлении; опционально используются сжатие, рекурсия, сохранение группы, владельцев, прав, временных меток.

Примечание: Все команды выполняются от обычного пользователя.

$ mkdir out

$ mkdir in

где out - каталога-источник.

Это самый простой пример, мы используем его для наглядности. Далее в тестовых целях наполните каталог out произвольными файлами и подкаталогами.

$ rsync --verbose --progress --stats --recursive --times --perms --compress --delete --dry-run ~/out/ ~/in

Использованные опции и ключи:

--dry-run - ТЕСТОВЫЙ ЗАПУСК (имитация работы без реального выполнения команды);

--verbose - вывод информации в STDOUT;

--progress - отображение процесса копирования в STDOUT;

--stats - отображение статистики в STDOUT;

--recursive - рекурсивное копирование данных (включая данные дочерних каталогов);

--times - сохранение времени создания файлов и каталогов;

--perms - сохранение прав;

--compress - использование сжатия (можно установить уровень компрессии);

--delete - (осторожно!) - удаление объектов в каталоге-приемнике, если они удалены в каталоге источнике.

Примечание: Обратите внимание на косую черту после каталога ~/out/ - она свидетельствует, что синхронизироваться будет именно содержимое каталога out, а не сам каталог с его содержимым! Косая черта после каталога ~/in не столь важна, ее можно не приводить.

$ rsync --verbose --progress --stats --recursive --times --perms --compress --delete ~/out/ ~/in

Многие параметры можно заменить их сокращенными ключами. Так, параметр -a ("архив"), является алиасом для группы параметров -rlptgoD, обозначающих:

- рекурсивное (recurse) копирование;

- копирование символических ссылок как символические ссылки (links);

- сохранение прав доступа (permissions), времени создания (times), группы (group) и владельца файла (owner), а также сохранение файлов устройств и специальных файлы (devices).

Примечание: Опция -a создает зеркальную копию файлов, но(!) она не будет работать корректно, если ОС (в частности - Windows), НА которую выполняется копирование, не поддерживает какие-либо атрибуты копируемых файлов. Это же замечание относится к флэшкам и винчестерам, отформатированным в FAT/NTFS.

Примечание: Чтобы не запутаться в множественных опциях и их алиасах, я рекомендую все же использовать их полные названия (как и указано мною выше), а не "-а" и т.п.

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

--max-size - не передавать файлы с размером большим, чем "значение"K/M/G (K - килобайты; M - мегабайты; G - гигабайты);

--min-size - не передавать файлы с размером меньшим, чем "значение"K/M/G ;

--exclude "*.iso" - исключить все имена файлов, соответствующие *.iso;

--exclude "/temp" - исключить файл с именем "temp";

--exclude "folder/" - исключить любой каталог с именем "folder".

Примечание: Параметры --include и --exclude допускают только по одному шаблону каждый.

Рекомендую также обратить внимание на важные опции (однако их применение выходит за пределы данного руководства):

--backup

--update

$ rsync -az -e 'ssh -p 20022' /home/user/out/ user_name@server.name:/in

Использованные опции и ключи:

-a - см. описание выше;

-e - шифрование;

'ssh -p 22222' - использование протокола SSH (см. описание в отдельном подразделе) и порта 22222.

--compress=

--compress-choice=

--compress-level=

Примечание: Выбор алгоритма компрессии и степени сжатия - достаточно нетривиальная задача, не сравнимая с обычным указанием степени компрессии у алгоритмов 7z, zip и т.п., поэтому лучше не добавляйте два последних параметра самостоятельно, если не разбираетесь в вышеперечисленном. Они будут задействованы по умолчанию.

Однако чтобы увеличить скорость работы, можно указать программе не обрабатывать априорно несжимаемые распространенные форматы: 7z, jpg, png, iso, odt, ogg и т.п. Форматы файлов приводятся через косую черту; их полный список можно узнать в руководстве. Например:

--skip-compress=3gp/7z/aac/apk/avi/deb/dmg/gpg/gz/iso/jar/jpeg/jpg/mkv/mov/mp3/mp4/mpa/mpeg/mpg/mpv/odb/odf/odg/odi/odm/odp/ods/odt/oga/ogg/ogm/ogv/ogx/opus/png/rar/rpm/tgz/webm/webp/zip

В данном случае мы обрабатываем ВЕСЬ домашний раздел пользователя, т.е. "~/".

Примечание: По умолчанию сторонние носители в RHEL, Fedora, CentOS подключаются в точку монтирования /run/media/user/ - измените ее при необходимости.

$ rsync --verbose --progress --stats --recursive --times --delete /home/user/* /run/media/user/HDD_LABEL

где HDD_LABEL - метка диска.

Примечание: /* - не будет синхронизировать скрытые файлы и каталоги. Чтобы скопировать их, астериск ("звездочку") необходимо убрать!

Подробнее см.:

man rsync

₪ Back to home ₪

🄯 Rami Rosenfeld, 2022. GNU FDL 1.3.