2017-04-17 20 views
0

여러 사람이 사용하는 Linux 서버에서 홈 폴더 (루트 사용자)를 자동으로 주기적으로 동기화하는 데 rsync를 사용합니다. 사용자가 필요로하는 서비스는 sshfs를 통해 원격 디렉토리를 마운트 할 수 있습니다. SSHFS는 마운트가있는 경우 그러나, rsync를 다음 메시지sshfs 퓨즈 마운트가있는 다중 사용자 디렉토리의 rsync 오류

때문에이 오류의
rsync: readlink_stat("/home/???/???") failed: Permission denied (13) 
IO error encountered -- skipping file deletion 
... 
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1] 

을 제공하지 예상대로 자동 동기화 때문에 파일 삭제 및 0이 아닌 종료를 건너 뛰는에 특히 작동하지 않습니다 암호. sync는 home이 마운트 된 파일 시스템에만 필요하므로 원하는 동작은 sshfs 마운트가 무시된다는 것입니다. -x/--one-file-system rsync 옵션으로 문제가 해결되지 않습니다.

이 문제는 https://www.agwa.name/blog/post/how_fuse_can_break_rsync_backups에 명확하게 설명되어 있습니다. 후속 기사 (https://www.agwa.name/blog/post/easily_running_fuse_in_an_isolated_mount_namespace)는 해결 방법을 제안하지만 퓨즈 마운트는 마운트를 만든 프로세스에서만 볼 수 있기 때문에 용인 할 수 없습니다.

나는 sshfs 유용성에 영향을 미치지 않으며 사용자에게 투명하지 않은 솔루션을 찾고 있습니다.

+0

입니다. SuperUser.com 또는 unix.stackexchange.com을 사용해보십시오. – Barmar

답변

1

rsync 명령에서 퓨즈 탑재 지점을 제외하면이 오류가 나타나지 않습니다. 자동 동기화이므로 마운트 명령을 사용하여 모든 퓨즈 마운트 지점을 얻을 수 있습니다. 마운트 명령의 출력은 시스템에 따라 다를 수 있지만 debian jessie에서는 sshfs 마운트가/path/to/mount/point 유형의 fuse.sshfs (rw, ...)에 USER @ HOST : MOUNTED_DIR로 표시됩니다. bash는 퓨즈 마운트의 배제를 자동화 + 나오지하는 간단한 방법은 SO 프로그래밍 질문, 사용 또는 Linux를 구성하는 방법에 대한 없습니다 질문입니다 다음

SOURCE="/home/" 

FUSEEXCLUDE=($(mount | 
    sed -rn " 
    /type fuse/ { 
     s|^[^ ]+ on ([^ ]+) type fuse.+|\1|; 
     /^${SOURCE//\//\\\/}.+/ { 
     s|^${SOURCE//\//\\\/}| --exclude |; 
     p; 
     } 
    }")) 

rsync $OPTIONS "${FUSEEXCLUDE[@]}" "$SOURCE" "$TARGET" 
+0

sshfs를 찾기 위해 sed를 잘 사용합니다. 정규 표현식의 일부가 엉망이 될 가능성이 있습니까? '/ ^. + on ([^.] +) type fuse. +/\ 1 /'은 첫 표현식에서 나를 위해 일했다. – SimonSC

+0

@ SimonSC, 정규 표현식이 엉망이되지 않았습니다. 마운트 명령의 출력 형식이 약간 다를 수 있고 그것이 작동하지 않는 이유 였을 것입니다. 내 버전에서 "on"이전의 문자열과 "on"과 "type fuse"사이의 마운트 지점에는 공백이 없어야합니다. 사실, bash 배열을 적절히 정의하려면 마운트 포인트의 공간이 필요하지 않습니다. –