rsync mkstemp не вдався Неправильний аргумент (22) з davfs-монтажем хмари Box.com


10

Я монтував хмарний сховище Box.com, використовуючи davfs відповідно до цих інструкцій . Я встановив свій рахунок Box.com під / home / me / Cloud / Box

Я можу отримати доступ до змонтованої файлової системи через Dolphin, а також через термінал. Це трохи повільно, але я можу перелічити (ls) і переміщуватися по всій структурі каталогів без помилок.

Далі я спробував запустити rsync наступним чином:

rsync -auvz  --max-size=250M --exclude '.*' /home/me/Music/ /home/me/Cloud/Box/Music

Я також спробував:

rsync -auv  /home/me/Music/A /home/me/Cloud/Box/Music

та інші варіанти команд rsync. Команда копіює Мою музику з моєї локальної файлової системи (/ home / me / Music /) у хмару Box (/ home / me / Cloud / Box / Music) через кріплення davfs.

Я завжди отримую багато помилок такої форми:

rsync: mkstemp <filename> failed: Invalid argument (22)

Конкретний приклад:

rsync: mkstemp "/home/me/Cloud/Box/Music/VariousArtists/.01_Track_1.mp3.YVmFI9" failed: Invalid argument (22)

Це все відбувається на 64-розрядному сервері Kubuntu 12.04 LTS, апаратного забезпечення сервера, з швидким / надійним кабельним модемним з'єднанням (швидкість завантаження 12 Мб / с).

Відповіді:


7

Проблема виникає через 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не перезаписує існуючі файли, які не старіші.


1
Однією з причин використання rsync є те, що я вже знаю, як обмежити це копіюванням файлів менше 250 Мб та файлів чи каталогів, які не приховані. Я використовую --max-size=250M --exclude '.*' . Я впевнений, що cpможна зробити це ... можливо, проклавши висновок знаходження в cp? Але я ще не знаю, як це зробити. Якщо ми придумаємо рішення, я спробую cp -ru. Спасибі
MountainX

У такому разі вам взагалі не потрібен cp -u, використовуйте cpio (див. Оновлену відповідь)
Anthon

Дякую. Я вірю, що це вирішить це для мене. Ви мене виховували в цьому процесі, що я ціную. (FYI, в моєму випадку я хочу, щоб файли були меншими, ніж 250 Мб, не більше.)
MountainX

Це те, що ... -size -250Mробить, інакше ви б використали +250M(тут коротко була помилкова версія, але я зрозумів це до виправлення редагування)
Anthon

4

1. Питання зі спеціальними символами у назви файлів

Чи є спеціальні символи у назви файлів? Залежно від файлової системи, в яку ви пишете ці файли, вони можуть не дозволяти вам префіксувати файли, наприклад, крапкою ( .).

2. Проблеми з часом модифікації rsync та webdav2

Я наткнувся на цю публікацію в блозі, де описується проблема, пов’язана з тим, rsyncщо виникають проблеми з написанням / відстеженням часу зміни файлів у каталогах box.com.com, встановлених webdav2.

Проблема виявляється так у змонтованій файловій системі:

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/

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

3. Проблеми з davfs2 (WebDAV)

Я натрапив на цю тему під назвою: rsync via davfs2? на форумі WebDAV (davfs) на sourceforge. Хтось розпитував про подібну ситуацію, коли вони хотіли використовувати WebDAV для монтажу постачальника послуг онлайн-сховища та виконання rsync на встановленому сховищі через WebDAV. Це сказав один із розробників (Werner Baumann) WebDAV на цю тему .

уривок відповіді Вернера

  • davfs2 завантажуватиме лише повні файли. Він не може робити додаткові речі, які зазвичай виконує rsync, і це робить rsync дуже ефективним.

  • davfs2 використовує локальний кеш на диску. Це зробить його більш чуйним, і ваша програма також має на цьому користь. Але для цього йому потрібно місце на диску. Ви повинні дозволити великий розмір кешу, тому rsync може виконати більшу частину своєї роботи з локальним кешем, а davfs2 буде завантажувати більшість файлів у фоновому режимі, коли rsync вже закінчився.

Вернер продовжує запропонувати наступне

Це може бути недоліком у цьому випадку. Коли rsync зчитує файл на віддаленому хості, його слід спочатку перенести davfs2 в локальний кеш (якщо його ще немає). Це може зробити процес справді і непотрібним повільним. Оскільки rsync працює лише як складна копіювальна програма у вашому випадку, може бути краще використовувати cp замість цього. У cp є можливість (-u) копіювати лише новіші файли, ніж файли у файловій системі davfs2 (= smartdrive), і не потрібно було б читати файли, а лише читати метадані файлів, наприклад mtime.

Таку команду, як "cp -pru directory / to / backup dav /", може зробити цю роботу. Не завантажуються файли (як, наприклад, rsync, але я не впевнений) (дивіться посібники з cp та rsync).

Варіанти?

Отже, як @Anthon запропонував, ви можете скористатися cp -uметодом копіювання файлів. Зрозумівши, що цей метод розглядає лише розмір файлу як фактор порівняння, тому він не є абсолютно надійним.

Ви не повинні нічого , що тільки дивиться на зміни часу при порівнянні файлів використовувати, cp -pru. Вернер пояснює, чому в цій темі :

уривок з питання з модними часами

Якщо ви від'єднаєте файлову систему davfs2 та змонтуєте її знову через деякий пізній час, час файлів, можливо, змінився відповідно до інформації про час із сервера. Такі інструменти, як cp -pu та rsync, не можуть покладатися на ці часи, щоб визначити, які файли змінилися.

Отже, враховуючи різні проблеми, пов’язані з часом модифікації, підхід із використанням суто контрольних сум здається кращим:

$ rsync -avvz --omit-dir-times --checksum --human-readable --progress <local dir> <remote dir>

Привіт. У назвах файлів немає спеціальних символів. Моє ім'я файлу на диску просто "01_Track_1.mp3". Префікс точки не є частиною звичайного імені файлу, а також не є додатковим розширенням (наприклад, .mp3.YVmFI9). Також зауважте, що не кожен файл виходить з ладу. Схоже, невдачі не мають.
MountainX

це достатньо інформації? 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

ще один приклад: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

@MountainX - подивіться, чи моє оновлення - це ваша проблема. Також яку версію rsyncви використовуєте? rsync --version.
slm

rsync version 3.0.9 protocol version 30і я зараз тестую ваше оновлене рішення. Дякую!
MountainX

3

Щоб зупинити Invalid argument (22)помилку, мені довелося зупинити rsync від створення своїх тимчасових файлів у пункті призначення davfs.

rsync --temp-dir=/tmp

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

rsync --temp-dir=/tmp --exclude lost+found --exclude '.*'

Я зіткнувся з цією проблемою на Cygwin, і це питання було головним хітом пошукової системи. Прийнята відповідь не працювала для мене, оскільки я працював над віддаленою синхронізацією файлів через Інтернет, тому використання rsync було обов'язковим. Пропозиція --temp-dir у цій відповіді була для мене рішенням.
nickcrabtree
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.