파일이 복사되는 동안 수정되면 어떻게 됩니까?

파일이 복사되는 동안 수정되면 어떻게 됩니까?

파일 fileA.big(900mb)을 B 위치에서 C 위치로 복사할 때 cp 작업 중에 프로세스의 35%가 fileA.big에 새 정보가 추가되고 900MB에서 930MB로 커지면 어떻게 될까요?

최종 복사본(예: 위치 C의 fileA.big)의 결과는 무엇입니까?

복사가 약 70%에 도달하고 원본 파일이 업데이트되었지만 이번에는 400MB로 잘린 경우(즉, 복사 진행률이 잘림 지점을 초과한 경우) 최종 복사 결과는 어떻게 됩니까?

ext3/ext4 파일 시스템의 Linux 운영 체제를 나타냅니다. 그림자 마법 등은 없습니다. 그냥 평범한 오래된 cp입니다. 백업을 위해 라이브 CouchDB 파일을 복사하는 것은 호기심을 불러일으켰지만 특정 사용 사례보다는 일반적인 시나리오에 더 관심이 있었습니다.

답변1

Patrick의 진술은 다소 정확하지만 그 이유는 다음과 같습니다. UNIX에서 파일을 복사하는 방법은 다음과 같습니다.

  1. 에서 좀 더 많은 바이트를 읽어보세요 fileA.
  2. 파일 끝에 도달(또는 통과)하여 바이트를 얻을 수 없으면 작업이 끝난 것입니다.
  3. 그렇지 않으면 바이트를 쓰고 fileB1단계로 되돌아갑니다.

이것을 알고 그것이 그렇게 간단하다는 것을 알고 있으므로 몇 가지 극단적인 경우를 살펴보겠습니다.

파일의 끝을 찾으면 복사가 완료됩니다. 복사하는 동안 파일이 계속 커지지만 복사할 때보다 느린 속도로 증가한다고 가정해 보겠습니다. 복사 프로그램은 원본 파일 크기를 계속 초과하게 됩니다. 원본 파일 크기에 도달할 때쯤에는 파일에 더 많은 내용이 포함되기 때문입니다. 그러나 어느 시점에서 파일의 끝까지 따라잡으면 더 이상 바이트를 읽을 수 없기 때문에 끝에 도달했다는 것을 알게 됩니다.지금. 따라서 파일이 더 커지려고 해도 즉시 종료됩니다.

파일이 잘리면 복사 프로그램은 "와우, 파일 끝을 지났습니다!"라고 말하고 종료됩니다.

파일의 일부가 데이터베이스 프로그램에 의해 무작위로 업데이트되는 경우 :-) 데이터가 동시에 복사되지 않으므로 복사본에는 이전 데이터와 새 데이터가 혼합되어 있습니다. 그 결과 복사본이 손상될 수 있으므로 라이브 데이터베이스의 복사본을 만드는 것은 일반적으로 좋은 생각이 아닙니다.

(그러나 나는 CouchDB에 익숙하지 않으며 이러한 종류의 손상에 저항하도록 데이터베이스를 설계하는 것이 가능합니다. 그러나 절대적으로 확신하는 것이 더 좋습니다.)

답변2

복사 프로세스 중에 크기가 커지면 fileA.big복사본에 추가 데이터가 포함됩니다.

파일이 현재 복사본이 있는 위치보다 짧은 시간 동안 잘리는 경우 복사본은 현재 위치에서 중지되고 대상 파일에는 중지된 시간까지 복사된 콘텐츠가 포함됩니다.

관련 정보