Rsync on Windows: Forkert tilladelser til oprettede mapper

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at skubbe ændringer på min server via ssh på windows (cygwin) ved hjælp af rsync.
Kommandoen jeg bruger er:



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



/srv/www/prj112/myfolder/ ejes af rsyncuser. Mit problem er, at selvom rsync undermapper oprettes, når de offentliggøres, er hver mappe tildelt standard tilladelse til d---------, så rsync ikke kopierer nogen filer inde i den.


Hvordan løser jeg dette?

Bedste reference


Muligheden for at ignorere NTFS-tilladelser er ændret i Cygwin version 1.7. Det kan være, hvad der forårsager problemet.


Prøv at tilføje 'noacl' -flagget til dine Cygwin-monteringer i C: \ cygwin \ etc \ fstab, for eksempel:


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


Du kan videregive brugerdefinerede tilladelser via rsync ved hjælp af 'chmod' indstillingen:


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

Andre referencer 1


hvis du implementerer et websted fra windows (for eksempel octopress brug rsync) er det muligt at sætte tilladelse til 775 tilføje flere chmod kommandoer:


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

Andre referencer 2


Dit problem stammer fra, at Unix-tilladelserne på den pågældende mappe virkelig er 0. Alle adgangsoplysningerne gemmes i separate ACL'er, hvilket rsync ikke kopierer. Således indstiller den tilladelserne på den eksterne kopi til 0, og det er selvfølgelig ikke muligt at skrive til den pågældende mappe bagefter.
Du kan køre


chmod -R 775


på den pågældende mappe, som skal løse dit rsync problem.


Efter et kig på manpage kan jeg fortælle at chmod param er tilgængelig i rsync siden version ~ 2.6.8. Men du skal bruge --chmod=ugo=rwX i kombination med rsync -av


Du bør også prøve denne kommando:


rsync -av <SOURCE\_DIR> rsyncuser@192.168.1.110:/srv/www/prj112/myfolder


Det ville i hvert fald arbejde på Linux. Og bemærk at rsync ikke behøver at nævne ssh - i hvert fald på Linux.


Men hvis alle fejler og bare for at give en mulighed, kan du kigge på dette færdige pakkede værktøj cwRsync [20]

Andre referencer 3


At rsync fra Windows til Unix/Linux skal du give en kommando som


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-kommandoen er da


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\%"


med backup\_excludes.txt indeholdende linjer af ignorerede elementer som


.git
.svn
.o
Debug
Release


Så ville du bruge dette i et script med


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


og så videre. Dette vil sikkerhedskopiere dine mapper mySensibleData , myOtherSensibleData og myOtherSensibleData2 med tilladelserne 755 til mapper og 644 til filer. Du får også backuplogfiler i din \% BACKUPLOGLE\% for hver backup.

Andre referencer 4


Cygwin rsync vil rapportere tilladelse nægtet, når en proces har målfilen åben. Download og kør Process Explorer og find ud af, om der er noget andet, der låser filen eller bare prøv at omdøbe filen og se, om du får Windows-fejlen om en anden proces, der har filen åben.

Andre referencer 5


Du kan også forsøge at oprette en (global) miljøvariabel CYGWIN og indstille dens værdi til nontsec