Общие заметки про UNIX, Linux

Содержание
  1. Rsync Shared Server Manual
    1. 1. Основная модель работы
  2. 2. Установка rsync
    1. Debian / Ubuntu / Astra Linux
    2. RHEL / Rocky / AlmaLinux / Oracle Linux
    3. Fedora
    4. Alpine Linux
    5. Проверка версии
  3. 3. Проверка доступности сервера
  4. 4. Получение списка опубликованных модулей
  5. 5. Просмотр содержимого удаленного модуля
  6. 6. Аутентификация
  7. 7. Интерактивный ввод пароля
  8. 8. Использование файла с паролем
  9. 9. Переменная окружения RSYNC_PASSWORD
  10. 10. Безопасный ввод пароля в переменную
  11. 11. Скачивание файлов с сервера
  12. 12. Загрузка файлов на сервер
  13. 13. Критическая разница между dir и dir/
    1. Вариант 1
    2. Вариант 2
  14. 14. Рекомендуемый базовый набор параметров
  15. 15. Более удобный прогресс
  16. 16. Dry-run
  17. 17. Зеркальная синхронизация с удалением
  18. 18. Защита от случайного удаления
  19. 19. Исключение файлов и каталогов
  20. 20. Файл исключений
  21. 21. Include / exclude
  22. 22. Ограничение размера файлов
  23. 23. Ограничение скорости
  24. 24. Возобновление передачи больших файлов
    1. --partial
    2. --partial-dir
    3. --append-verify
  25. 25. Проверка содержимого по checksum
  26. 26. Только обновление более новых файлов
  27. 27. Игнорирование уже существующих файлов
  28. 28. Передавать только существующие файлы
  29. 29. Не перезаписывать более новые destination-файлы
  30. 30. Сохранение удаленных или заменяемых файлов
  31. 31. Сжатие данных
  32. 32. Права доступа
  33. 33. Не сохранять owner и group
  34. 34. Не сохранять permissions
  35. 35. Принудительно назначить права
  36. 36. Symbolic links
  37. 37. Hard links
  38. 38. ACL
  39. 39. Extended attributes
  40. 40. Практический Linux backup-профиль
  41. 41. Numeric IDs
  42. 42. Работа с нестандартным портом
  43. 43. Таймаут соединения
  44. 44. IPv4 и IPv6
  45. 45. Прокси
  46. 46. Шифрование трафика
  47. 47. Rsync daemon vs rsync over SSH
    1. Rsync daemon
    2. Rsync over SSH
  48. 48. SSH tunnel для rsync daemon
  49. 49. Передача одного файла
  50. 50. Передача нескольких файлов
  51. 51. Передача списка файлов
  52. 52. Файлы с пробелами и специальными символами
  53. 53. Пустые каталоги
  54. 54. Только каталоги
  55. 55. Удаление исходных файлов после передачи
  56. 56. Проверка результата без повторной передачи
  57. 57. Статистика
  58. 58. Itemized changes
  59. 59. Формат itemized output

Rsync Shared Server Manual

Полное практическое руководство по работе с общим rsync-сервером в режиме rsync daemon, когда ресурс доступен по адресу вида:

rsync://user@host/path

Пример:

rsync://backup@10.10.10.20/files

или:

rsync://backup@rsync.example.org/files

Важно: rsync://... - это не rsync поверх SSH. Это подключение к rsync daemon, который обычно слушает TCP-порт 873.


1. Основная модель работы

В режиме rsync daemon сервер публикует один или несколько модулей.

Пример конфигурации сервера:

[files]
    path = /srv/rsync/files
    read only = false
    auth users = backup
    secrets file = /etc/rsyncd.secrets

В этом случае адрес:

rsync://backup@host/files

означает:

  • backup - пользователь rsync daemon;
  • host - DNS-имя или IP-адрес сервера;
  • files - имя rsync-модуля;
  • /srv/rsync/files - реальный путь на сервере, скрытый от клиента.

Далее внутри модуля можно обращаться к подкаталогам:

rsync://backup@host/files/projects/
rsync://backup@host/files/backups/server01/

2. Установка rsync

Debian / Ubuntu / Astra Linux

sudo apt update
sudo apt install rsync

RHEL / Rocky / AlmaLinux / Oracle Linux

sudo dnf install rsync

Для старых систем:

sudo yum install rsync

Fedora

sudo dnf install rsync

Alpine Linux

sudo apk add rsync

Проверка версии

rsync --version

3. Проверка доступности сервера

По умолчанию rsync daemon использует:

TCP/873

Проверить TCP-порт:

nc -vz host 873

или:

telnet host 873

или:

nmap -Pn -p 873 host

Пример:

nc -vz rsync.example.org 873

Если сервер работает на нестандартном порту, например 8873:

nc -vz host 8873

4. Получение списка опубликованных модулей

Если сервер разрешает просмотр списка модулей:

rsync rsync://host/

или:

rsync rsync://user@host/

Пример результата:

files           Shared files
backup          Backup storage
software        Software repository

После этого модуль можно использовать как:

rsync://user@host/files

5. Просмотр содержимого удаленного модуля

Просмотреть список файлов:

rsync rsync://user@host/files/

Подробный список:

rsync -av rsync://user@host/files/

Только просмотр без копирования:

rsync --list-only rsync://user@host/files/

Пример:

rsync --list-only rsync://backup@10.10.10.20/files/

Просмотр конкретного каталога:

rsync --list-only rsync://backup@10.10.10.20/files/projects/

6. Аутентификация

Rsync daemon может использовать собственную аутентификацию.

Пользователь из URI:

rsync://backup@host/files

не обязан существовать как Linux-пользователь на сервере.

Обычно сервер содержит:

auth users = backup
secrets file = /etc/rsyncd.secrets

а файл /etc/rsyncd.secrets выглядит так:

backup:StrongPassword

7. Интерактивный ввод пароля

Самый простой вариант:

rsync -av rsync://backup@host/files/ ./files/

Rsync запросит:

Password:

Пароль при вводе не отображается.


8. Использование файла с паролем

Для автоматизации рекомендуется использовать:

--password-file=/path/to/password-file

Создать файл:

printf '%s\n' 'StrongPassword' > ~/.rsync-password

Выставить права:

chmod 600 ~/.rsync-password

Использование:

rsync -av \
  --password-file="$HOME/.rsync-password" \
  rsync://backup@host/files/ \
  ./files/

В password-файле для клиента указывается только пароль, без имени пользователя.

Правильно:

StrongPassword

Неправильно:

backup:StrongPassword

9. Переменная окружения RSYNC_PASSWORD

Можно передать пароль через переменную:

export RSYNC_PASSWORD='StrongPassword'
rsync -av rsync://backup@host/files/ ./files/
unset RSYNC_PASSWORD

Одной командой:

RSYNC_PASSWORD='StrongPassword' rsync -av rsync://backup@host/files/ ./files/

Недостатки:

  • секрет присутствует в окружении процесса;
  • может попасть в shell history, если пароль указан прямо в командной строке;
  • может быть доступен другим процессам в зависимости от ОС и настроек.

Для cron/systemd обычно предпочтительнее --password-file с правами 600.


10. Безопасный ввод пароля в переменную

Если пароль нужно получить интерактивно без отображения:

read -rsp 'Rsync password: ' RSYNC_PASSWORD
echo
export RSYNC_PASSWORD
rsync -av rsync://backup@host/files/ ./files/
unset RSYNC_PASSWORD

Или:

read -rsp 'Rsync password: ' RSYNC_PASSWORD
echo
RSYNC_PASSWORD="$RSYNC_PASSWORD" rsync -av rsync://backup@host/files/ ./files/
unset RSYNC_PASSWORD

11. Скачивание файлов с сервера

Общий синтаксис:

rsync [options] rsync://user@host/module/path/ /local/path/

Пример:

rsync -av \
  --password-file="$HOME/.rsync-password" \
  rsync://backup@host/files/ \
  /data/files/

Это направление:

SERVER -> CLIENT

12. Загрузка файлов на сервер

Общий синтаксис:

rsync [options] /local/path/ rsync://user@host/module/path/

Пример:

rsync -av \
  --password-file="$HOME/.rsync-password" \
  /data/files/ \
  rsync://backup@host/files/

Направление:

CLIENT -> SERVER

Для загрузки серверный модуль должен разрешать запись:

read only = false

13. Критическая разница между dir и dir/

Это одна из наиболее важных особенностей rsync.

Вариант 1

rsync -av /data/project/ rsync://user@host/files/project/

Копируется содержимое /data/project/.

Например:

/data/project/file1
/data/project/file2

окажутся как:

files/project/file1
files/project/file2

Вариант 2

rsync -av /data/project rsync://user@host/files/

Копируется сам каталог project.

Результат:

files/project/file1
files/project/file2

