diff options
| author | vlapa <vlapa@ya.ru> | 2026-06-13 20:33:26 +0300 |
|---|---|---|
| committer | vlapa <vlapa@ya.ru> | 2026-06-13 20:33:26 +0300 |
| commit | e5abc1fe99340b979b18864d978179f71fe8f5c5 (patch) | |
| tree | 98fd0ad7c6d0744894d6e74e446daacd9e6dd1b5 /LINUX/RSYNC.md | |
First
Diffstat (limited to 'LINUX/RSYNC.md')
| -rw-r--r-- | LINUX/RSYNC.md | 373 |
1 files changed, 373 insertions, 0 deletions
diff --git a/LINUX/RSYNC.md b/LINUX/RSYNC.md new file mode 100644 index 0000000..8ced185 --- /dev/null +++ b/LINUX/RSYNC.md @@ -0,0 +1,373 @@ +```sh +sudo apt-get install rsync + +rsync_ _опции_ _источник_ _приемник_ + +rsync -avzhe ssh vlapa@178.20.46.157:~/git/ ~/1Tb_r1-a/Backup/_git/ +``` + +****-v**** - Выводить подробную информацию о процессе копирования;** +-****-q**** - Минимум информации; +****-c**** - Проверка контрольных сумм для файлов; +****-a**** - Режим архивирования, когда сохраняются все атрибуты оригинальных файлов; +****-R**** - Относительные пути; +****-b**** - Создание резервной копии; +****-u**** - Не перезаписывать более новые файлы; +****-l**** - Копировать символьные ссылки; +****-L**** - Копировать содержимое ссылок; +****-H**** - Копировать жесткие ссылки; +****-p**** - Сохранять права для файлов; +****-g**** - Сохранять группу; +****-t**** - Сохранять время модификации; +****-x**** - Работать только в этой файловой системе; +****-e**** - Использовать другой транспорт, например, ssh; +****-z**** - Сжимать файлы перед передачей; +****--delete**** - Удалять файлы которых нет в источнике; +****--exclude**** - Исключить файлы по шаблону; +****--recursive**** - Перебирать директории рекурсивно; +****--no-recursive**** - Отключить рекурсию; +****--progress**** - Выводить прогресс передачи файла; +****--stat**** - Показать статистику передачи; +****--********max-size**** ****—**** максимальный размер файла для передачи; +****--********bwlimit**** ****—**** ограничение скорости для передачи файлов; +****--version**** - Версия утилиты. + + +```sh +sudo vim /etc/rsyncd.conf` + +pid file = /var/run/rsyncd.pid +lock file = /var/run/rsync.lock` +log file = /var/log/rsync.log` +[share] path = /tmp/share/` +hosts allow = 192.168.56.1` +hosts deny = * list = true` +uid = root gid = root` +read only = false` +``` + +**Здесь мы задаем путь к нашей папке для синхронизации, разрешаем доступ к серверу только с ip адреса (192.168.56.1) и запрещаем все остальные подключения. Параметры uid и gid указывают пользователя и группу, от которых будет запущен демон. Лучше не использовать root, а указать пользователя nobody и выдать ему права на ту папку, в которую будет выполняться синхронизация каталогов rsync.** + +Настройка rsync завершена, остается сохранить файл, запустить сервер rsync и добавить его в автозагрузку: + +```sh +sudo systemctl start rsync +sudo systemctl enable rsync + +sudo service cron reload +``` + +**Копирование и синхронизация файлов на локальном компьютере + +`rsync -zvh file /tmp/backups/` + +**Указав опцию** `--progress` **вы можете видеть сколько процентов уже скопировано, а сколько еще осталось:** + +`rsync -zvh --progress file /tmp/backups/` + +**Синхронизация папок на локальной машине** + +`rsync -azvh /home/user/documents /tmp/backups/` + + +**Синхронизация с удаленным сервером** + +`rsync -avz /home/sergiy/tmp/ root@192.168.56.102:/home/` + + +**По умолчанию rsync попытается использовать транспорт ssh. Если вы хотите использовать ранее созданный сервер rsync, нужно указать это явно:** + +`rsync -avz /home/sergiy/tmp/ rsync://192.168.56.102:/share` + +Точно также можно синхронизировать файлы с rsync из удаленного сервера: + +`rsync -avz root@192.168.56.102:/home/ /home/sergiy/tmp/` + +Адрес удаленного сервера записывается в таком формате: + +`имя_пользователя@адрес_машины/папка/на/удаленной_машине` + +Синхронизация папок rsync будет выполняться на стандартном порту. + + +### _**Синхронизация файлов по SSH**_ + +Чтобы задать протокол подключения используется опция -e. При использовании SSH все передаваемые данные шифруются и передаются по защищенному каналу, таким образом, чтобы никто не мог их перехватить. Для использования SSH вам нужно знать пароль пользователя в системе. + +Синхронизация файлов rsync с удаленного сервера по ssh будет выглядеть вот так: + +`rsync -avzhe ssh root@192.168.56.102:/root/install.log /tmp/` + +Если вы используете другой порт для ssh, то здесь его можно указать: + +`rsync -avzhe "ssh -p 22" root@192.168.56.102:/root/install.log /tmp/` + +А теперь передадим данные на тот же сервер: + +`rsync -avzhe ssh backup.tar root@192.168.0.101:/backups/` + +**Просмотр прогресса при синхронизации** + +Для просмотра прогресса копирования файла с одной машины на другую используется опция progress: + +`rsync -avzhe ssh --progress /home/user/documents root@192.168.56.102:/root/documents` + +**Синхронизация не всех файлов в rsync** + +Опции include и exclude позволяют указать какие файлы нужно синхронизировать, а какие исключить. Опции работают не только с файлами но и с директориями. + +Например, скопируем все файлы, начинающиеся на букву R: + +`rsync -avze ssh --include 'R*' --exclude '*'` +`root@192.168.56.102:/root/documents/ /root/documents` + +**Удаление при синхронизации** + +Во время синхронизации можно удалять файлы, которых нет на машине откуда идет rsync синхронизация, для этого используется опция --delete. + +Например: + +`rsync -avz --delete root@192.168.56.102:/documents/ /tmp/documents/` + +Если перед выполнением этой команды создать в папке файл которого нет на удаленном сервере, то он будет удален. + +**Максимальный размер файлов** + +Вы можете указать максимальный размер файлов, которые нужно синхронизировать. Для этого используется опция --max-size. Например, будем синхронизировать только файлы меньше 200 килобайт: + +`rsync -avzhe ssh --max-size='200k' /user/documents/` +`root@192.168.56.102:/root/documents` + +**Удаление исходных файлов** + +Есть возможность удалять исходные файлы после завершения синхронизации с удаленным сервером: + +`rsync --remove-source-files -zvh backup.tar /tmp/backups/` + +Таким образом, файл backup.tar будет удален после завершения копирования в папку /tmp/backups. + +**Режим симуляции rsync** + +Если вы новичок, и еще не использовали rsync, то возможно захотите посмотреть как отработает команда без применения реальных действий в файловой системе. Для этого есть опция dry-run. Команда только выведет все выполняемые действия в терминал, без выполнения реальных изменений: + +`rsync --dry-run --remove-source-files -zvh backup.tar /tmp/backups/` + + +**Ограничить скорость передачи** + +Вы можете ограничить использование пропускной способности сети с помощью опции ==`--bwlimit`==: + +`rsync --bwlimit=100 -avzhe ssh /user/home/documents/ root@192.168.56.102:/root/documents/` + +Как я уже писал выше, rsync синхронизирует только части файла, если вы хотите синхронизировать файл целиком используйте опцию ==-W==: + +`rsync -zvhW backup.tar /tmp/backups/backup.tar backup.tar` + +**Автоматическая синхронизация папок rsync** + +Можно расписать автоматическую синхронизацию с помощью cron. Но в случае доступа к серверу по SSH необходимо будет создать ключ и загрузить его на сервер, чтобы аутентификация проходила без запроса пароля. + +Создаем ключ: + +`ssh-keygen -t rsa` + +Загружаем ключ на сервер к с которым собираемся синхронизироваться: + +`ssh-copy-id -i /home/sk/.ssh/id_rsa.pub sk@192.168.1.250` + +Теперь можем переходить к настройке расписания cron. Будем запускать синхронизацию каждый день: + +`crontab -e` + +`00 05 * * * rsync -azvre ssh /home/user/Downloads/ 192.168.56.102:/share` + +rsync синхронизация каталогов будет выполняться каждый день в пять утра. + +`@hourly rsync -avzhe ssh vlapa@178.20.46.157:/home/vlapa/git/ /home/vlapa/1Tb_r1-a/Backup/_git/` + +rsync синхронизация каталогов будет выполняться каждый час. + +============================== + +**Автоматическая синхронизация файлов с удалённым сервером** +```bash +#!/bin/bash + +# Локальная директория для синхронизации +LOCAL_DIR="/path/to/local/dir" + +# Удалённый сервер и директория +REMOTE_USER="user" +REMOTE_SERVER="server.com" +REMOTE_DIR="/path/to/remote/dir" + +# Синхронизация с удалённым сервером +rsync -avz $LOCAL_DIR $REMOTE_USER@$REMOTE_SERVER:$REMOTE_DIR + +# Вывод сообщения о завершении +echo "Синхронизация завершена!" +``` +✔️ **Скрипт синхронизирует файлы из локальной директории на удалённый сервер с помощью** rsync**.** + +======================================= +# Утилита rcync: синхронизация директорий и backup-ы + +15.12.2019 + +Теги: [CLI](https://tokmakov.msk.ru/blog/tags/15) • [Linux](https://tokmakov.msk.ru/blog/tags/1) • [Директория](https://tokmakov.msk.ru/blog/tags/37) • [Команда](https://tokmakov.msk.ru/blog/tags/2) • [Конфигурация](https://tokmakov.msk.ru/blog/tags/11) • [Настройка](https://tokmakov.msk.ru/blog/tags/266) • [Сервер](https://tokmakov.msk.ru/blog/tags/301) • [Файл](https://tokmakov.msk.ru/blog/tags/35) + +Утилита rsync — это программное обеспечение с открытым исходным кодом, которое можно использовать для синхронизации файлов и директорий с локального компьютера на удаленный и наоборот. Примечательная особенность rsync — возможность передавать файлы с шифрованием, используя ssh в качестве транспорта. + +Синтаксис команды + +$ rsync опции источник приемникКопировать + +## Примеры использования + +Перед тем, как копировать файлы, всегда стоит сделать пробный прогон (ключ `-n`) в режиме с показом подробностей (`-v`): + +`rsync -avn /path/to/src/ user@example.com:/path/to/dstКопировать + +В этом режиме `rsync` покажет список файлов, которые он скопирует. После этого можно запускать настоящее копирование: + +`rsync -av /path/to/src/ user@example.com:/path/to/dstКопировать + +В этой команде ключ `-a` подразумевает рекурсивное копирование всех файлов и каталогов включая их атрибуты: владелец, группа, дата создания и изменения. Ключ `-v` даст подробный отчет о работе по мере выполнения и по окончании. + +Обратите внимание на слэш в конце первого аргумента — без него файлы источника `/path/to/src/файлы` будут размещены в `/path/to/dst/src/файлы`. А при наличии слэша в конце первого аргумента — файлы будут в `/path/to/dst/файлы`, что скорее всего и нужно. + +По умолчанию `rsync` попытается использовать транспорт ssh. При использовании другого порта для ssh, его нужно указать: + +`rsync -av -e "ssh -p 2222" /path/to/src/ user@example.com:/path/to/dstКопировать + +Точно также можно скопировать файлы из удаленного сервера на локальную машину: + +`rsync -av user@example.com:/remote/machine/path/ /local/machine/pathКопировать + +Обратите внимание, что источник всегда является первым аргументом, а приемник — вторым. + +Для автоматического копирования, например по `cron`, необходимо настроить авторизацию с использованием ключей. + +## Основные опции + +**Опция** `-a` или `--archive` — рекурсивно копирует файлы, включая разыменованные символьные ссылки, с сохранением связанных с файлами сведений об их владельцах, групповых и индивидуальных правах и времени последнего изменения. Использование этого ключа равносильно указанию ключей `--group`, `--links`, `--owner`, `--perms`, `--recursive` и `--times`. + +**Опция** `-b` или `--backup` — переименовывает файлы, которые в противном случае должны быть удалены или перезаписаны, добавляя к их существующим именам знак тильды (~). Эта опция обычно используется вместе с `--backup-dir` — вместо переименования `rsync` перемещает эти файлы в указанный каталог. + +**Опция** `--backup-dir=dir` — используется вместе с `--backup` и перемещает в директорию `dir` те файлы, которые в противном случае должны быть удалены или перезаписаны. После перемещения старой версии файла в каталог `dir` новая версия из источника копируется в приемник. + +Если `dir` указан с использованием относительного пути, то это путь относительно приемника. + +**Опция** `--copy-unsafe-links` — для каждого файла, являющегося символьной ссылкой на файл за пределами той иерархии, которой принадлежит источник, производится копирование файла, на который указывает ссылка, а не символьной ссылки на него. + +**Опция** `--delete` заставляет `rsync` удалять файлы в приемнике, которые отсутствуют в источнике. + +**Опция** `-n` или `--dry-run` — запуск утилиты без записи на диск. С опцией `--verbose` позволяет посмотреть, что будет сделано, если запустить rsync без `--dry-run`. Особенно полезно запускать перед использованием `--delete`. + +**Опция** `-g` или `--group` — сохранение групповых связей копируемых файлов. + +**Опция** `-l` или `--links` — для каждого файла, являющегося символьной ссылкой, копирование символьной ссылки, а не файла, на который указывает ссылка, даже если файл, на который указывает ссылка, не присутствует в источнике. + +**Опция** `--link-dest=dir` — если файл существует в источнике, но его нет в приемнике, rsync ищет в каталоге `dir` файл с точно таким же именем. Если точная копия файла будет найдена, rsync создает из файла в `dir` жесткую ссылку на него в приемнике. Если точная копия не будет найдена, rsync копирует файл в приемник. + +**Опция** `-o` или `--owner` — сохранение данных о владельце копируемых файлов (только для пользователей с root-правами). + +**Опция** `-p` или `--perms` — сохранение данных о правах доступа копируемых файлов. + +**Опция** `-r` или `--recursive` — рекурсивный спуск по каталогу-источнику и копирование всех файлов в иерархии. + +**Опция** `-t` или `--times` — сохранение данных о времени последнего изменения копируемых файлов. + +**Опция** `-u` или `--update` — пропускать файл, если в приемнике оказался файл новее, чем в источнике. + +**Опция** `-v` или `--verbose` — вывод информации о том, что в данный момент делает rsync. + +**Опция** `-z` или `--compress` — сжатие файлов в процессе копирования. + +## Зеркальное копирование + +Утилиту rsync можно использовать для создания зеркальной копии каталога. На удаленной системе должен быть установлен ssh-сервер (к нему можно подключиться с использованием утилиты ssh). Если нужно запускать копирование по расписанию, следует настроить авторизацию с использованием ключей. + +`rsync --archive --update --delete /path/to/mirror/ user@example.com:/path/to/mirrorКопировать + +Опция `--update` заставляет rsync не перезаписывать самые последние версии файлов на удаленной системе более старыми версиями таких же файлов, взятых из локальной системы. Опция `--delete` заставляет rsync удалять на удаленном сервере файлы, отсутствующие на локальной системе. + +## Резервное копирование + +После проведения исходного резервного копирования rsync может эффективно осуществлять дополнительное резервное копирование, экономя место на диске и время копирования. При дополнительном (инкрементном) копировании сохраняются только те файлы, которые претерпели изменения со времени последнего резервного копирования. + +С помощью опции `--link-dest=dir` можно превращать каждое дополняющее резервное копирование в полноценное, путем создания жестких ссылок между дополняющими резервными копиями и неизменившимися файлами, имеющимися в исходной полноценной резервной копии. + +Если `dir` задается как отосительный путь, то он задается относительно файла-приемника. + +`rsync --archive --link-dest=../backup /path/to/src/ user@example.com:/path/to/dstКопировать + +При запуске этой команды rsync проходит сверху вниз по содержимому каталога `/path/to/src`, проверяя каждый найденный файл. Для каждого файла в каталоге `/path/to/src` утилита ищет в каталоге `/path/to/dst` точную копию этого файла. + +- Если она находит точную копию в каталоге `/path/to/dst` — переходит к следующему файлу +- Если она не находит точную копию в каталоге `/path/to/dst` — ищет точную копию в каталоге `backup` + - Если она находит точную копию файла в каталоге `backup`, утилита создает жесткую ссылку из файла в каталоге `backup` на файл в каталоге `/path/to/dst` + - Если она не находит точную копию файла в каталоге `backup`, утилита копирует файл из каталога `/path/to/src` в каталог `/path/to/dst` + +Небольшой bash-скрипт, демонстрирующий создание полноценной и дополняющей резервной копии: + +```bash +#!/bin/bash +rm -rf backup-two-days-ago +mv backup-one-day-ago backup-two-days-ago +mv backup-latest-state backup-one-day-ago +rsync --archive --link-dest=../backup-one-day-ago /some/path/data/ backup-latest-state +``` + +Можно немного доработать этот скрипт, чтобы хранить не три, а тридцать резервных копий: + +```bash +#!/bin/bash + +SOURCE='/home/evgeniy/data' +BACKUP='/home/evgeniy/backup' +COUNT=30 # кол-во бэкапов + +rm -rf ${BACKUP}/backup-${COUNT} +for (( i = COUNT; i > 1; i-- )); do + mv ${BACKUP}/backup-$((i - 1)) ${BACKUP}/backup-${i} +done + +rsync --archive --link-dest=../backup-2 ${SOURCE}/ ${BACKUP}/backup-1 +``` + +========================================== +Шпора по флагам rsync + +![[2025-06-20_22-34-47.png]] + +Rsync - программка, которую можно использовать для синхронизации файлов и каталогов с локального компьютера на удаленный и наоборот. Чем-то напоминает scp. + +`rsync file1 file2 ... user@host:dest + +`rsync -a dir host:dest_dir + +Взаимодействием с сервером возможности утилиты не ограничиваются. Все операции можно выполнять и локально. По умолчанию rsync копирует ресурсы без учета предыдущего содержимого целевого каталога. + +Например, если вы перенесли каталог d, содержащий файлы a и b, на машину, на которой был файл d/c, то после копирования сервер будет содержать d/a, d/b и d/c. + +Чтобы создать точную копию исходного каталога, необходимо из целевого каталога удалить не существующие в исходном каталоге файлы, например d/c в примере: + + +`rsync -a --delete dir host:dest_dir + +Посмотрим на еще 1 пример: + +`rsync -avh --del --progress dir1 dir2 dir3 backup + +В результате выполнения, каталоги "dir1, dir2 и dir3", вместе со всем их содержимым, будут рекурсивно скопированы в каталог backup. + +Если какие-то файлы уже есть в каталоге backup, и не были изменены, они будут пропущены. + +Исключение файлов и каталогов + +Еще одной значительной фичей rsync является способность исключать файлы и каталоги из процесса передачи. + +Например, ты хочешь перенести локальный каталог src на хост и при этом исключить все данные с именем .git. Можно сделать следующим образом: + +`rsync -a --exclude=.git src host: |
