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