Я уже делал несколько заметок по использованию Rsync на Windows в качестве источника бэкапа. Сначала я использовал cwrsync, потом перешёл на DeltaCopy. У последнего понравилась максимальная простота и скорость настройки. Ставишь приложение, указываешь папку, к которой нужен доступ, логи, пароль для авторизации и всё.
Есть только один минус, который немного напрягал. Приёмником бэкапов чаще всего является какой-то Linux сервер, который ничего не знает про права доступа и пользователей Windows. В итоге папка с бэкапами приезжает с правами 700 (RWX для владельца) и владельцем root. Сами файлы имеют эти же права.
Самый просто способ исправить это - поставить костыль и в скрипте использовать chown, chmod и назначать нужного владельца и права доступа. Когда в очередной раз я стал это делать, решил разобраться и обойтись без костылей. Оказалось, что у rsync есть ключи для управления этими параметрами.
Лично мне чаще всего нужны права 755 на директорию и 644 на файлы. Это требуется для того, что мониторинг мог спокойно ходить в бэкапы и собирать нужные данные. Реализуется это с помощью ключа rsync:
--chmod=Du=rwx,Dgo=rx,Fu=rw,Fog=r
В данном случае D - права на директорию, F - на файлы. То же самое можно написать и вот так:
--chmod=D2775,F664
Rsynс поддерживает разные форматы chmod. Чтобы не тащить владельца файла с windows сервера, я еще добавляю ключи:
--no-owner --no-group
Последние можно не добавлять, если не использовать ключ -a, который включает в себя целую кучу ключей, где в том числе есть передача пользователя и группы. Чтобы продолжать использовать общий ключ -a, можно отдельно отменить копирование владельца и группы дополнительными ключами.
Вот пример полной строки запуска Rsynс на Linux для сбора файлов с Windows:
/usr/bin/rsync --progress --delete -avz \--no-owner --no-group --chmod=Du=rwx,Dgo=rx,Fu=rw,Fog=r \--password-file=/root/bin/rsyncd.scrt \[email protected]::backup /mnt/backup/mssql --backup \--backup-dir=/mnt/backup/mssql_increment/`date +%Y-%m-%d`/
Скрипт синхронизирует директорию с бэкапами mssql. Изменившиеся файлы не удаляет, а кладёт в директорию mssql_increment с именем директории в виде даты на момент запуска скрипта. Таким образом можно организовать нужную глубину хранения бэкапов, удаляя старые директории.
#rsync #windows #backup