rsync mkstemp 실패 Box.com 클라우드의 davfs 마운트에서 유효하지 않은 인수 (22)


10

이 지침 에 따라 davfs를 사용하여 Box.com 클라우드 스토리지를 마운트했습니다 . 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 명령의 다른 변형. 이 명령은 davfs 마운트를 통해 내 음악을 로컬 파일 시스템 (/ home / me / Music /)에서 Box 클라우드 (/ home / me / Cloud / Box / Music)로 복사합니다.

나는 항상이 형식의 많은 오류가 발생합니다.

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 비트에서 빠르고 안정적인 케이블 모뎀 연결 (12Mb / s 업로드 속도)에서 발생합니다.

답변:


7

rsyncbox.com 및 / 또는 davfs가 이해할 수없는 파일 이름으로 임시 파일 을 작성 하기 때문에 문제가 발생합니다 . 따라서 파일 .01_Track_1.mp3.YVmFI9이 시스템에 존재하지 않지만의 임시 인공물 입니다 rsync. 내 측면에서 약간의 추측이 있습니다. 모든 파일에서 오류가 발생하지 않으면 이미 업로드되어 변경 된 파일에서만 오류가 발생합니다.

그것은 불가능하기 위해 사용 이 임시 파일 생성을 해제 할 수 있지만 요즘 옵션을 추가하여 더 행운이있을 수 있습니다 --inplace. 그러나 rsync-daemon (davfs를 사용하지 않는 경우)과 대화하지 않는 경우 rsync를 사용하는 이점은 명확하지 않습니다.

따라서 대안으로 시도 할 수 있습니다. 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아마도이 작업을 수행 할 수 있다고 확신 합니다 ... 아마도 find의 출력을 cp로 파이핑하여? 그러나 나는 그것을하는 방법을 아직 모른다. 우리가 해결책을 제시한다면, 나는 시도 할 것이다 cp -ru. 감사합니다
MountainX

이 경우 cp -u가 전혀 필요하지 않습니다. cpio를 사용하십시오 (업데이트 된 답변 참조)
Anthon

감사합니다. 나는 이것이 나를 위해 그것을 해결할 것이라고 믿는다. 그 과정에서 저를 교육시켜 주셨습니다. 참고로, 필자의 경우 250MB 미만, 최대 크지 않은 파일을 원합니다.
MountainX

그게 ... -size -250M그렇지 않으면 당신이 사용하는 것입니다 +250M(여기서 잘못된 버전이 있었지만 편집이 수정되기 전에 깨달았습니다)
Anthon

4

1. 파일 이름에 특수 문자 문제

파일 이름에 특수 문자가 있습니까? 이러한 파일을 쓰는 파일 시스템에 따라 .예를 들어 파일 앞에 점 ( ) 을 붙일 수 없습니다 .

2. rsync 수정 시간 및 webdav2 관련 문제

webdav2 장착 box.com 디렉토리에서 파일 수정 시간을 기록 / 추적하는 데 문제가 있다고 설명 된 이 블로그 게시물rsync 을 보았습니다.

마운트 된 파일 시스템에서 문제가 다음과 같이 나타납니다.

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) 관련 문제

davfs2를 통한 rsync 라는 제목의이 스레드 를 발견했습니다. sourceforge의 WebDAV (davfs) 포럼에서. 누군가 WebDAV를 사용하여 온라인 스토리지 제공자를 마운트하고 WebDAV를 통해 마운트 된 스토리지에 rsync를 수행하려는 유사한 상황에 대해 문의했습니다. 이것이 WebDAV개발자 (Werner Baumann)가이 주제에 대해 말한 것 입니다.

베르너의 응답 발췌

  • davfs2는 완전한 파일 만 업로드합니다. rsync가 일반적으로 수행하는 증분 작업을 수행 할 수 없으므로 rsync가 매우 효율적입니다.

  • davfs2는 디스크의 로컬 캐시를 사용합니다. 이렇게하면 응답 속도가 빨라지고 응용 프로그램에서도이 기능을 활용할 수 있습니다. 그러나이를 위해서는 로컬 디스크 공간이 필요합니다. 캐시 크기가 크면 rsync가 로컬 캐시를 사용하여 대부분의 작업을 수행 할 수 있으며 rsync가 이미 완료되면 davfs2가 백그라운드에서 대부분의 파일을 업로드합니다.

Werner는 다음을 제안합니다.

이 경우 단점이 될 수 있습니다. rsync가 원격 호스트에서 파일을 읽을 때 davfs2에 의해 로컬 캐시로 먼저 전송해야합니다 (아직없는 경우). 이로 인해 프로세스가 실제로 불필요하게 느려질 수 있습니다. rsync는 복잡한 복사 프로그램으로 만 작동하므로 cp를 대신 사용하는 것이 좋습니다. cp에는 davfs2 파일 시스템의 파일보다 최신 파일 만 복사하는 옵션 (-u)이 있으며 (= smartdrive) 파일을 읽을 필요는 없지만 mtime과 같은 파일 메타 데이터 만 읽습니다.

"cp -pru directory / to / backup dav /"와 같은 명령이 작업을 수행 할 수 있습니다. 파일을 다운로드하지는 않습니다 (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>

안녕. 파일 이름에 특수 문자가 없습니다. 디스크의 파일 이름은 "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에게로 시작하여 이름으로 시작하는 소스 파일을 무시하도록 지시했습니다 .. 을 사용하고 있기 때문에 davfs 대상에서 디렉토리 --delete를 삭제하지 말라고 지시했습니다 lost+found.

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

Cygwin 에서이 문제가 발생 했으며이 질문은 최고의 검색 엔진 히트였습니다. 인터넷을 통한 원격 파일 동기화 작업을 수행하면서 rsync 사용이 필수이므로 허용 된 답변이 작동하지 않았습니다. 이 답변의 --temp-dir 제안은 저에게 해결책이었습니다.
nickcrabtree
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.