열려 있는 파일을 다른 장치로 이동

열려 있는 파일을 다른 장치로 이동

저는 대용량(~200GB) 출력 파일을 생성하는 애플리케이션을 실행 중이며 실행하는 데 약 35시간이 걸립니다(현재는 약 12시간이 소요됩니다). 응용 프로그램은 파일을 한 번만 연 다음 완료될 때까지 쓰는 동안 파일을 열어 둡니다. 또한 응용 프로그램은 파일에 대한 많은 무작위 액세스 쓰기(즉, 순차적 쓰기가 아님)를 수행합니다.

지금은 파일이 로컬 하드 드라이브에 저장되고 있지만 완료되면 다른 장치(네트워크 드라이브, SMB를 통해 마운트된 NTFS)로 옮기기로 결정했습니다.

시간을 절약하고 나중에 파일을 이동하지 않으려면 프로그램을 일시 중단하고 현재 부분적으로 완료된 파일을 다른 장치로 이동하고 몇 가지 트릭을 수행한 다음 프로그램을 다시 시작하여 이제 새 위치를 사용할 수 있는 방법이 있습니까?

대답은 '아니오'라고 확신합니다. 하지만 물어봐야 할 것 같았습니다. 때로는 놀라운 트릭이 있습니다...

답변1

tail파일이 무작위로 작성되므로 다른 솔루션을 게시하면 마음이 아프게 됩니다 . 증분 전송 알고리즘을 사용하여 작동하여 파일의 변경된 부분만 전송하여 전송 시간을 절약할 수 있으므로 여기서 아이디어는 rsync유망할 수 있습니다. 두 개의 로컬 파일에서 실행 rsync하면 rsync기본적으로 모드가 되는데 --whole-file이는 원하는 것이 아닙니다.

제안

rsync -av --inplace --no-whole-file /your/local/file.dat /your/remote/file.dat

...또는 (CIFS 설치가 증분 전송에 동의하지 않는 경우) pure를 사용하십시오 rsync.

rsync -av --inplace --no-whole-file /your/local/file.dat remoteserver:/your/directory/file.dat

따라서 200GB 파일이 가득 차면 이 명령을 여러 번 실행해야 합니다. 실행할 때마다 원격 파일이 점진적으로 업데이트됩니다. 이는 소스 파일이 무작위로 업데이트되는 경우에도 작동합니다. 어쩌면 15분마다 실행할 수도 있습니다. 그런 다음 pid가 완료되면 다시 실행하게 되며 이는 빠른 증분 증가가 됩니다.

답변2

네트워크 드라이브가 마운트(NFS 또는 기타)되었다고 가정하면,

tail -f -c1000000000000 /your/local/file.dat > /mnt/nfs/drive/file.dat

그러면 출력 파일이 네트워크 드라이브에 복사되기 시작하고 동기화가 유지됩니다. 프로그램이 완료되면 로컬 및 네트워크 파일 시스템에 동일한 200GB 파일이 표시됩니다. 어쩌면 둘 다에서 md5sum을 실행하여 확인할 수도 있습니다.

일부 UNIX 버전에서는 실행을 지원할 수도 있는데, 이는 pid가 완료 tail되면 자동으로 테일링을 중지합니다.--pid={Your pid here}

답변3

댓글을 달기에는 크레딧이 부족합니다.

물론, 그것은 질문에 대답하지 않습니다. 그렇기 때문에 리뷰로만 간주될 수 있습니다. 그럼에도 불구하고 내부 모습을 분명히 보여줍니다. 이것이 바로 이 리뷰가 이 페이지에 게재될 가치가 있다고 생각하는 이유입니다. 시간 내 주셔서 감사합니다. 나는 어떤 식 으로든 관련이 없습니다웹사이트.

내가 찾은이동 삭제 후 파일 핸들 열기, 이는 2021년 중반의 것으로 여기서 무슨 일이 일어나고 있는지 아주 잘 설명합니다. 내 생각에는 이 것보다 낫다.복사, 댓글에서 지적한미라후5월 3일 13시 55분.

관련 정보