rsync mkstemp ล้มเหลวอาร์กิวเมนต์ไม่ถูกต้อง (22) ด้วยการเมานต์ davfs ของ Box.com cloud


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 cloud (/ 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)

ทั้งหมดนี้เกิดขึ้นใน Kubuntu 12.04 LTS 64 บิตฮาร์ดแวร์ระดับเซิร์ฟเวอร์พร้อมการเชื่อมต่อเคเบิลโมเด็มที่รวดเร็ว / เชื่อถือได้ (ความเร็วในการอัพโหลด 12 Mb / s)

คำตอบ:


7

ปัญหาเกิดขึ้นเนื่องจากrsyncการสร้างไฟล์ชั่วคราวด้วยชื่อไฟล์ที่ box.com และ / หรือ davfs ไม่เข้าใจ ดังนั้นไฟล์.01_Track_1.mp3.YVmFI9ไม่ได้อยู่ในระบบของคุณ แต่เป็นชั่วคราวสิ่งประดิษฐ์rsyncของ การคาดเดาบางอย่างจากด้านข้างของฉัน: หากคุณไม่ได้รับข้อผิดพลาดในไฟล์ทั้งหมดคุณอาจได้รับข้อผิดพลาดเฉพาะไฟล์ที่อัปโหลดแล้ว (และเปลี่ยนแปลง)

มันเคยเป็นไปไม่ได้ที่จะปิดการสร้างแฟ้มชั่วคราวนี้ --inplaceแต่คุณในปัจจุบันอาจจะมีโชคมากขึ้นโดยการเพิ่มตัวเลือก อย่างไรก็ตามข้อดีของการใช้ rsync หากคุณไม่ได้พูดคุยกับ rsync-daemon (ซึ่งคุณไม่ใช่ถ้าคุณใช้ davfs) ก็ไม่มีความชัดเจนสำหรับฉัน

ดังนั้นคุณสามารถลองcp --updateอีกวิธีหนึ่งซึ่งคัดลอกไฟล์เมื่อแหล่งที่มาใหม่กว่าปลายทาง ไฟล์ใหม่และไฟล์ใด ๆ ที่มีการเปลี่ยนแปลงในแท็ก ID3 จะได้รับการคัดลอกไฟล์อื่น ๆ จะไม่

หรือถ้าคุณต้องการใช้การควบคุมเพิ่มเติมfind:

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

สิ่งนี้รักษาโครงสร้างลำดับชั้นและcpioไม่เขียนทับไฟล์ที่มีอยู่ที่ไม่เก่า


1
เหตุผลข้อหนึ่งของการใช้ rsync คือฉันรู้วิธี จำกัด การคัดลอกไฟล์น้อยกว่า 250MB และไฟล์หรือไดเรกทอรีที่ไม่ได้ซ่อนไว้ --max-size=250M --exclude '.*' ฉันใช้ ฉันแน่ใจว่าcpสามารถทำสิ่งนี้ได้ ... อาจจะโดยการวางท่อของการค้นหาลงใน cp? แต่ฉันยังไม่รู้จะทำยังไง cp -ruถ้าเราเกิดขึ้นกับการแก้ปัญหาผมจะพยายาม ขอบคุณ
MountainX

ในกรณีนี้คุณไม่จำเป็นต้อง cp -u เลยให้ใช้ cpio (ดูคำตอบที่อัปเดตแล้ว)
Anthon

ขอบคุณ. ฉันเชื่อว่านี่จะแก้ปัญหาให้ฉันได้ คุณให้การศึกษาแก่ฉันในกระบวนการที่ฉันซาบซึ้ง (ในกรณีของฉันฉันต้องการไฟล์น้อยกว่า 250MB ไม่มากกว่า)
MountainX

นั่นคือสิ่งที่... -size -250Mไม่มิฉะนั้นคุณจะใช้+250M(มีเวลาสั้น ๆ เป็นรุ่นที่ไม่ถูกต้องที่นี่ แต่ฉันรู้ว่ามันก่อนที่จะแก้ไขได้คงที่)
โธ

