Rsync в Windows: неправильные разрешения для созданных каталогов
Я пытаюсь переместить изменения на свой сервер через ssh на windows (cygwin), используя rsync
.
Используемая мной команда:
rsync -rvz -e ssh/cygdrive/c/myfolder/[email protected]:/srv/www/prj112/myfolder/
/srv/www/prj112/myfolder/
принадлежит rsyncuser
. Моя проблема заключается в том, что eventhough с rsync
подкаталоги создают при их публикации, каждому каталогу присваивается разрешение по умолчанию d---------
, поэтому rsync
не может скопировать любые файлы внутри него.
Как это исправить?
Ответы
Ответ 1
Возможность игнорировать разрешения 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
Ответ 2
Ваша проблема связана с тем, что разрешения Unix в этом каталоге действительно равны 0. Вся информация о доступе хранится в отдельных списках ACL, которые rsync не копирует. Таким образом, он устанавливает разрешения для удаленной копии на 0 и, очевидно, не может впоследствии записываться в этот каталог.
Вы можете запустить
chmod -R 775
в этом каталоге, который должен исправить вашу проблему с rsync.
После просмотра man-страницы я могу сказать, что параметр chmod доступен в rsync с версии ~ 2.6.8. Но вы должны использовать --chmod=ugo=rwX
в сочетании с rsync -av
Вы также должны попробовать эту команду:
rsync -av <SOURCE_DIR> [email protected]:/srv/www/prj112/myfolder
Он работал бы на Linux как минимум. И обратите внимание, что rsync не нужно упоминать ssh - по крайней мере, в Linux.
Но если все не удается и просто дать вариант, вы можете взглянуть на этот готовый упакованный инструмент cwRsync
Ответ 3
если вы разворачиваете сайт из окон (например, для использования octopress rsync), он может установить разрешение 775, добавляя несколько команд chmod:
rsync -avz --chmod=ug=rwx --chmod=o=rx -e ssh
Ответ 4
Чтобы выполнить 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
Тогда вы использовали бы это в script с
%BACKUP% /cygdrive/c/mySensibleData %STORAGEURI%
%BACKUP% /cygdrive/c/myOtherSensibleData %STORAGEURI%
%BACKUP% /cygdrive/c/myOtherSensibleData2 %STORAGEURI%
и т.д. Это позволит создать резервные копии ваших каталогов mySensibleDatastrong > , myOtherSensibleDatastrong > и myOtherSensibleData2 с разрешениями 755 для каталогов и 644 для файлов. Вы также получаете резервные журналы в % BACKUPLOGFILE% для каждой резервной копии.
Ответ 5
Cygwin rsync сообщит о разрешении на отказ, когда какой-либо процесс откроет целевой файл. Загрузите и запустите Process Explorer и выясните, блокирует ли что-нибудь еще что-либо или просто попробуйте переименовать файл и посмотрите, есть ли у вас ошибка Windows в отношении другого процесса, в котором файл открыт.
Ответ 6
Кроме того, вы можете попытаться создать (глобальную) переменную среды CYGWIN
и установить ее значение в nontsec