특정 폴더 아래의 파일 변경 목록에는 방대한 콘텐츠와 여러 수준의 하위 폴더가 있습니다(좋은 성능)

특정 폴더 아래의 파일 변경 목록에는 방대한 콘텐츠와 여러 수준의 하위 폴더가 있습니다(좋은 성능)

나는 같은 질문을합니다 : 특정 시간 범위 내에 변경된 파일을 나열하는 방법은 무엇입니까?

하지만. 반전이 있습니다.

콘텐츠가 풍부한 폴더 10개(13Tb)와 여러 수준의 하위 폴더가 포함된 여러 폴더가 있습니다. 좋은 성능으로 각 폴더에 대해 시간이 지남에 따라 변경된 파일 목록을 얻고 싶습니다(몇 시간이 아닌 몇 분 안에 반환...).

예제 디렉터리 트리는 다음과 같습니다. 폴더 저장소1에는 A - Z까지 26개의 폴더가 있으며, 이 26개 폴더 각각에는 하위 폴더인 26개의 폴더가 있습니다. 이는 100레벨 이상까지 지속됩니다. 위에 지정된 각 폴더에는 ~300kb - 1mb 크기의 이미지가 최소 100개 이상 있습니다.

마지막으로, 서로 다른 데이터 센터에 있는 2개의 시스템을 동기화하고 점진적인 변경을 적용하려고 합니다. Rsync를 시도했는데 변경 사항을 감지하는 데 몇 시간이 걸렸고 SLA를 훨씬 뛰어넘었습니다...

일정 기간 동안 변경된 파일 목록을 쿼리할 수 있는 타임스탬프가 있는 Linux 명령이나 파일 인덱스를 요청합니다. 이렇게 하면 단일 파일을 Rsync할 수 있습니다.

이 작업에 어떤 오픈 소스 도구를 추천해 주실 수 있다면 저도 기쁘게 생각합니다.

답변1

이는 선택한 파일 시스템과 파일 시스템이 이 정보를 유지하는 방법에 따라 달라집니다. 현재 어떤 파일 시스템을 갖고 있나요? 필요하다면 변경할 수 있나요?

UFS 또는 EXT와 같은 기존 파일 시스템이 있는 경우 타임스탬프나 변경 사항에 대해 별도의 인덱스가 유지되지 않습니다. 변경 사항을 찾는 유일한 방법은 각 인덱스 노드를 방문하여 타임스탬프를 확인하는 것입니다. 파일 시스템이 큰 경우(>10M inode) 쿼리에 시간이 걸립니다. 빠른 디스크가 있는 경우 검색을 분할하고 여러 스레드에서 실행하여 작업 속도를 약간 높일 수 있습니다. 디스크가 느리거나 IOP가 이미 제한되어 있는 경우 다중 스레드는 아무 것도 개선하지 못할 수 있습니다.

BTRFS 또는 ZFS와 같은 다른 파일 시스템은 시간이 지남에 따라 모든 변경 사항에 대한 기록을 유지하고 이러한 변경 사항을 복제본 위치로 전송할 수 있습니다. rsync를 사용하지 않고도 증분 차이를 복제본 위치로 빠르게 보낼 수 있습니다.

예제 디렉터리 트리는 다음과 같습니다.

여러 명령으로 분할하는 것이 더 쉽다는 점을 제외하면 구조는 전혀 중요하지 않습니다. 기존 파일 시스템(특히 NFS 클라이언트)에서는 각 파일을 검색하는 것이 전부입니다. 이는 하나 이상의 찾기/재동기화 프로세스를 실행하고 완료될 때까지 기다리는 것을 의미합니다.

내 파일 시스템은 NFS입니다.

현재 NFS를 사용하여 다른 파일 시스템에 액세스하고 있습니다. 그것이 당신이 할 수 있는 전부라면, 모든 파일에 접근해야 할 것입니다.

반면에 NFS를 제공하는 모든 것이 있을 수 있습니다. netapp 장치인 경우 변경된 블록을 다른 netapp으로 보낼 수 있습니다(다른 netapp과 올바른 라이센스가 있다고 가정).

Netapp에는 변경된 블록에 대한 정보를 수집하는 공급업체 API(snapdiff)가 있지만 사용할 수는 없습니다.

관련 정보