~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
- Зеркалирование по SSH
$ 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
🄯 Rami Rosenfeld, 2022. GNU FDL 1.3.