Практическое правило:

source/ = содержимое каталога
source  = сам каталог

14. Рекомендуемый базовый набор параметров

Для обычной синхронизации:

rsync -avh --progress \
  --password-file="$HOME/.rsync-password" \
  /data/files/ \
  rsync://backup@host/files/

Значение параметров:

Параметр Назначение
-a archive mode
-v подробный вывод
-h человекочитаемые размеры
--progress прогресс передачи

-a приблизительно соответствует:

-rlptgoD

то есть включает:

  • рекурсивную обработку;
  • сохранение symbolic links;
  • timestamps;
  • permissions;
  • group;
  • owner;
  • device/special files.

Некоторые атрибуты могут не применяться сервером из-за прав процесса rsync daemon или настроек модуля.


15. Более удобный прогресс

Для крупных копирований:

rsync -avh --info=progress2 \
  --password-file="$HOME/.rsync-password" \
  /data/files/ \
  rsync://backup@host/files/

--info=progress2 показывает общий прогресс всей операции.


16. Dry-run

Перед опасной синхронизацией рекомендуется выполнять тестовый запуск:

rsync -avhn \
  --password-file="$HOME/.rsync-password" \
  /data/files/ \
  rsync://backup@host/files/

или:

rsync -avh --dry-run \
  --password-file="$HOME/.rsync-password" \
  /data/files/ \
  rsync://backup@host/files/

Особенно важно использовать --dry-run вместе с:

--delete
--delete-excluded
--remove-source-files

17. Зеркальная синхронизация с удалением

Чтобы удалить на destination файлы, которых больше нет на source:

rsync -avh --delete \
  --password-file="$HOME/.rsync-password" \
  /data/files/ \
  rsync://backup@host/files/

Перед использованием:

rsync -avhn --delete ...

Варианты удаления:

--delete-before
--delete-during
--delete-delay
--delete-after

Для большинства случаев достаточно:

--delete

18. Защита от случайного удаления

Можно ограничить максимальное число удаляемых файлов:

--max-delete=100

Пример:

rsync -avh --delete --max-delete=100 \
  --password-file="$HOME/.rsync-password" \
  /data/files/ \
  rsync://backup@host/files/

Для критичных backup-задач это полезная защитная мера.


19. Исключение файлов и каталогов

Пример:

rsync -av \
  --exclude='*.tmp' \
  --exclude='cache/' \
  --exclude='.git/' \
  /data/project/ \
  rsync://backup@host/files/project/

Несколько исключений:

--exclude='*.log' \
--exclude='*.tmp' \
--exclude='cache/'

20. Файл исключений

Создать:

/etc/rsync/exclude.txt

Содержимое:

*.tmp
*.log
.cache/
.git/
node_modules/
__pycache__/

Использование:

rsync -av \
  --exclude-from=/etc/rsync/exclude.txt \
  /data/project/ \
  rsync://backup@host/files/project/

21. Include / exclude

Пример - передавать только .conf:

rsync -av \
  --include='*/' \
  --include='*.conf' \
  --exclude='*' \
  /etc/ \
  rsync://backup@host/configs/

Порядок правил имеет значение.


22. Ограничение размера файлов

Не передавать файлы больше 1 ГБ:

--max-size=1G

Не передавать файлы меньше 1 МБ:

--min-size=1M

Пример:

rsync -av --max-size=1G /data/ rsync://backup@host/files/

23. Ограничение скорости

Например, ограничить передачу примерно до 10 МБ/с:

--bwlimit=10M

Пример:

rsync -avh --bwlimit=10M \
  /data/files/ \
  rsync://backup@host/files/

Другой пример:

--bwlimit=50M

24. Возобновление передачи больших файлов

Полезные параметры:

--partial
--append-verify

--partial

Не удаляет частично переданный файл при обрыве:

rsync -avh --partial ...

--partial-dir

Частичные файлы можно хранить отдельно:

--partial-dir=.rsync-partial

Пример:

rsync -avh \
  --partial \
  --partial-dir=.rsync-partial \
  /data/ \
  rsync://backup@host/files/

--append-verify

Для очень больших файлов:

rsync -avh --append-verify bigfile.iso rsync://backup@host/files/

Этот режим продолжает передачу существующего файла и проверяет корректность данных.


25. Проверка содержимого по checksum

По умолчанию rsync определяет изменения в основном по размеру и времени модификации.

Чтобы сравнивать контрольные суммы:

rsync -avc ...

или:

rsync -av --checksum ...

