Dostaję mylący błąd z rsync i początkowe rzeczy, które znajduję podczas wyszukiwania w sieci (a także wszystkie zwykłe chmod'ing) nie rozwiązują go:
rsync: failed to set times on "/foo/bar": Operation not permitted (1)
rsync error: some files could not be transferred (code 23)
at /SourceCache/rsync/rsync-35.2/rsync/main.c(992) [sender=2.6.9]
Wygląda na to, że działa pomimo tego błędu, ale dobrze byłoby się go pozbyć.
rsync
file-transfer
dreeves
źródło
źródło
Odpowiedzi:
Jeśli
/foo/bar
jest w systemie plików NFS (lub ewentualnie w systemie plików FUSE), może to być problem.Tak czy inaczej, dodanie
-O
/--omit-dir-times
do linii poleceń pozwoli uniknąć próby ustawienia czasów modyfikacji w katalogach.źródło
-O
oczywiście nie pomaga. Nie zdarzało się to, gdy moją partycją kopii zapasowej był ext3 zamiast ext4.--no-t
aby usunąć domyślną opcję.Problem prawdopodobnie wynika z faktu, że / foo / bar nie jest własnością procesu pisania w zdalnym systemie darwin (OS X). Rozwiązaniem tego problemu jest ustawienie odpowiedniego właściciela na zdalnej stronie.
Ponieważ głosowano na tę odpowiedź, a zatem mam nadzieję, że była dla kogoś przydatna, rozszerzam ją, aby była jaśniejsza.
Powodem tego jest to, że rsync prawdopodobnie próbuje ustawić dowolny czas modyfikacji (mtime) podczas kopiowania plików.
Aby wykonać tę
utime()
funkcję systemową darwina, wymagane jest, aby efektywny identyfikator procesu pisania był taki sam jak identyfikator użytkownika pliku lub identyfikator superużytkownika, patrz strona opengroup utime . Sprawdź tę dyskusję na liście adresowej rsync jako odniesienie.źródło
/remote/path/to/foo/bar
na zdalnym serwerze za pomocą tego polecenia:rsync -avzP --exclude '.DS_Store' /local/path/to/foo/bar/ [email protected]:/remote/path/to/foo/bar
otrzymałem te same komunikaty o błędach, któreuser1
/remoe/path/to/foo/bar
$ chown -R user1 /remote/path/to/foo/bar
Ponieważ @ racl101 skomentował odpowiedź, problem może być związany z właścicielem folderu . Polecenie rsync powinno być wykonane przez tego samego użytkownika, co właściciel folderu. Jeśli to nie to samo, możesz to zmienić.
źródło
Problem w moim przypadku polegał na tym, że „punkt montowania odbiornika” został nieprawidłowo zamontowany. Był w trybie tylko do odczytu (z jakiegoś dziwnego powodu). Wyglądało na to, że rsync kopiuje pliki, ale tak nie było. Sprawdziłem plik fstab i zmieniłem opcje montowania na domyślne, ponownie zamontowałem system plików i uruchom ponownie rsync. Wszystko w porządku.
źródło
Miałem ten sam problem. Dla mnie rozwiązaniem jest usunięcie pliku zdalnego i
rsync
utworzenie go ponownie.źródło
Widziałem ten problem, gdy piszę do systemu plików, który nie (właściwie) radzi sobie z czasami - myślę, że udziały SMB, FAT lub coś takiego.
Jaki jest twój docelowy system plików?
źródło
sudo port install rsync
), a to zepsuje mniej. Aby to sprawdzićrsync --version
:: rsync wersja 3.0.5 protokół wersja 30 ... dopisz, listy ACL, xattrs, iconv, symtime, flagi plików ... (ACL i xattrs są najważniejsze)Możliwe, że nie masz uprawnień do niektórych plików. Z konta administratora spróbuj „sudo rsync -av” Alternatywnie włącz konto roota i zaloguj się jako root. To powinno pozwolić ci całkowicie przepłukać system i brutalnie wymusić rsync! ;-) Nie jestem pewien, czy wyżej wymienione atrybuty pomogą, ale wrzuciłem to również dla pewności.
źródło
Zdarzyło mi się to na partycji typu
xfs (rw,relatime,seclabel,attr2,inode64,noquota)
, w której katalogi były własnością innego użytkownika w grupie, której oboje byliśmy członkami. Członkostwo w grupie zostało już ustanowione przed zalogowaniem, a cała struktura katalogów była możliwa do zapisu przez grupę. Musiałem uruchomić ręczniesudo chown -R otheruser.group directory
isudo chmod -R g+rw directory
to potwierdzić.Nadal nie mam pojęcia, dlaczego pierwotnie nie działało, ale przejęcie własności z
sudo chown -R myuser.group directory
naprawione. Być może związane z SELinux?źródło
utime()
aby działał. Możesz także uruchomić jako root i zrób to. Ale jeśli identyfikator UID pliku jest inny, nie pozwalają zmienić czasu na nic innego niż „teraz”.utime()
.Ten błąd może również wyskakować, jeśli uruchomisz proces rsync dla plików, które nie zostały ostatnio zmodyfikowane w źródłowym lub docelowym ... ponieważ nie można ustawić czasu dla ostatnio zmodyfikowanych plików.
źródło