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


19

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

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

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

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


이것을 부탁해 주셔서 감사합니다. 내 '지식'은 대부분 지금까지 추측이었습니다.
tshepang 2019

답변:


10

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

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


27

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

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

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

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

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

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

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


좋은 설명입니다. BTW, 이것은 Windows에서 알려진 일반적인 오류 메시지 ( "파일에 액세스 할 수 없음-사용중인 파일")를 얻지 않고 UNIX와 유사한 OS에서 이것이 가능한 이유를 항상 놀라게했습니다. 이미 삭제 된 MP3 파일도 재생할 수 없습니다 그것을 재생하는 동안 . 유닉스에서는 (놀랍게도) 아무 문제없이 할 수 있습니다. 유닉스 기반 OS는 항상 파일의 백업 복사본과 함께 작동한다고 생각하므로 이것이 가능합니다.
syntaxerror

1
실제로 삭제 된 파일을 읽을 수있는 것은 다른 UNIX 기능에서 비롯됩니다. UNIX에서는 파일과 파일 이름이 다릅니다. 파일을 삭제할 때 실제로하고있는 것은 파일에 대한 이름이 지정된 "링크"를 삭제하는 것입니다. 프로그램이 파일을 열면 링크로 계산됩니다. 링크가없는 경우에만 시스템이 파일 자체를 삭제합니다.
Jander

따라서 파일이 복사 할 수있는 것보다 빠르게 커지면 cp가 종료되지 않습니까? cp가 파일을 읽을 수있는 것보다 파일에 쓰는 것이 파일에 쓸 수 있어야하기 때문에 가능성이 낮습니다.
Bladt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.