Недостаток:

  • требуется прочитать содержимое всех файлов с обеих сторон;
  • значительно выше нагрузка CPU и дисков;
  • операция может стать существенно медленнее.

Использовать, когда важнее максимальная точность сравнения, а не скорость.


26. Только обновление более новых файлов

--update

или:

-u

Пример:

rsync -avu /data/ rsync://backup@host/files/

Rsync не будет перезаписывать файлы на destination, если там находится более новый файл.


27. Игнорирование уже существующих файлов

--ignore-existing

Пример:

rsync -av --ignore-existing \
  /data/ \
  rsync://backup@host/files/

Полезно для одноразовой догрузки файлов.


28. Передавать только существующие файлы

--existing

Rsync будет обновлять только те файлы, которые уже есть на destination.


29. Не перезаписывать более новые destination-файлы

--update

Но следует учитывать, что timestamps между системами должны быть корректными.

Желательно использовать NTP/chrony.


30. Сохранение удаленных или заменяемых файлов

Для backup-сценариев полезен:

--backup

Можно задать каталог:

--backup-dir=/path/to/archive

В rsync daemon destination это зависит от доступной серверу файловой структуры и настроек модуля.

Пример:

rsync -av --delete \
  --backup \
  --backup-dir=.deleted-$(date +%F) \
  /data/ \
  rsync://backup@host/files/

31. Сжатие данных

Параметр:

-z

Пример:

rsync -avz /data/ rsync://backup@host/files/

Имеет смысл для:

  • текстовых файлов;
  • конфигураций;
  • исходного кода;
  • логов.

Обычно почти бесполезно для уже сжатых форматов:

.zip
.7z
.gz
.jpg
.png
.mp4
.iso

На быстрых LAN-сетях -z иногда даже снижает производительность из-за CPU overhead.


32. Права доступа

Archive mode -a пытается сохранить:

permissions
owner
group
timestamps
symlinks

Однако в daemon mode конечный результат зависит от:

  • UID процесса rsync daemon;
  • uid / gid в rsyncd.conf;
  • filesystem permissions;
  • read only;
  • fake super;
  • ACL;
  • SELinux/AppArmor;
  • параметров модуля.

33. Не сохранять owner и group

Если это не требуется:

--no-owner --no-group

Пример:

rsync -av --no-owner --no-group \
  /data/ \
  rsync://backup@host/files/

34. Не сохранять permissions

--no-perms

Пример:

rsync -av --no-perms /data/ rsync://backup@host/files/

35. Принудительно назначить права

Можно использовать --chmod.

Например:

--chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r

где:

  • D - directories;
  • F - files.

Пример:

rsync -av \
  --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r \
  /data/ \
  rsync://backup@host/files/

36. Symbolic links

Archive mode сохраняет symlink как symlink:

-a

Явно:

-l

Если нужно копировать содержимое, на которое указывает symlink:

-L

или:

--copy-links

Осторожно: это может привести к копированию данных за пределами исходного дерева.


37. Hard links

Сохранение hard links:

-H

Пример:

rsync -aH /data/ rsync://backup@host/files/

Это увеличивает потребление памяти при большом количестве файлов.


38. ACL

Для POSIX ACL:

-A

Пример:

rsync -aA /data/ rsync://backup@host/files/

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


39. Extended attributes

Для xattr:

-X

Пример:

rsync -aX /data/ rsync://backup@host/files/

Для ACL + xattr:

rsync -aAX /data/ rsync://backup@host/files/

40. Практический Linux backup-профиль

Для Linux-файловой системы часто используют:

rsync -aHAX --numeric-ids \
  --delete \
  --info=progress2 \
  --password-file="$HOME/.rsync-password" \
  /data/ \
  rsync://backup@host/backup/server01/

Однако такие параметры требуют соответствующих прав и серверной поддержки.


41. Numeric IDs

--numeric-ids

Rsync будет работать с UID/GID как с числовыми значениями и не пытаться преобразовывать их через локальные имена пользователей.

Полезно при backup между системами с различными /etc/passwd и /etc/group.


42. Работа с нестандартным портом

Для daemon mode:

--port=8873

Пример:

rsync -av --port=8873 \
  rsync://backup@host/files/ \
  ./files/

43. Таймаут соединения

Таймаут установки соединения:

--contimeout=10

Пример:

rsync -av --contimeout=10 ...

Таймаут отсутствия I/O:

--timeout=300

Пример:

