Помилка rsync: не вдалося встановити час на "/ foo / bar": Операція заборонена


194

Я отримую заплутану помилку від rsync і початкові речі, які я знаходжу в веб-пошуку (як і всі звичні chmod'ing), не вирішують цього:

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]

Здається, це працює, незважаючи на цю помилку, але було б непогано позбутися від цього.


ні, просто звичайний каталог, наскільки я можу сказати.
дерев

Щойно зіткнувся з подібною проблемою, хоча мій код помилки був 22: rsync: не вдалося встановити рази на ... Неправильний аргумент (22). Після деякої перевірки виявляється, що мої файли були датовані останніми змінами в 1956 році! Рішення: торкніться всіх файлів, проблема вирішена. :) "знайти. -print0 | xargs -0 touch"
KIAaze

Я вважаю, що якщо ви також встановили роботу cron на те саме призначення, ця помилка з'явиться. Зміна часу на роботу з cron (crontab) допоможе обійти її. У моєму випадку я отримую цю помилку лише в тому випадку, якщо я роблю вручну rysnc, якщо я також налаштував роботу cron.
NelsonGon

Відповіді:


286

Якщо /foo/barввімкнено NFS (або, можливо, якусь файлову систему FUSE), це може бути проблемою.

У будь-якому випадку, додавання -O/ --omit-dir-timesдо вашого командного рядка дозволить уникнути його спроб встановити час модифікації в каталогах.


8
Найсмішніше, що я синхронізую ext3 з ext3, обидві ОС є Linux. Мені ніколи раніше не доводилося користуватися цим перемикачем. -О я зробив трюк, але мені б хотілося, щоб я не використовував його.
d -_- b

3
Дякую! Виявляється, деякі хости VPS (наприклад, xlshosting.nl) використовують це внутрішньо, що може спричинити проблеми з rsync.
Фредерік

2
У мене така ж проблема rsyncing з Linux ext4 до Linux ext4: "не можна встановити рази: операція не дозволена" для посилань , а не для каталогів. -Oочевидно, це не допомагає. Цього не було, коли мій резервний розділ був ext3 замість ext4.
Маріус Гедмінас

10
Я використовував rsync -avc, і додавання -O не допомагало. Потім я прочитав, що -a було еквівалентом до -rlptgoD, що включає -t, напевне, переважає -O. Тож для мене виправленням було використання -rlpgoDvc
dlink

3
@dlink ви можете додати, --no-tщоб видалити параметр, що мається на увазі.
Ноам Нелке

86

Проблема, ймовірно, пов’язана з тим, що / foo / bar не належить до процесу запису у віддаленій системі дарвін (OS X). Вирішення питання полягає у встановленні адекватного власника на віддаленому сайті.

Оскільки ця відповідь була проголосована і тому була сподіватися корисною для когось, я продовжую її зрозуміти.

Причина, чому це трапляється, полягає в тому, що rsync, ймовірно, намагається встановити довільний час модифікації (mtime) під час копіювання файлів.

Для того, щоб виконати цю utime()функцію системної функції Дарвіна, потрібно, щоб ефективний uid процесу запису був таким самим, як файл uid, або суперкористувацький, див. Сторінку розпізнавання utime . Перегляньте цю дискусію в списку розсилки rsync як посилання.


10
Те саме в Linux (Debian Squeeze в моєму випадку) ... Якщо я не є власником цільової каталоги, rsync видає повідомлення про помилку "невдало встановити час". (Дозволу на запис у каталог недостатньо.)
декани

1
Я потрапив у пастку в тому ж випуску. До монтажу NTFS з uid = користувачем.
gavenkoa

3
Ця помилка пішла для мене, коли я змінив власника каталогу, на який я намагався вплинути (на віддалений сервер), використовуючи команду rsync того самого користувача, що й той, хто намагався увійти через rsync на мій локальний сценарій Bash. Іншими словами: я намагався писати /remote/path/to/foo/barна віддалений сервер за допомогою цієї команди: rsync -avzP --exclude '.DS_Store' /local/path/to/foo/bar/ user1@1.2.3.4:/remote/path/to/foo/bar і отримував ті самі повідомлення про помилки, які відходили, коли я робив user1власника /remoe/path/to/foo/barтак:$ chown -R user1 /remote/path/to/foo/bar
racl101

