rsync mkstemp başarısız Box.com bulut davfs mount ile geçersiz argüman (22)


10

Box.com bulut depolamayı bu talimatlara göre davfs kullanarak monte ettim . Box.com hesabımı / home / me / Cloud / Box altına monte ettim

Monte edilmiş dosya sistemine Dolphin ve terminal üzerinden erişebiliyorum. Biraz yavaş, ama (ls) liste ve hata olmadan tüm dizin yapısında gezinebilirsiniz.

Sonra rsync'i aşağıdaki gibi çalıştırmayı denedim:

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

Ayrıca denedim:

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

ve rsync komutlarının diğer varyasyonları. Komut, müziğimi yerel dosya sistemimden (/ home / me / Music /) davfs mount aracılığıyla Box bulutuna (/ home / me / Cloud / Box / Music) kopyalamaktır.

Her zaman bu formda birçok hata alıyorum:

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

Özel bir örnek:

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

Tüm bunlar, hızlı / güvenilir kablo modem bağlantısı (12 Mb / s yükleme hızları) ile sunucu sınıfı donanım olan Kubuntu 12.04 LTS 64 bit'de oluyor.

Yanıtlar:


7

Sorun rsync, box.com ve / veya davfların anlamadığı dosya adlarıyla geçici dosyalar yapılması nedeniyle oluşur . Böylece dosya .01_Track_1.mp3.YVmFI9sisteminizde mevcut olan, ancak geçici olduğunu gelmez eser arasında rsync. Bazı tahminler benim tarafımdan: hatayı tüm dosyalarda almazsanız, büyük olasılıkla sadece önceden yüklenmiş (ve değiştirilmiş) dosyalardaki hataları alırsınız.

Bu imkansız olarak kullanılan bu geçici dosya oluşturulmasını kapatmak için, ancak günümüzde seçeneği ekleyerek daha şanslı olabilir --inplace. Ancak rsync-daemon ile konuşmuyorsanız (davfs kullanıyorsanız) rsync kullanmanın avantajları benim için net değil.

Bu nedenle, alternatif olarak, cp --updateyalnızca kaynak hedeften daha yeni olduğunda bir dosyayı kopyalamayı deneyebilirsiniz . Yeni dosyalar ve ID3 etiketlerinde değişiklik olan dosyalar kopyalanacak, diğerleri kopyalanmayacak.

Veya daha fazla kontrol kullanmanız gerekiyorsa find:

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

bu, hiyerarşi yapısını korur ve cpioeski olmayan dosyaların üzerine yazmaz.


1
Rsync kullanmanın bir nedeni, zaten 250MB'den az dosyaları ve gizli olmayan dosyaları veya dizinleri kopyalamakla nasıl sınırlayacağımı bilmemdir. Ben kullanıyorum --max-size=250M --exclude '.*' . Eminim cpbunu yapmak için yapılabilir ... belki cp içine find çıktı borulama? Ama bunu nasıl yapacağımı henüz bilmiyorum. Bir çözüm bulursak deneyeceğim cp -ru. Teşekkürler
MountainX

Bu durumda cp -u'ya hiç ihtiyacınız yoktur, cpio kullanın (güncellenmiş cevaba bakın)
Anthon

