대부분의 동기화 프로그램은 파일 변경을 어떻게 모니터링합니까?


9

Dropbox와 같은 동기화 프로그램은 일반적으로 바이트 단위 비교 또는 해시를 사용하거나 diff버전 제어와 같은 로컬 커밋 로그를 사용 하거나 유지 하여 파일 변경을 추적 합니까?

답변:


8

Windows에는 '감시 된'디렉토리 구조 (FindFirstChangeNotification ())가 변경 될 때 OS가 경고하도록하는 메커니즘이 있습니다. 파일이 변경되었음을 나타내는 경우 응용 프로그램은 변경된 디렉토리의 파일을 비교하여 크기, 수정 날짜, 해시 등을보고 변경된 실제 파일을 찾을 수 있습니다.

아래에서 Michael이 지적한 것처럼 이것은 각 플랫폼이 어떤 방식으로 제공 할 것입니다. 나는 이런 종류의 일이 Windows에 독특하다고 말하지 않았습니다.


1
그리고 Linux 에는 inotify 가 있습니다.
Michael

그러나 파일 변경 시점에 동기화 프로그램이 실행되고 있지 않은 경우 어떻게해야합니까? 갈고리로 통보받을 기회를 놓치지 않습니까?
mcandre

일반적으로 백그라운드에서 실행되는 dropbox의 특정 예를 사용했습니다. 분명히 프로그램이 실행되고 있지 않으면 알림을받지 않습니다. 그런 다음 다른 방법 (수정 날짜)을 사용해야합니다. 다른 프로그램이 다르게 작동하기 때문에 특정 방법이 무엇을 사용했는지에 대한 구체적인 대답을 얻지 못할 것이라고 생각합니다. 해당 특정 프로그램의 제작자에게 문의하는 것이 좋습니다.
GrandmasterB

@mcandre GrandmasterB가 말한 내용과 거의 같습니다. 알림을받지 못한 경우 폴더를 스캔해야합니다. "정확한"방법에 따라 새 파일과 수정 된 타임 스탬프 / 파일 크기 (상대적으로 비용이 저렴함)를 찾거나 최악의 경우 전체 파일을 비교하는 것을 의미 할 수 있습니다. rsync와 같은 프로그램은 일반적으로 파일을 청크로 해시하므로 데이터의 초기 변경 사항을 조기에 감지 할 수 있지만 최악의 경우 (파일이 동일) 모든 내용을 읽게됩니다.
Daniel B

2

궁극적으로 파일을 비교하려면 모든 바이트를 비교해야합니다. 어떻게 단일 바이트 변경을 알 수 있습니까?

실제로 바이트 블록을 읽고 해시 값을 계산 한 다음 해시 목록을 확인합니다. 좋은 예는 " rsync "입니다.

내가 아는 한 dropbox는 전체 파일을 중복 제거하므로 전체 파일의 해시를 계산하여 동일한 파일을 확인합니다.


1
일부 파일 시스템에 pst 날짜가 수정되었습니다
ratchet freak

1
해시가 작지만 실제 충돌 위험을 만들어 파일이 동기화되지 않습니까? Dropbox는 분명히 diff와 유사한 구현을 사용합니다. dropbox.com/help/8/ko
mcandre

1
@mcandre 자체 질문으로 더 좋을 것 같습니다.
GrandmasterB

@ratchetfreak : 일부 시스템에서 수정 된 날짜는 이러한 종류의 문제에 반드시 신뢰할 수있는 것은 아닙니다. 터치 만하면 수정 된 날짜가 달라져 동기화가 실제로 필요하지 않을 수 있습니다.
Steven Evers

1
@SnOrfus는 수정 한 날짜가 변경 될 때 변경 사항을 다시 확인하십시오
ratchet freak

1

예를 들어 .NET에는 FileSystemWatcher 클래스가 있습니다. 다른 저수준 언어 및 런타임에서도 비슷한 기능을 제공 할 수 있다고 확신합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.