rsync mkstemp неудавшийся Недействительный аргумент (22) с davfs монтируются облака Box.com

Используйте tee команда:

some_command | tee log.txt

10
10.06.2013, 23:23
3 ответа

Проблема происходит из-за rsync создание временных файлов с именами файлов, которые не понимают box.com и/или davfs. Таким образом файл .01_Track_1.mp3.YVmFI9 не существует в Вашей системе, но временный артефакт rsync. Некоторые догадки с моей стороны: если Вы не получаете ошибку на всех файлах, Вы, вероятно, только получаете ошибки на файлах, которые были уже загружены (и изменился).

Это раньше было невозможно выключить это временное поколение файла, но у Вас могло бы в наше время быть больше удачи путем добавления опции --inplace. Однако преимущества использования rsync, если Вы не говорите с rsync-демоном (который Вы не то, при использовании davfs), неясны мне.

Поэтому как альтернатива, Вы могли попробовать cp --update, который только копирует файл, когда источник является более новым, чем место назначения. Новые файлы и любые файлы с изменениями в тегах ID3 будут скопированы, другие не будут.

Или если у Вас должно быть больше использования управления find:

cd /home/me/Music/
find * -size -250M -print0 | cpio -pdmv0 /home/me/Cloud/Box/Music

это сохраняет структуру иерархии и cpio не перезаписывает существующие файлы, которые не являются более старыми.

7
27.01.2020, 20:02
  • 1
    Одна причина использования rsync состоит в том, что я уже знаю, как ограничить его копированием файлов меньше чем 250 МБ и файлов или каталогов, которые не скрыты. Я использую --max-size=250M --exclude '.*' . Я уверен cp может быть сделан сделать это..., возможно, путем передачи по каналу вывода находки в CP? Но я не знаю, как сделать это все же. Если мы предложим решение, то я попробую cp -ru. Спасибо –  MountainX-for-Monica 11.06.2013, 07:39
  • 2
    В этом случае Вы не нуждаетесь в CP-u вообще, используете cpio (см. обновленный ответ), спасибо –  Anthon 11.06.2013, 07:53
  • 3
    . Я полагаю, что это решит его для меня. Вы обучили меня в процессе, которого я ценю. (К вашему сведению в моем случае я хочу файлы меньше чем 250 МБ, не больше, чем.) –  MountainX-for-Monica 11.06.2013, 08:20
  • 4
    Именно это ... -size -250M делает, иначе Вы использовали бы +250M (здесь была кратко неверная версия, но я понял это, прежде чем редактирование было зафиксировано) –  Anthon 11.06.2013, 08:25

1. Проблемы со специальными символами в именах файлов

Есть ли в именах файлов какие-либо специальные символы? В зависимости от файловой системы Вы пишете эти файлы в, они не могут позволить Вам файлам префикса с точкой (.) например.

2. Проблемы с rsync временем изменения и webdav2

Я столкнулся с этим сообщением в блоге, где проблема описана с rsync наличие проблемы, пишущий/отслеживая время изменения файла через webdav2 смонтировало каталоги box.com.

Проблема обнаруживается как это в смонтированной файловой системе:

david@sydney:~/Pictures$ ls -l /mnt/box/bwca/08/09/IMG_3084.CR2
-rw-r--r-- 1 david david 12564061 Aug 14 16:08 /mnt/box/bwca/08/09/IMG_3084.CR2
david@sydney:~/Pictures$ ls -l 2012/08/09/IMG_3084.CR2
-rw-rw-r-- 1 david david 12564061 Aug  9 13:00 2012/08/09/IMG_3084.CR2

Та же самая статья показала обходное решение:

$ rsync -avhP --size-only --bwlimit=64 2012/08 /mnt/box/bwca/

Это - OK способ использовать rsync, но это только сравнивает файлы на основе их размера теперь, не их контрольных сумм.

3. Проблемы с davfs2 (WebDAV)

Я столкнулся с этим названным потоком: rsync через davfs2? в WebDAV (davfs) форум по SourceForge. Кто-то справлялся об аналогичной ситуации, где они хотели использовать WebDAV, чтобы смонтировать поставщика онлайн-хранилища и выполнить rsync's к смонтированному устройству хранения данных через WebDAV. Это - то, что один из разработчиков (Werner Baumann) WebDAV должен был сказать об этой теме.