Teşekkür ederim. Bunun benim için çözeceğine inanıyorum. Beni takdir ettiğim süreçte eğittin. (FYI, benim durumumda 250MB'den küçük, daha büyük olmayan dosyalar istiyorum.)
MountainX

Bunu ... -size -250Myapar, aksi takdirde kullanabilirsiniz +250M(burada kısaca yanlış bir sürüm vardı, ancak düzenleme düzeltilmeden önce fark ettim)
Anthon

4

1. Dosya adlarında özel karakterlerle ilgili sorunlar

Dosya adlarında özel karakterler var mı? Bu dosyaları yazdığınız dosya sistemine bağlı olarak, .örneğin nokta ( ) ile önek eklemenize izin vermeyebilirler .

2. rsync modifikasyon süreleri ve webdav2 ile ilgili problemler

Ben webdav2 monte box.com dizinleri arasında dosya değiştirme süreleri yazma / izleme sorunu ile ilgili bir sorun açıklandığı bu blog yazısı geldi rsync.

Bağlı dosya sisteminde sorun şu şekilde ortaya çıkıyor:

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

Aynı makalede bir çözüm gösterilmiştir:

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

Bu kullanım için iyi bir yoldur rsync, ancak dosyaları şimdi boyutlarına göre karşılaştırır, sağlama toplamlarını karşılaştırmaz.

3. davfs2 ile ilgili sorunlar (WebDAV)

Bu konuya rastladım: rsync via davfs2? sourceforge üzerinden WebDAV (davfs) forumunda. Birisi benzer bir durum hakkında bir çevrimiçi depolama sağlayıcısı kurmak ve WebDAV aracılığıyla bağlı depolama birimine rsync gerçekleştirmek için WebDAV kullanmak istedikleri benzer bir durum hakkında soruyordu. WebDAV'ın geliştiricilerinden (Werner Baumann) bu konu hakkında söyledikleri buydu .

Werner cevabından bir alıntı

  • davfs2 yalnızca tam dosyaları yükleyecektir. Rsync genellikle yaptığı artımlı şeyler yapamaz ve bu rsync çok verimli hale getirir.

  • davfs2 diskte yerel bir önbellek kullanır. Bu onu daha duyarlı hale getirecektir ve başvurunuz da bundan fayda sağlayacaktır. Ancak bunun için yerel disk alanına ihtiyacı var. Büyük bir önbellek boyutuna izin vermelisiniz, bu nedenle rsync çalışmalarının çoğunu yerel önbellekle yapabilir ve davfs2 rsync zaten bittiğinde dosyaların çoğunu arka planda yükler.

Werner aşağıdakileri önermeye devam ediyor

Bu durumda bu bir dezavantaj olabilir. Rsync uzak ana bilgisayardaki bir dosyayı okuduğunda, ilk önce davfs2 tarafından yerel önbelleğe aktarılmalıdır (zaten orada değilse). Bu, süreci gerçekten ve gereksiz yavaşlatabilir. Rsync yalnızca sizin durumunuzda gelişmiş bir kopyalama programı olarak çalıştığından, bunun yerine cp kullanmak daha iyi olabilir. cp yalnızca davfs2 dosya sistemindekilerden daha yeni olan dosyaları (= smartdrive) kopyalamak için seçeneklere (-u) sahiptir ve dosyaları okumasına gerek yoktur, ancak yalnızca mtime gibi dosya meta verilerini okur.

"Cp -pru directory / to / backup dav /" gibi bir komut işi yapabilir. Dosyaları indirmemeli (rsync'in yapabileceği gibi, ama emin değilim) (lütfen cp ve rsync kılavuzlarına bakın).

Seçenekler?

@Anthon'un önerdiği gibi, cp -udosyaları kopyalamak için yöntemi kullanabilirsiniz . Bu yöntemin yalnızca bir dosyanın boyutunu karşılaştırmada bir faktör olarak gördüğünü fark etmek, bu yüzden tamamen güvenilir değildir.

Dosyaları karşılaştırırken yalnızca değişiklik sürelerine bakan hiçbir şey kullanmamalısınız cp -pru. Werner bu konuda nedenini açıklıyor :

mod zamanları ile ilgili alıntı

Bir davfs2 dosya sistemini çıkartıp daha sonra yeniden bağladığınızda, dosya süreleri sunucudaki saat bilgilerine göre değişmiş olabilir. Cp -pu ve rsync gibi araçlar, hangi dosyaların değiştiğini belirlemek için bu zamanlara güvenemez.

Bu nedenle, değişiklik sürelerini çevreleyen çeşitli sorunlar göz önüne alındığında, tamamen sağlama toplamlarını kullanan bir yaklaşım daha uygun gibi görünüyor:

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

Selam. Dosya adlarında özel karakter yok. Diskteki dosya adım sadece "01_Track_1.mp3". Nokta öneki normal dosya adının bir parçası değildir veya fazladan uzantı da değildir (örn., .Mp3.YVmFI9). Ayrıca her dosyanın başarısız olmadığını unutmayın. Başarısızlıkların bir deseni yok gibi görünüyor.
MountainX

bu yeterli bilgi mi? 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

başka bir örnek: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 - güncellememin sorun olup olmadığını görün. Ayrıca hangi sürümünü rsynckullanıyorsunuz? rsync --version.
slm

rsync version 3.0.9 protocol version 30ve şimdi güncellenmiş çözümünüzü test ediyorum. Teşekkürler!
MountainX

3

Hatayı durdurmak için Invalid argument (22)rsync'in davfs hedefindeki geçici dosyalarını oluşturmasını durdurmak zorunda kaldım.

rsync --temp-dir=/tmp

Bence ne olur, rsync'in geçici dosya adları ile başlar .ve davfs buna izin vermez. Bu yüzden daha ileri gittim ve rsync'e adlarıyla başlayan kaynak dosyaları yok saymasını söyledim .. Ben kullanıyorum beri --delete, ben de silmeye değil söyledim lost+foundDAVfs hedef dizin.

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

Cygwin'de bu sorunla karşılaştım ve bu soru en iyi arama motorunun hitiydi. İnternet üzerinden uzaktan dosya senkronizasyonu üzerinde çalıştığım için kabul edilen cevap benim için çalışmadı, bu yüzden rsync kullanmak zorunluydu. Bu cevaptaki --temp-dir önerisi benim için bir çözümdü.
18:12
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.