같은 일부 파일 복사 프로그램 rsync
과 curl
실패 전송 / 복사를 재개 할 수있는 능력을 가지고있다.
이러한 실패의 원인은 여러 가지가있을 수 있으며, 경우에 따라 프로그램이 수행 할 수없는 경우도 프로그램이 "정리"할 수 있습니다.
이러한 프로그램이 재개되면 성공적으로 전송 된 파일 / 데이터의 크기를 계산하고 소스에서 다음 바이트를 읽고 파일 조각에 추가하기 시작합니다.
예를 들어, 대상에 "만들어진"파일 조각의 크기는 1378 바이트이므로 원본의 1379 바이트부터 읽고 조각에 추가하기 시작합니다.
내 질문은 바이트가 비트로 구성되어 있으며 모든 파일이 깨끗한 바이트 크기의 청크로 분할 된 데이터를 가지고 있지 않다는 것을 알고 있습니다.이 프로그램은 데이터 추가를 시작하기로 선택한 지점이 올바른지 어떻게 알 수 있습니까?
대상 파일을 작성할 때 프로그램, 커널 또는 파일 시스템 수준에서 발생하는 SQL 데이터베이스와 유사한 일종의 버퍼링 또는 "트랜잭션"은 깔끔하고 잘 구성된 바이트 만 기본 블록 장치로 만들 수 있습니까?
또는 프로그램은 최신 바이트가 잠재적으로 불완전하다고 가정하므로 불량으로 가정하여 삭제하고 바이트를 다시 복사 한 다음 추가를 시작합니까?
모든 데이터가 바이트로 표현되는 것은 아니라는 것을 알기 때문에 이러한 추측은 틀린 것 같습니다.
이러한 프로그램이 "다시 시작"되면 올바른 위치에서 시작한다는 것을 어떻게 알 수 있습니까?
head -c 20480 /dev/zero | strace -e write tee foo >/dev/null
그러면 OS 가이 를 버퍼링하여 더 큰 청크로 디스크로 보냅니다.
fwrite()
나요?