summaryrefslogtreecommitdiff
path: root/LINUX/RSYNC.md
diff options
context:
space:
mode:
Diffstat (limited to 'LINUX/RSYNC.md')
-rw-r--r--LINUX/RSYNC.md373
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: