lsyncd - 단방향 동기화이지만 전체 폴더에 대한 동기화입니다.

lsyncd - 단방향 동기화이지만 전체 폴더에 대한 동기화입니다.

~/A두 개의 폴더 가 있고 ~/B. 약간의 내용이 있습니다.

lsyncd구성 파일 을 작성합니다 ~/.config/lsyncd/lsyncd.conf.

# NOTE: Use only absolute path names
# NOTE: check "man rsync" for parameters inside "rsync{}".

# Global settings
settings {
    logfile = "/home/ziga/.config/lsyncd/lsyncd.log",
    statusFile = "/home/ziga/.config/lsyncd/lsyncd-status.log",
    statusInterval = 5
}

# Synchronisation A ⟶ B
sync {
    default.rsync,
    source = "/home/ziga/A",
    target = "/home/ziga/B",
    delete = true,
    rsync = {
        binary = "/usr/bin/rsync",
        executability = true,
        existing = false,
    }
}

그리고 나는 lsyncd이렇게 시작합니다.

lsyncd -nodaemon ~/.config/lsyncd/lsyncd.conf

메모:매개변수 -nodemon는 위 명령을 실행하는 터미널에서 더 많은 정보를 제공하기 위한 것입니다.

명령이 실행되면 즉시 동기화가 이루어지고 폴더의 내용이 ~/A폴더로 전송됩니다 ~/B. 괜찮습니다.

내 구성 파일에 따르면 에서 파일을 삭제하면 해당 ~/B파일도 삭제되지 않을 것으로 예상됩니다 . ~/A그리고 이것은 원하는 동작입니다. 폴더의 내용이 실수로 삭제되는 것을 방지하고 싶습니다 ~/A.

lsyncd하지만 이 시점에서는 폴더에 방금 삭제된 파일이 누락된 것을 감지 하고 누락된 파일을 시작 시 즉시 복사 ~/B하여 폴더를 다시 동기화할 것으로 기대합니다 !~/A~/B그러나 이것은 일어나지 않습니다.

어떻게 할 수 있습니까?

답변1

실제로 별도로 처리해야 할 두 가지 질문이 있습니다. 대답하기가 더 쉽기 때문에 먼저 두 번째 것을 살펴보겠습니다.

그러나 이 시점에서 나는 또한 lsyncd가 ~/B 폴더에 방금 삭제된 파일이 없다는 것을 감지하고 시작될 때 즉시 하는 것처럼 ~/A에서 ~/B로 누락된 파일을 복사하여 폴더를 다시 동기화할 것이라고 기대합니다. !

귀하의 구성에서는 파일이 삭제될 때 즉각적인 반응을 기대할 수 없습니다.표적. 의 변경 사항을 감시하는 데 lsyncd사용됩니다 .inotify원천파일 트리. 실제로 시작 시 발생하는 초기 동기화 이후에는 어떤 일이 발생하는지 알 수 없습니다.표적. 대신에 때때로(아래 참조) rsync변경 사항을 반영하도록 요청합니다.원천나무를표적.

이론적으로는 다음을 lsyncd통해 대상을 모니터링할 수도 있습니다 inotify.타겟이 로컬인 한. 그러나 일반적으로 그렇지 않습니다. (귀하의 예와 달리) 대상이 원격 호스트에 있다고 가정해 보겠습니다. lsyncd그러면 다음 파일에 대해 어떻게 알림을 받을 수 있습니까?원격 대상삭제되고 있어?

하지만 이는 문제가 되지 않습니다. 다음에 lsyncd새 동기화를 시작하면( 실행하여 rsync) 파일이 다시 생성됩니다. 즉, 없는 동안즉각적인대상에서 파일이 삭제되면 해당 파일은 다음 rsync실행 시 다시 복사됩니다. 다음 rsync실행은원천트리(아래 참조) 또는 시작 시.

lsyncd를 통해 동기화 실행 빈도를 구성할 수 있습니다 rsync. 내가 아는 한 기본 시간 초과가 있지만 추가적으로 lsyncd1000(기본값)이 변경되는 경우원천트리( 를 통해 inotify), 그런 다음 (시간 초과에 관계없이) rsync모든 항목을 한 번에 동기화하기 위해 실행됩니다. 물론, 이는 rsync모든 변경을 수행한 후 실행하는 것보다 훨씬 낫습니다.

따라서 마지막 질문("어떻게 할 수 있습니까?")에 도달하면그것은 전혀 할 수 없습니다, 또는 약간의 프로그래밍이 필요합니다. 모든 경우에 파일 시스템 변경 사항을 감시하는 데몬을 실행해야 합니다.표적그런 다음 자체적으로 실행 rsync하여원천~로표적또는 그러한 변경이 있는 경우에는 다른 데몬에게 알립니다.원천차례로 실행됩니다 rsync.

하지만 그렇게 되면 더 이상 필요하지 않을 것입니다 lsyncd. 그 지식을 바탕으로 자신만의 양방향 동기화 시스템을 구축하게 될 것이기 때문입니다.

이제 첫 번째 문제를 살펴보겠습니다.

내 구성 파일에 따르면 ~/B에서 파일을 삭제하면 ~/A에서도 삭제되지 않을 것으로 예상됩니다.

여기서 무엇이 잘못되고 있는지 즉시 알 수는 없습니다. 귀하의 구성을 고려할 때 실제로 발생해서는 안됩니다. 그러나 추가 분석과 관련하여 제안 사항이 있습니다.

시작할 때 lsyncd매개변수를 추가합니다 -log Exec. 그러면 명령줄은 다음과 같습니다.

lsyncd -log Exec -nodaemon ~/.config/lsyncd/lsyncd.conf

그러면 모든 프로세스 생성의 명령줄이 기록됩니다 lsyncd(귀하의 경우 터미널에). 나는 귀하가 해당 명령줄을 게시할 때(가급적이면 원래 질문의 업데이트로) 문제를 식별할 수 있다고 확신합니다. rsync명령줄 매개변수를 포함하여 실행 방법이 표시되어야 합니다 . 아마도 제가 분석에 도움을 줄 수 있을지 모르지만, 솔직히 말해서 저는 rsync.

관련 정보