rsync mkstemp không thành công Đối số không hợp lệ (22) với mount davfs của đám mây Box.com


10

Tôi đã gắn bộ lưu trữ đám mây Box.com bằng cách sử dụng davfs theo các hướng dẫn này . Tôi đã gắn tài khoản Box.com của mình bên dưới / home / me / Cloud / Box

Tôi có thể truy cập hệ thống tập tin được gắn kết thông qua cá heo cũng như qua thiết bị đầu cuối. Nó hơi chậm, nhưng tôi có thể liệt kê (ls) và điều hướng toàn bộ cấu trúc thư mục mà không có lỗi.

Tiếp theo tôi đã cố chạy rsync như sau:

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

Tôi cũng đã thử:

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

và các biến thể khác của lệnh rsync. Lệnh đang sao chép Âm nhạc của tôi từ hệ thống tệp cục bộ của tôi (/ home / me / Music /) sang đám mây Box (/ home / me / Cloud / Box / Music) thông qua ngàm davfs.

Tôi luôn nhận được rất nhiều lỗi của mẫu này:

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

Một ví dụ cụ thể là:

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

Đây là tất cả những gì xảy ra trên Kubfox 12.04 LTS 64 bit, phần cứng cấp máy chủ, với kết nối modem cáp nhanh / đáng tin cậy (tốc độ tải lên 12 Mb / giây).

Câu trả lời:


7

Sự cố xảy ra do rsynctạo các tệp tạm thời có tên tệp mà box.com và / hoặc davfs không hiểu. Do đó, tệp .01_Track_1.mp3.YVmFI9không tồn tại trên hệ thống của bạn, nhưng là một vật phẩm tạm thời của rsync. Một số phỏng đoán từ phía tôi: nếu bạn không gặp lỗi trên tất cả các tệp, có lẽ bạn chỉ nhận được các lỗi trên các tệp đã được tải lên (và đã thay đổi).

Trước đây không thể tắt việc tạo tệp tạm thời này, nhưng ngày nay bạn có thể gặp nhiều may mắn hơn bằng cách thêm tùy chọn --inplace. Tuy nhiên, những lợi ích của việc sử dụng rsync nếu bạn không nói chuyện với rsync-daemon (mà bạn không phải là nếu bạn đang sử dụng davfs), không rõ ràng với tôi.

Do đó, như một cách thay thế, bạn có thể thử cp --update, chỉ sao chép một tệp khi nguồn mới hơn đích. Các tệp mới và bất kỳ tệp nào có thay đổi trong thẻ ID3 sẽ được sao chép, các tệp khác thì không.

Hoặc nếu bạn cần kiểm soát nhiều hơn sử dụng find:

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

cái này bảo tồn cấu trúc phân cấp và cpiokhông ghi đè lên các tệp hiện có không cũ hơn.


1
Một lý do để sử dụng rsync là tôi đã biết cách giới hạn nó để sao chép các tệp dưới 250 MB và các tệp hoặc thư mục không bị ẩn. Tôi sử dụng --max-size=250M --exclude '.*' . Tôi chắc chắn cpcó thể được thực hiện để làm điều này ... có thể bằng cách chuyển đầu ra của tìm kiếm vào cp? Nhưng tôi không biết làm thế nào để làm điều đó. Nếu chúng tôi đưa ra giải pháp, tôi sẽ thử cp -ru. Cảm ơn
MountainX

Trong trường hợp đó bạn hoàn toàn không cần cp -u, hãy sử dụng cpio (xem câu trả lời được cập nhật)
Anthon

Cảm ơn bạn. Tôi tin rằng điều này sẽ giải quyết nó cho tôi. Bạn đã giáo dục tôi trong quá trình, mà tôi đánh giá cao. (FYI, trong trường hợp của tôi, tôi muốn các tệp có dung lượng dưới 250 MB, không lớn hơn.)
MountainX

Đó là những gì ... -size -250Mkhông, nếu không bạn sẽ sử dụng +250M(có một phiên bản sai ở đây, nhưng tôi đã nhận ra nó trước khi chỉnh sửa được sửa)
Anthon

3

1. Các vấn đề với các ký tự đặc biệt trong tên tệp

Có bất kỳ nhân vật đặc biệt trong tên tập tin? Tùy thuộc vào hệ thống tệp mà bạn đang ghi các tệp này vào, chúng có thể không cho phép bạn đặt tiền tố các tệp có dấu chấm ( .).

2. Sự cố với thời gian sửa đổi rsync và webdav2

Tôi đã xem qua bài đăng trên blog này , nơi một vấn đề được mô tả là rsynccó vấn đề về việc ghi / theo dõi thời gian sửa đổi tệp trên các thư mục box.com được gắn trên webdav2.

Vấn đề hiển thị như thế này trong hệ thống tệp được gắn kết:

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

Bài báo tương tự cho thấy một cách giải quyết:

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

Đây là một cách sử dụng OK rsync, nhưng nó chỉ so sánh các tệp dựa trên kích thước của chúng bây giờ, không phải là tổng kiểm tra của chúng.

3. Các vấn đề với davfs2 (WebDAV)