выборка ответа Werner

  • davfs2 только загрузит полные файлы. Это не может сделать, возрастающий материал rsync обычно делает, и это делает rsync очень эффективный.

  • davfs2 использует локальный кэш на диске. Это сделает это более быстро реагирующим, и Ваше приложение должно получить прибыль от этого также. Но этому нужно пространство локального диска для этого. Необходимо допускать большой размер кэша, таким образом, rsync может сделать большую часть своей работы с локальным кэшем, и davfs2 загрузит большинство файлов в фоновом режиме, когда rsync уже закончился.

Werner продолжает предлагать следующее

Это могло быть недостатком в этом случае. Когда rsync читает файл на удаленном хосте, он должен быть передан davfs2 в локальный кэш сначала (если это уже не там). Это могло сделать процесс действительно и ненужный медленным. Как rsync только работает сложной программой копии в Вашем случае, могло бы быть лучше использовать CP вместо этого. CP имеет опции (-u) для копирования только файлов, которые являются более новыми, чем те в davfs2 файловой системе (= smartdrive), и это не должно было бы читать файлы, но только читает метаданные файла как mtime.

Команда как "CP - pru каталог/к/резервное копирование dav /" могла бы сделать задание. Он shold не загружают файлы (как rsync мог бы сделать, но я не уверен) (посмотрите на руководства CP и rsync).

Опции?

Таким образом, как @Anthon предположил, можно использовать cp -u метод для копирования файлов. Понимание, что этот метод только смотрит на размер файла как на фактор в сравнении, таким образом, это не абсолютно надежно.

Вы не должны использовать ничего, что только смотрит на время изменения при сравнении файлов, cp -pru. Werner объясняет почему в этом потоке:

выборка по проблеме с ультрасовременными временами

Когда Вы размонтировали davfs2 файловую систему и монтируете его снова в некоторое более позднее время, времена файла, возможно, изменились согласно информации времени с сервера. Инструменты как CP - pu и rsync не могут полагаться на эти времена для определения то, что изменили файлы.

Так, учитывая различные проблемы, окружающие время изменения, подход с помощью чисто контрольных сумм походит на лучшее соответствие:

$ rsync -avvz --omit-dir-times --checksum --human-readable --progress <local dir> <remote dir>
3
27.01.2020, 20:02
  • 1
    Привет. В именах файлов нет никаких специальных символов. Моим именем файла на диске является просто "01_Track_1.mp3". Точечный префикс не является частью нормального имени файла, и при этом дополнительным не является расширение (например, .mp3. YVmFI9). Также обратите внимание, что не каждый файл перестал работать. Отказы, кажется, не имеют шаблон. –  MountainX-for-Monica 10.06.2013, 23:45
  • 2
    является этим достаточным количеством информации? got file_sum recv_files(Some_Music_[1999]/Some_Music_[1999]Zuni_SongVarious_Artists24.mp3) rsync: mkstemp "/home/me/Cloud/Box/Music/Some_Music_[1999]/.Some_Music_[1999]Zuni_SongVarious_Artists24.mp3.1aWWRY" failed: Invalid argument (22) got file_sum –  MountainX-for-Monica 11.06.2013, 03:46
  • 3
    другой пример: got file_sum recv_files(Carlos/Dance/05-Tapestry-Carlos.mp3) rsync: mkstemp "/home/me/Cloud/Box/Music/Carlos/Dance/.05-Tapestry-Carlos.mp3.WeGbGS" failed: Invalid argument (22) got file_sum recv_files(Carlos/Dance/06-Dance-Turquoise_Dance-Carlos.mp3) –  MountainX-for-Monica 11.06.2013, 03:48
  • 4
    @MountainX - видят, является ли мое обновление Вашей проблемой. Также, что версия rsync Вы используете? rsync --version. –  slm♦ 11.06.2013, 04:50
  • 5
    rsync version 3.0.9 protocol version 30 и я тестирую Ваше обновленное решение теперь.Спасибо! –  MountainX-for-Monica 11.06.2013, 07:28

Чтобы остановить ошибку Invalid argument (22), мне пришлось запретить rsync создавать свои временные файлы в месте назначения davfs.

rsync --temp-dir=/tmp

Я думаю, что происходит то, что имена временных файлов rsync начинаются с . , а davfs этого не позволяет. Поэтому я пошел дальше и сказал rsync игнорировать исходные файлы с именами, начинающимися с . . Поскольку я использую --delete, я также запретил rsync пытаться удалить каталог lost+found в месте назначения davfs.

rsync --temp-dir=/tmp --exclude lost+found --exclude '.*'
3
27.01.2020, 20:02

Теги

Похожие вопросы