Ошибка 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]

Кажется, что работает, несмотря на эту ошибку, но было бы неплохо избавиться от этого.

dreeves
источник
нет, просто обычный каталог, насколько я могу судить.
dreeves
Просто столкнулся с подобной проблемой, хотя мой код ошибки был 22: rsync: не удалось установить время ... Неверный аргумент (22). После некоторой проверки выясняется, что мои файлы датированы последним изменением в 1956 году! Решение: коснитесь всех файлов, проблема решена. :) "найди. -print0 | xargs -0 touch"
KIAaze
Я обнаружил, что если вы также настроили задание cron в том же месте назначения, эта ошибка появится. Изменение времени работы cron (crontab) поможет обойти это. В моем случае я получаю эту ошибку, только если я выполняю rysnc вручную, если я также настроил работу cron.
НельсонГон

Ответы:

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 не принадлежит процессу записи в удаленной системе darwin (OS X). Решение проблемы заключается в назначении адекватного владельца на удаленном сайте.

Поскольку за этот ответ проголосовали и, следовательно, он был полезен кому-то, я расширяю его, чтобы сделать его более понятным.

Причина, по которой это происходит, заключается в том, что rsync, вероятно, пытается установить произвольное время изменения (mtime) при копировании файлов.

Для того, чтобы сделать это, системная utime()функция darwin требует, чтобы эффективный uid процесса записи был таким же, как uid файла или супер пользователя, см. Страницу opentime для utime . Проверьте это обсуждение в списке рассылки rsync как ссылку.

anddam
источник
10
То же самое в Linux (Debian Squeeze в моем случае) ... Если я не владелец целевого каталога, rsync выдает сообщение об ошибке «Не удалось установить время». (Иметь разрешение на запись в каталог недостаточно.)
ddekany
1
Я попал в тот же вопрос. До монтирования NTFS с uid = user.
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 и не добавляем -O, чтобы предотвратить это предупреждение.
Р. ван Твиск
1
Можете ли вы расширить ответ, чтобы уточнить, является ли пользователь частью группы, которой принадлежит файл / dir, если это не должно работать ИЛИ?
Элайджа Линн
4

Поскольку @ racl101 прокомментировал ответ, эта проблема может быть связана с владельцем папки . Команда rsync должна выполняться тем же пользователем, что и владелец папки. Если это не то же самое, вы можете изменить его.

chown -R userCorrect /remote/path/to/foo/bar
Люд Акелл
источник
2

Проблема в моем случае заключалась в том, что «точка монтирования приемника» была неправильно смонтирована. Это было в режиме только для чтения (по какой-то необычной причине). Похоже, rsync копирует файлы, но это не так. Я проверил свой файл fstab и изменил параметры монтирования по умолчанию, заново смонтировал файловую систему и снова запустил rsync. Все хорошо тогда.

ripah
источник
2

У меня такая же проблема. Для меня решение состоит в том, чтобы удалить удаленный файл и позволить rsyncсоздать снова.

shintaroid
источник
0

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

Какая ваша целевая файловая система?

Дэвид Волевер
источник
Я на Mac, rsync'ing для Linux (машина slicehost).
ныряет
Ах, странно ... Так как вы используете rsync на Mac, тем не менее, я должен предупредить вас: он не сохраняет должным образом все атрибуты файла OS X, поэтому могут произойти плохие вещи. См., Например: blog.plasticsfuture.org/2006/04/23/mac-backup-software-harmful
Дэвид Волевер
Однако вы можете использовать самую последнюю версию из MacPorts ( sudo port install rsync), и она будет меньше ломаться. Чтобы проверить это:: rsync --versionпротокол rsync версии 3.0.5, версия 30 ... append, ACL, xattrs, iconv, symtimes, file-flags ... (важными являются ACL и xattrs)
David Wolever,
1
rsync на Macintosh действительно устанавливает все атрибуты файла и делает это в течение достаточно долгого времени, обратите внимание, что URL, ссылающийся на «может случиться что-то плохое», датирован 2006 годом!
тгунр
2
Ответы действительно не должны включать вопросы. Это было бы более уместно в качестве комментария.
Брайан
0

Возможно, у вас нет прав доступа к некоторым файлам. Из учетной записи администратора попробуйте «sudo rsync -av». Альтернативно, включите учетную запись root и войдите в систему как root. Это должно позволить вам полностью подключить вашу систему и перевести ваш rsync! ;-) Я не уверен, поможет ли вышеупомянутый --extended-attribute, но я также добавил это, просто для хорошей меры.

капитан
источник
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 файла отличается, они не позволяют вам изменить время на что-то еще, кроме «сейчас».
Алексис Вилке
Можете ли вы дать ссылку на такую ​​страницу руководства? Ни одно из моих упоминаний utime().
Сэм Брайтман
1
linux.die.net/man/2/utime Соответствующий абзац: «Изменение временных меток разрешено, когда: либо у процесса есть соответствующие привилегии, либо эффективный идентификатор пользователя равен идентификатору пользователя файла, либо времена равны NULL, а процесс имеет разрешение на запись в файл. "
Алексис Уилке
0

Эта ошибка может также появиться, если вы запустите процесс rsync для файлов, которые не были недавно изменены в источнике или месте назначения ... потому что он не может установить время для недавно измененных файлов.

Гурдип Сингх
источник