다음은 제가 정리하고 싶은 리눅스에서의 파일 관리 문제입니다. 전적으로 버전 제어의 문제가 아니라 컴퓨터 간의 동기화 문제입니다.
상태
세 대의 컴퓨터(예: A, B, C)가 있습니다.
이 컴퓨터는 항상 동시에 켜지지는 않습니다.
이러한 컴퓨터는 NFS 프로토콜을 사용하여 서로 빠르게 연결할 수 있습니다.
일반적으로, 엄밀히 말하면 컴퓨터는 다양한 목적으로 사용됩니다.
나는 많은 수의 파일(바이너리 및 일반 텍스트)을 dir-A, dir-B, dir-C의 세 디렉터리 트리로 정렬했습니다. 출발점으로 이 세 그루의 나무가 위치하고 있습니다.각컴퓨터 세 대 중. 자세한 내용은
- dir-A에는 컴퓨터 A를 사용할 때 일반적으로 작업하는 문서가 포함되어 있습니다.
- dir-A는 컴퓨터 A에만 백업합니다.
- 버전컴퓨터 A의 dir-A"마스터 사본"이어야 합니다. 편의와 중복성을 위해 다른 컴퓨터에 동일한 이름의 복사본이 존재합니다.
- 다른 두 쌍의 디렉토리와 컴퓨터도 마찬가지입니다.
그런데 명령줄에서 디렉터리와 파일을 빠르게 검색할 수 있으므로 문서 분류가 훌륭합니다. 따라서 라이브러리를 관리하기 위해 패키징 소프트웨어에 의존하기보다는 명령줄과 스크립트를 고수하고 싶습니다.
의도
때로는 상황이 더 복잡해지기 때문에B와 C가 꺼져 있을 때 컴퓨터 A에서 작업할 때,
- dir-B 및 dir-C의 범주와 일치하는 새 문서를 받았으므로 이를 로컬 복사본에 저장합니다.
- 정렬을 개선하기 위해 dir-B 및 dir-C의 내용을 로컬에서 켜고 끄도록 다시 정렬할 수 있습니다. 이는 하위 디렉터리 생성, 삭제, 이름 바꾸기, 병합, 파일 이동, 불필요한 항목 삭제 등으로 귀결됩니다.
그러나 목적은 dir-B(dir-C)의 "마스터 복사본"이 컴퓨터 B(C)에 있어야 한다는 것입니다. 따라서 선택한 순간에 컴퓨터 A에서 수정한 내용이 컴퓨터 B(C)로 전송되어야 합니다.
마지막으로 이는 B와 C에서 dir-A의 편의 사본을 편집할 때도 적용되어야 합니다.
질문
제약이 있는 상황에서 최대한의 유연성을 갖춘 최선의 전략을 고민하고 있습니다. 작업 1은 간단한 동기화 문제(저는 사용함 rsync
)이지만 작업 2는 더 복잡합니다.
그러므로 나는 알고 싶다.
- 작업 1과 2를 수행하는 데 사용할 수 있는 Linux의 도구/유틸리티가 있습니까?
- 이 문제를 어떻게 해결하시겠습니까?
- 문제가 정말 해결될 수 있을까?
- 가능하게 하려면 제한 사항을 삭제해야 할까요?
답변1
이는 전적으로 Unix/Linux 문제가 아니며, 복잡성 수준에 관계없이 모든 운영 체제에서 이 작업을 수행할 수 있습니다.
질문을 다시 말씀드리겠습니다.
- {1주어진 순간에 서로 연결될 수도 있고 연결되지 않을 수도 있는 N개의 컴퓨터가 있습니다. 일반적으로 1개의 마스터와 여러 개의 슬레이브가 포함된 것으로 간주됩니다.
- {2시간이 지남에 따라 이러한 컴퓨터의 리소스는 동기화되지 않거나 이름이 변경될 수 있습니다.
- {삼한 번에 한 대의 컴퓨터에서 작업합니다.
- {4컴퓨터를 다시 동기화하고 싶습니다.
해결책:
{1이는 두 대 이상의 컴퓨터가 연결되어 있을 때 정기적으로 일괄 조정 작업을 실행해야 함을 의미합니다.
{2일치하는 리소스를 찾으려면 이름 바꾸기, 재분류 등을 추적해야 함을 의미합니다.
{삼} 컴퓨터 간의 수정 시간을 비교하여 신뢰할 수 있는 레코드를 찾았다는 결론을 내립니다.
신뢰할 수 있는 최신 기록을 찾기 위해 거래 시간을 비교하기 위한 핵심 전제 조건은 모든 N 컴퓨터에 정확한 시계가 있어야 한다는 것입니다.
NTP
당신의 친구인가요?수정 기록은 메커니즘에 의해 제공됩니다
inotify
.N개의 파일 목록에서 충돌하는 레코드를 식별한 후 무엇을 어디로 이동할지 결정할 수 있습니다. 나는
datamash
이 작업의 초기 후보로 GNU를 추천합니다.파일 이동은 가장 간단한 작업입니다.
rsync
충분히 다재다능합니다.
마지막으로, 나는 이에 대한 비용을 지불하지 않을 것이므로 대본을 작성하는 일상적인 작업을 독자의 연습으로 남겨 두겠습니다.