크기가 계속 커지는 파일을 복사하는 방법

크기가 계속 커지는 파일을 복사하는 방법

이런 상황을 상상해 봅시다:

while true파일에는 반복 사이에 절전 모드가 없이 루프 내에서 지속적으로 텍스트가 추가됩니다 .

while true
do
echo "foo" >> source.file
done 

파일을 다른 위치에 복사하려면 다른 프로세스를 시작하십시오 cp. rsync파일이 특정 크기(복사 프로세스가 시작될 때 소스 파일의 크기라고 추측)로 복사된 다음 복사 프로세스가 종료되는 것을 확인했습니다.

복사 프로세스가 실행되는 동안 파일 크기가 계속 증가하므로 언제 복사를 중지해야 하는지 어떻게 알 수 있습니까?

답변1

이 문제는 크기가 27바이트( )에 불과한 파일을 복사할 때 발생합니다 strace cp a b.

read(3, "Who\222s there?\nIt's just me!\n", 131072) = 27
write(4, "Who\222s there?\nIt's just me!\n", 27) = 27
read(3, "", 131072)                     = 0

크기가 알려져 있지만 cp(복사 중에 변경되지 않음) cp최대 128K의 데이터를 읽으려고 시도합니다. a에 read()0바이트가 전달되면 복사가 중지됩니다. 이는 파일의 끝에 도달했다는 신호입니다.

복제 프로세스가 데이터를 쓰는 것보다 데이터를 읽는 속도가 더 느린 경우(예: 다른 I/O 우선 순위 또는 cgroups 컨트롤러와 같은 기타 I/O 제약 조건으로 인해) 복제가 "영원히" 중지됩니다.

관련 정보