Tôi đã xem qua chủ đề này có tiêu đề: rsync qua davfs2? trong diễn đàn WebDAV (davfs) trên sourceforge. Ai đó đã hỏi về một tình huống tương tự khi họ muốn sử dụng WebDAV để gắn kết một nhà cung cấp lưu trữ trực tuyến và thực hiện rsync cho lưu trữ được gắn kết thông qua WebDAV. Đây là những gì một trong những nhà phát triển (Werner Baumann) của WebDAV đã nói về chủ đề này .

trích đoạn trả lời của Werner

  • davfs2 sẽ chỉ tải lên các tập tin hoàn chỉnh. Nó không thể thực hiện các công cụ gia tăng rsync thường làm và điều đó làm cho rsync rất hiệu quả.

  • davfs2 sử dụng bộ đệm cục bộ trên đĩa. Điều này sẽ làm cho nó phản ứng nhanh hơn và ứng dụng của bạn cũng nên kiếm lợi từ việc này. Nhưng nó cần không gian đĩa cục bộ cho việc này. Bạn nên cho phép kích thước bộ đệm lớn, vì vậy rsync có thể thực hiện hầu hết công việc của nó với bộ đệm cục bộ và davfs2 sẽ tải lên hầu hết các tệp trong nền, khi rsync đã kết thúc.

Werner tiếp tục đề xuất như sau

Đây có thể là một bất lợi trong trường hợp này. Khi rsync đọc một tệp trên máy chủ từ xa, nó phải được davfs2 chuyển vào bộ đệm cục bộ trước (nếu nó chưa có ở đó). Điều này có thể làm cho quá trình thực sự và không cần thiết chậm. Vì rsync chỉ hoạt động như một chương trình sao chép tinh vi trong trường hợp của bạn, nên sử dụng cp thay thế sẽ tốt hơn. cp có một tùy chọn (-u) để chỉ sao chép các tệp mới hơn các tệp trong hệ thống tệp davfs2 (= smartdrive) và không cần đọc các tệp mà chỉ đọc dữ liệu meta tệp như mtime.

Một lệnh như "cp -pru thư mục / to / backup dav /" có thể thực hiện công việc. Nó sẽ không tải xuống các tệp (như rsync có thể làm, nhưng tôi không chắc chắn) (vui lòng xem hướng dẫn sử dụng của cp và rsync).

Lựa chọn?

Vì vậy, như @Anthon đã đề xuất, bạn có thể sử dụng cp -uphương pháp để sao chép các tệp. Nhận ra rằng phương pháp này chỉ xem kích thước của tệp là một yếu tố so sánh, vì vậy nó không hoàn toàn đáng tin cậy.

Bạn không nên sử dụng bất cứ thứ gì chỉ nhìn vào thời gian sửa đổi khi so sánh các tệp , cp -pru. Werner giải thích tại sao trong chủ đề này :

trích đoạn về vấn đề với thời gian mod

Khi bạn ngắt kết nối hệ thống tệp davfs2 và gắn lại vào một lúc nào đó, thời gian tệp có thể đã thay đổi theo thông tin thời gian từ máy chủ. Các công cụ như cp -pu và rsync không thể dựa vào những thời điểm này để xác định tập tin nào đã thay đổi.

Vì vậy, với các vấn đề khác nhau xung quanh thời gian sửa đổi, một cách tiếp cận sử dụng tổng kiểm tra hoàn toàn có vẻ phù hợp hơn:

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

Chào. Không có ký tự đặc biệt trong tên tệp. Tên tệp của tôi trên đĩa chỉ đơn giản là "01_Track_1.mp3". Tiền tố dấu chấm không phải là một phần của tên tệp thông thường, cũng không phải là phần mở rộng bổ sung (ví dụ: .mp3.YVmFI9). Cũng lưu ý rằng không phải mọi tập tin đều thất bại. Những thất bại dường như không có một mô hình.
MountainX

thông tin này có đủ không? 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

một ví dụ khác: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

@MaxX - xem bản cập nhật của tôi có phải là vấn đề của bạn không. Ngoài ra phiên bản rsyncnào bạn đang sử dụng? rsync --version.
slm

rsync version 3.0.9 protocol version 30và tôi đang thử nghiệm giải pháp cập nhật của bạn bây giờ. Cảm ơn!
MountainX

3

Để ngăn chặn Invalid argument (22)lỗi, tôi đã phải ngăn rsync tạo các tệp tạm thời của nó trên đích davfs.

rsync --temp-dir=/tmp

Tôi nghĩ những gì xảy ra là tên tệp tạm thời của rsync bắt đầu bằng .và davfs không cho phép điều này. Vì vậy, tôi đã đi xa hơn và bảo rsync bỏ qua các tệp nguồn có tên bắt đầu bằng .. Vì tôi đang sử dụng --delete, tôi cũng nói với nó rằng đừng cố xóa lost+foundthư mục trong đích davfs.

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

Tôi đã gặp vấn đề này trên Cygwin và câu hỏi này là công cụ tìm kiếm hàng đầu. Câu trả lời được chấp nhận không hoạt động đối với tôi vì tôi đang làm việc trên một đồng bộ hóa tệp từ xa trên internet vì vậy sử dụng rsync là bắt buộc. Gợi ý --temp-dir trong câu trả lời này là giải pháp cho tôi.
nickcrabtree
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.