1
Якщо ви ділитесь своїми файлами з іншими користувачами в групі, наприклад, ви використовуєте клейкий біт, то зміна власника насправді не є рішенням. Ми не використовуємо -t та add -O для запобігання цього попередження.
R. van Twisk

1
Чи можете ви розширити відповідь, щоб уточнити, якщо користувач є частиною групи, яка володіє файлом / dir, якщо це не повинно АБО працювати?
Ілля Лінн

4

Оскільки @ racl101 прокоментував відповідь, ця проблема може бути пов’язана з власником папки . Команду rsync повинен виконувати той самий користувач, що й власник папки. Якщо це не те саме, ви можете змінити.

chown -R userCorrect /remote/path/to/foo/bar

2

Проблема в моєму випадку полягала в тому, що "точка кріплення приймача" була неправильно встановлена. Це було в режимі лише для читання (з явних причин). Схоже, rsync копіює файли, але це не було. Я перевірив свій файл fstab і змінив параметри кріплення на стандартні, знову встановіть файлову систему та знову виконайте rsync. Тоді все добре.


2

У мене була така ж проблема. Для мене рішення - видалити віддалений файл і дозволити rsyncстворювати заново.


0

Я бачив цю проблему, коли я пишу у файлову систему, яка не (належним чином) обробляє часи - я думаю, SMB ділиться або FAT або щось подібне.

Яка ваша цільова файлова система?


Я на mac, rsync'ing до linux (машина слайса).
дерев

Ах, дивно ... Оскільки ви використовуєте rsync на mac, однак, я повинен вас попередити: він не належним чином зберігає всі атрибути файлів OS X, тому погані речі можуть трапитися. Дивіться, наприклад: blog.plasticsfuture.org/2006/04/23/mac-backup-software-harmful
Девід Уолвер

Однак ви можете скористатися найновішою версією MacPorts ( sudo port install rsync), і вона зламається менше. Щоб перевірити це:: rsync --versionrsync версія 3.0.5 протоколу версії 30 ... додавання, ACL, xattrs, iconv, symtimes, file-flags ... (важливі ACL та xattrs)
David Wolever

1
rsync на Macintosh дійсно встановлює всі атрибути файлів і робив це вже досить тривалий час. Зверніть увагу, URL-адреса, що посилається на "Погані речі можуть статися", датована 2006 роком!
tgunr

2
Відповіді дійсно не повинні включати запитання. Це було б більш доречно як коментар.
Брайан

0

Можливо, у вас немає привілеїв до деяких файлів. В обліковому записі адміністратора спробуйте "sudo rsync -av" по черзі, увімкніть кореневий обліковий запис і ввійдіть як root. Це повинно дозволити вам повністю шлангувати вашу систему та жорстоко примушувати свій rsync! ;-) Я не впевнений, чи допоможуть вищезгадані атрибути --extended-атрибути, але я теж кинув це, лише на добру міру.


0

Це трапилось зі мною на типі розділу xfs (rw,relatime,seclabel,attr2,inode64,noquota), де каталоги, де належить інший користувач у групі, в якій ми обидва були членами. Членство в групі вже було встановлено до входу в систему, і вся структура каталогів була груповою для запису. Я вручну запустив sudo chown -R otheruser.group directoryі sudo chmod -R g+rw directoryце підтвердив.

Я до сих пір не маю уявлення, чому він не працював спочатку, але взяв на себе право власності на sudo chown -R myuser.group directoryнього. Можливо, пов'язані з SELinux?


На сторінці "man" вказано UID програми. має відповідати UID-файлу для utime()роботи. Ви також можете запустити як root і зробити це. Але якщо UID файлу інший, вони не дозволяють вам змінити час на що-небудь інше, ніж "зараз".
Alexis Wilke

Чи можете ви посилання на таку чоловічу сторінку? Жодної моєї згадки utime().
Сем Брайтман

1
linux.die.net/man/2/utime Відповідний параграф: "Зміна часових позначок дозволено, коли: або процес має відповідні привілеї, або ефективний ідентифікатор користувача дорівнює ідентифікатору користувача файлу, або час NULL, і процес має написати дозвіл на файл. "
Алексіс Вільке

0

Ця помилка може також спливати, якщо ви запустите процес rsync для файлів, які нещодавно не були змінені в джерелі чи в пункті призначення ... тому що він не може встановити час для нещодавно змінених файлів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.