rsync -av \
  --contimeout=10 \
  --timeout=300 \
  /data/ \
  rsync://backup@host/files/

44. IPv4 и IPv6

Принудительно IPv4:

-4

Пример:

rsync -4 -av rsync://backup@host/files/ ./files/

Принудительно IPv6:

-6

IPv6 URI:

rsync://user@[2001:db8::10]/files/

45. Прокси

Rsync daemon может использовать SOCKS-прокси через сторонние инструменты, например proxychains, но нативная поддержка зависит от конкретного сценария.

Пример:

proxychains4 rsync -av rsync://backup@host/files/ ./files/

Для production рекомендуется по возможности использовать VPN или другой защищенный сетевой канал.


46. Шифрование трафика

Критически важно понимать:

rsync://

сам по себе не шифрует трафик.

Пароль rsync daemon также не превращает протокол в защищенный TLS-канал.

Для недоверенных сетей используйте один из вариантов:

  1. VPN;
  2. WireGuard;
  3. IPsec;
  4. SSH tunnel;
  5. TLS-wrapper;
  6. stunnel;
  7. rsync поверх SSH вместо daemon mode.

47. Rsync daemon vs rsync over SSH

Rsync daemon

rsync://user@host/module/path

Типичный порт:

873/tcp

Аутентификация:

rsync auth users + secrets file

Rsync over SSH

rsync -av /data/ user@host:/srv/data/

Типичный порт:

22/tcp

Аутентификация:

SSH password / SSH key / certificate

Это принципиально разные режимы.


48. SSH tunnel для rsync daemon

Если требуется оставить daemon mode, но передавать данные через SSH tunnel:

На клиенте:

ssh -L 8873:127.0.0.1:873 user@host

После этого в другом терминале:

rsync -av \
  --port=8873 \
  rsync://backup@127.0.0.1/files/ \
  ./files/

Тогда rsync-соединение идет через локальный SSH tunnel.


49. Передача одного файла

Upload:

rsync -av file.zip rsync://backup@host/files/

Download:

rsync -av rsync://backup@host/files/file.zip ./

50. Передача нескольких файлов

rsync -av file1 file2 file3 rsync://backup@host/files/

51. Передача списка файлов

Создать файл:

files.txt

Пример содержимого:

etc/app.conf
scripts/backup.sh
data/file.dat

Использование:

rsync -av \
  --files-from=files.txt \
  /source/root/ \
  rsync://backup@host/files/

52. Файлы с пробелами и специальными символами

Rsync корректно работает с именами файлов с пробелами при правильном quoting.

Например:

rsync -av '/data/My File.txt' rsync://backup@host/files/

Рекомендуется всегда заключать shell-пути с переменными в кавычки:

rsync -av "$SOURCE/" "$DESTINATION"

53. Пустые каталоги

По умолчанию rsync передает пустые каталоги при рекурсивной работе.

Исключить пустые каталоги:

-m

или:

--prune-empty-dirs

54. Только каталоги

Пример создания структуры каталогов без передачи файлов:

rsync -avf '+ */' -f '- *' \
  /data/ \
  rsync://backup@host/files/

55. Удаление исходных файлов после передачи

--remove-source-files

Пример:

rsync -av --remove-source-files \
  /data/outgoing/ \
  rsync://backup@host/incoming/

Rsync удаляет успешно переданные файлы, но обычно не удаляет пустые каталоги автоматически.

Удалить пустые каталоги отдельно:

find /data/outgoing -type d -empty -delete

Использовать этот режим осторожно.


56. Проверка результата без повторной передачи

Например:

rsync -avnc \
  --password-file="$HOME/.rsync-password" \
  /data/ \
  rsync://backup@host/files/

Если вывода изменений нет, дерево файлов совпадает по checksum.


57. Статистика

--stats

Пример:

rsync -av --stats /data/ rsync://backup@host/files/

Показывает:

  • количество файлов;
  • общий размер;
  • реально переданный объем;
  • скорость;
  • эффективность delta-transfer.

58. Itemized changes

Очень полезный режим диагностики:

-i

или:

--itemize-changes

Пример:

rsync -avi /data/ rsync://backup@host/files/

Позволяет понять, почему конкретный файл был обновлен.


59. Формат itemized output

Пример:

>f.st...... file.txt

Приблизительно:

  • > - файл передается на destination;
  • < - файл передается с destination;
  • f - обычный файл;
  • s - изменился размер;
  • t - изменился timestamp;
  • p - permissions;
  • o - own