4

1. ปัญหาเกี่ยวกับอักขระพิเศษในชื่อไฟล์

มีอักขระพิเศษในชื่อไฟล์หรือไม่ ขึ้นอยู่กับระบบไฟล์ที่คุณกำลังเขียนไฟล์เหล่านี้พวกเขาอาจไม่อนุญาตให้คุณนำหน้าไฟล์ด้วยจุด ( .)

2. ปัญหาเกี่ยวกับเวลาการแก้ไข rsync และ webdav2

ฉันเจอโพสต์บล็อกนี้ซึ่งมีการอธิบายปัญหาโดยrsyncมีปัญหาเวลาเขียน / ติดตามไฟล์การแก้ไขในไดเรกทอรี web.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/

นี่เป็นวิธีการใช้ที่ใช้ได้rsyncแต่เพียงเปรียบเทียบไฟล์ตามขนาดในตอนนี้ไม่ใช่การตรวจสอบไฟล์

3. ปัญหาเกี่ยวกับ davfs2 (WebDAV)

ฉันเจอหัวข้อนี้: rsync ผ่าน davfs2 หรือไม่ ในฟอรัม WebDAV (davfs) บน on 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 / ถึง / backup dav /" อาจทำงานได้ มันไม่ได้ดาวน์โหลดไฟล์ (เช่น rsync อาจทำ แต่ฉันไม่แน่ใจ) (โปรดดูคู่มือของ cp และ rsync)

ตัวเลือก?

ดังนั้นตามที่ @Athon ได้แนะนำไว้คุณสามารถใช้cp -uวิธีการคัดลอกไฟล์ได้ ตระหนักว่าวิธีการนี้ดูที่ขนาดของไฟล์เป็นเพียงปัจจัยเปรียบเทียบเท่านั้นดังนั้นจึงไม่น่าเชื่อถืออย่างสมบูรณ์

คุณไม่ควรใช้สิ่งใดที่ดูเฉพาะเวลาที่แก้ไขเมื่อทำการเปรียบเทียบไฟล์, cp -pru. เวอร์เนอร์อธิบายว่าทำไมในหัวข้อนี้ :

ข้อความที่ตัดตอนมาจากปัญหากับเวลา mod

เมื่อคุณ unmount ระบบไฟล์ davfs2 และติดตั้งอีกครั้งในภายหลังเวลาไฟล์อาจมีการเปลี่ยนแปลงตามข้อมูลเวลาจากเซิร์ฟเวอร์ เครื่องมืออย่าง cp -pu และ rsync ไม่สามารถไว้วางใจเวลาเหล่านี้เพื่อพิจารณาว่าไฟล์ใดมีการเปลี่ยนแปลง

เมื่อพิจารณาถึงปัญหาต่าง ๆ ที่เกิดขึ้นจากการดัดแปลงครั้งวิธีที่ใช้ checksums ล้วนๆดูเหมือนจะดีกว่า:

$ 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

ฉันคิดว่าสิ่งที่เกิดขึ้นคือชื่อไฟล์ temp ของ rsync เริ่มต้นด้วย.และ davfs ไม่อนุญาตสิ่งนี้ ดังนั้นผมจึงไปต่อไปและบอก rsync .ที่จะไม่สนใจไฟล์ที่มาที่มีชื่อขึ้นต้นด้วย ตั้งแต่ฉันใช้--deleteฉันก็บอกว่าอย่าพยายามลบlost+foundไดเรกทอรีในปลายทาง davfs

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

ฉันพบปัญหานี้ใน Cygwin และคำถามนี้เป็นเครื่องมือค้นหายอดนิยมติดอันดับ คำตอบที่ยอมรับไม่ได้ผลสำหรับฉันเนื่องจากฉันทำงานกับการซิงโครไนซ์ไฟล์ระยะไกลผ่านอินเทอร์เน็ตดังนั้นการใช้ rsync จึงเป็นสิ่งจำเป็น คำแนะนำ --temp-dir ในคำตอบนี้คือทางออกสำหรับฉัน
nickcrabtree
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.