[unix] 파일을 복사하는 동안 파일을 수정하면 어떻게됩니까?

파일 B를 위치 C에서 위치 C로 복사하는 효과는 무엇입니까? 해당 cp 작업 중에 프로세스를 통해 35 %라고 말하면 fileA.big에 새로운 정보가 추가되고 900mb에서 930mb로 증가합니다.

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

사본이 약 70 % 정도이고 원본 파일이 업데이트되었지만 이번에는 400MB로 잘린 경우 (즉, 사본 진행률이 잘림 지점을 넘어 서면) 최종 사본의 결과는 무엇입니까?

ext3 / ext4 파일 시스템에서 Linux OS를 참조하십시오. 볼륨 섀도우 매직 등이 없습니다. 일반 cp. 백업을 위해 라이브 couchdb 파일을 복사하여 호기심을 불러 일으켰지 만 특정 사용 사례가 아닌 일반적인 시나리오에 더 관심이 있습니다.



답변

fileA.big복사 중에 키가 증가 하면 추가 된 데이터가 복사에 포함됩니다.

파일이 사본이 현재있는 위치보다 짧게 잘 리면 사본이 at 및 대상 파일에 중단 된 시간까지 복사 된 내용이 포함됩니다.


답변

Patrick은 다소 정확하지만 여기에 이유가 있습니다. UNIX에서 파일을 복사하는 방법은 다음과 같습니다.

  1. 에서 (더 많은) 바이트를 읽으십시오 fileA.
  2. 우리가 파일의 끝에서 (또는 과거) 바이트를 얻지 못하면 우리는 끝났습니다. 떠나다.
  3. 그렇지 않으면 바이트를 쓰고 fileB1 단계로 되돌아갑니다.

그것을 알고, 그것이 간단하다는 것을 알면 몇 가지 경우를 볼 수 있습니다.

파일의 끝을 찾 자마자 복사가 완료됩니다. 복사하는 동안 파일이 커지고 있지만 복사하는 것보다 느리게 커지고 있다고 가정 해 봅시다. 복사 프로그램은 파일이 도착할 때 파일 크기가 더 커지기 때문에 원래 파일 크기를 계속 유지합니다. 그러나 어느 시점에서 파일의 끝 부분을 따라 잡고 현재 더 이상 바이트를 읽을 수 없기 때문에 파일이 끝났다는 것을 알고 있습니다 . 따라서 파일이 더 커지려고해도 종료됩니다.

파일이 잘 리면 복사 프로그램에 “Whoa, 파일의 끝을 지났습니다!”라고 표시됩니다. 그리고 종료합니다.

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

(저는 CouchDB에 익숙하지 않으며 이러한 종류의 손상에 견딜 수 있도록 데이터베이스를 설계 할 수는 있지만 절대적으로 확신하는 것이 가장 좋습니다.)


답변