Rsync в Windows: неправильные разрешения для созданных каталогов

Я пытаюсь отправить изменения на мой сервер через SSH на Windows (Cygwin) с помощью rsync, Я использую команду:

rsync -rvz -e ssh / cygdrive / c / myfolder / rsyncuser@192.168.1.110: / srv / www / prj112 / myfolder /

/srv/www/prj112/myfolder/ принадлежит rsyncuser, Моя проблема в том, что хотя rsync подкаталоги создаются при публикации, каждому каталогу назначается разрешение по умолчанию d--------- так rsync не может скопировать какие-либо файлы внутри него.

Как это исправить?

6 ответов

Решение

Возможность игнорировать разрешения NTFS изменилась в Cygwin версии 1.7. Это может быть причиной проблемы.

Попробуйте добавить флаг 'noacl' на ваши крепления Cygwin в C:\cygwin\etc\fstab, например:

none /cygdrive cygdrive user,noacl,posix=0 0 0

Вы можете передавать пользовательские права через rsync, используя опцию 'chmod':

rsync -rvz --chmod=ugo=rwX -e ssh source destination

Ваша проблема связана с тем фактом, что разрешения Unix для этого каталога действительно равны 0. Вся информация о доступе хранится в отдельных списках ACL, которые rsync не копирует. Таким образом, он устанавливает разрешения для удаленной копии равными 0 и, очевидно, не может выполнить запись в этот каталог впоследствии. Вы можете запустить

chmod -R 775

в том каталоге, который должен исправить вашу проблему с rsync.

После просмотра справочной страницы я могу сказать, что параметр chmod доступен в rsync начиная с версии ~2.6.8. Но вы должны использовать --chmod=ugo=rwX в комбинации с rsync -av

Вам также следует попробовать эту команду:

rsync -av <SOURCE_DIR> rsyncuser@192.168.1.110:/srv/www/prj112/myfolder

Это будет работать на Linux по крайней мере. И обратите внимание, что rsync не должен упоминать ssh- по крайней мере, в Linux.

Но если все не удается и просто дать вариант, вы можете взглянуть на этот готовый упакованный инструмент cwRsync

Если вы развертываете сайт из windows (например, octopress использует rsync), можно установить разрешение 775, добавив несколько команд chmod:

   rsync -avz --chmod=ug=rwx --chmod=o=rx -e ssh

Для rsync из Windows в Unix/Linux вы должны предоставить команду вроде

SET BACKUP_SERVER=my.backup.server
SET SSH_USER=theUnixUserName
SET STORAGEPATH=/home/%SSH_USER%/Backup/
SET STORAGEURI=%BACKUP_SERVER%:%STORAGEPATH%    
SET SSH_ID=/cygdrive/c/Users/theWindowsUserName/Documents/keyfiles/id_dsa
SET EXCLUDEFILE=backup_excludes.txt
SET BACKUPLOGFILE=/cygdrive/c/Users/theWindowsUserName/Backuplogs/backup-%DATE%-%TIME::=-%.log

Команда ssh тогда

SET BACKUP=rsync -azvu --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r --rsh="ssh -l %SSH_USER% -i '%SSH_ID%'" --exclude-from=%EXCLUDEFILE% --delete --delete-excluded --log-file="%BACKUPLOGFILE%"

с backup_excludes.txt, содержащим строки игнорируемых элементов, таких как

.git
.svn
.o
\Debug
\Release

Тогда вы будете использовать это в сценарии с

%BACKUP% /cygdrive/c/mySensibleData %STORAGEURI%
%BACKUP% /cygdrive/c/myOtherSensibleData %STORAGEURI%
%BACKUP% /cygdrive/c/myOtherSensibleData2 %STORAGEURI%

и так далее. Это создаст резервную копию ваших каталогов mySensibleData, myOtherSensibleData и myOtherSensibleData2 с разрешениями 755 для каталогов и 644 для файлов. Вы также получаете журналы резервного копирования в вашем %BACKUPLOGFILE% для каждой резервной копии.

Cygwin rsync сообщит об отказе в разрешении, когда какой-либо процесс откроет целевой файл. Загрузите и запустите Process Explorer и выясните, не блокирует ли файл что-либо еще, или просто попробуйте переименовать файл и посмотрите, нет ли ошибки Windows в том, что какой-то другой процесс открыл файл.

Кроме того, вы можете попытаться создать (глобальную) переменную среды CYGWIN и установите его значение nontsec

Другие вопросы по тегам