2016-09-02 2 views
2

많은 폴더에서 거친 2 테라 바이트의 데이터를 처리해야하는 백업 유틸리티를 작성하려고합니다.디렉토리 트리보기 inotify

내가 파일을 만들거나 편집하거나 삭제할 때 파일에 대한 작업을 수행하려는 경우 파일 이동 또는 이름 바꾸기가 더 바람직합니다.

저는 fanotify를 사용하여 혼란스러워했습니다. 단지 파일 편집에서만 작동합니다. 그리고 내가하고 싶지 않은 최대 파일 시계를 편집해야하기 때문에 가능한 경우 inotify를 사용하는 것에 반대합니다. 성능에 큰 영향을 미칩니다.

필자는 파일 아래에있는 모든 파일에 재귀 적으로 작동하는 단일 파일 감시를 설정하는 것이 좋습니다. 좋은 방법이 무엇인지 아는 사람이 있습니까? inotify에 가야하고 실적이 좋을까요? 또는 다른 방법을 사용할 수 있습니까?

+0

XY 문제와 같은 냄새가납니다. 너 정확히 뭘 하려구? 필자는 두 디스크를 "동기화"상태로 유지하는 프로그램을 작성하려고합니다. 따라서 한 디스크의 파일 편집 내용이 다른 디스크에 나타납니다. 그것이 당신의 목표라면, 대신 RAID 설정 사용을 고려하십시오; 더 효율적이고 신뢰할 수 있습니다. –

+0

@ColonelThirtyTwo 하나는 쉽게 2TB를 인터넷에 연결된 두 대의 컴퓨터간에 동기화 할 수 있습니다. – Michael

답변

2

디렉토리 트리에서 변경 사항을 재귀 적으로 감시하는 방법이 없다고 생각합니다. 반면에 inotify를 사용하면 보는 디렉토리마다 하나의 파일 설명자를 만들 필요가 없습니다. 단일 inotify를 개체를 만든 다음 inotify_add_watch

int inotify_add_watch(int fd, const char *pathname, uint32_t mask); 
+0

도 많은 오버 헤드를 추가하지 않습니까? 시작시에보고 싶은 전체 트리를 재귀 적으로 스캔해야합니까? – blipman17

+0

나는 그것을 한 번 완전히 스캔하고 모든 디렉토리를 파일에 기록 할 수 있다고 생각한다. 그런 다음 프로그램 시작시 단일 파일을로드하십시오. – blipman17

+0

한 번만 검색하면 찾은 모든 디렉토리를 감시 할 수 있습니다. 그때부터, 디렉토리 생성이나 삭제를위한 이벤트를 받으면 그에 따라'inotify_add_watch' /'inotify_rm_watch'를 호출해야합니다. – redneb

0
나는 작은 램 드라이브에 대한 폴링 백업 응용 프로그램을 작성

으로 많은 디렉토리를 추가; 몇 가지 문제를 해결 한 경험이 많습니다. 나는 일반적으로 폴링 팬이 아니지만 윈도우와 std.file 라이브러리를 사용하고 있습니다 ancienct : 윈도우 10 그들의 lib 5 메이저 버전 뒤에 있습니다; 그래서 이식성에 대해 걱정하지 마십시오.

활성 모드와 수면 모드는 디스크를 회전시키지 않고 오랫동안 사용할 수있게 전환하기 전에 디스크가 무의미하게 아래로 회전하는 것을 방지합니다. 나는 WinRAR이 당신이 아카이브로 이것을 할 수 있기 때문에 탐지와 복구에 대해 생각하기 시작했고 중형 복제의 ZFS 솔루션은 순진 해 보입니다.

한 달 전에 새 컴퓨터를 구입했는데 여전히 파일을 백업하려고합니다. phobos 즉 std.anything을 사용하세요. std.file '복사는 복원 된 파일에 대해 올바르지 않은 작성 시간을 변경합니다. 복사 한 후에는 이전 파일의 생성 시간을 읽고 OS 기능을 직접 호출하고 생성 시간을 설정해야합니다. 모든 메타 데이터는 Windows 시스템 호출과 함께 제공되므로 Linux 시스템 호출에서 데이터를 조사하기에 좋은 곳입니다.

이제 파이썬을 다시 방문하여 다음을 시도해보십시오. https://docs.python.org/3/library/pathlib.html 스포일러 : 3.5.2에서 오류가 있습니다.