저는 OLD OLD OLD *nix 시스템에서 테라바이트급의 데이터를 복사하고 있습니다. 드라이브를 연결하기 위해 새 하드웨어에 돈을 쓸 수도 있지만 그 돈을 쓰지 않으려고 합니다.
시스템이 끔찍해요. 자주 멈추고 충돌이 발생합니다. 그래서 매번 복사 프로세스를 다시 시작해야 합니다. 이미 복사된 파일을 "건너뛰어야" 하기 때문에 "따라잡기"에는 시간이 오래 걸립니다.
사용할 수는 있지만 rsync
시스템이 너무 느려서 rsync
초기 재고 스캔/비교를 시작할 때마다 시간이 걸립니다.
그래서 복사해야 하는 모든 파일의 일회성 목록을 생성하여 파일에 저장할 수 있다고 생각했습니다. 그런 다음 파일을 반복하여 파일을 복사한 다음 해당 줄을 삭제하는 스크립트를 가질 수 있습니다. 스크립트/복사가 중간에 실패하면 중단한 부분부터 계속할 수 있습니다. 대기열에서 행을 제거하는 부분을 처리하는 방법을 모르지만 이를 알아내려고 노력하는 동안 이미 필요한 작업을 수행하는 공개적으로 사용 가능한 도구나 스크립트가 있어야 한다는 것을 깨달았습니다.
따라서 목표는 파일 입력 대기열을 통과하여 복사하고, 복사가 완료되면 대기열에서 해당 파일을 제거하는 것입니다. 이 특정 사용 사례에서는 필요하지 않지만 대기열에 추가되는 새 항목을 수용할 수 있어야 합니다. 물론 대기열은 시스템 오류/문제가 발생한 경우에도 계속될 수 있도록 파일 기반이어야 합니다.
혹시 아는 사람 있나요?
답변1
이 작업을 안정적으로 수행하려면 "전문적인" 검증된 도구를 사용하는 것이 권장되지만 여기에는 빠르고 더러운 즉각적인 솔루션이 있습니다. 시스템 문제로 인해 파일의 한 줄을 삭제하지 못할 수도 있으므로 성공적으로 복사된 파일 이름을 로그 파일에 보관하는 것이 더 안전할 것 같습니다. 복사할 파일(예: ls
결과 리디렉션)이 포함된 "todo" 파일과 빈 "로그" 파일을 만듭니다. 그런 다음 실행
comm -2 -3 todo log |
while read FN
do echo cp "$FN" "new/path/to/$FN" && echo "$FN" >> log || echo "$FN" >&2
done 2>>errlog
이 명령을 실행할 때마다 이미 복사되고 기록된 파일은 건너뜁니다. "파일이 정렬 순서가 아님" 경고를 sort
방지하려면 파일을 "실행" 해야 할 수도 있습니다 .comm