복사하는 동안 파일을 복사하고 확인하는 방법은 무엇입니까?

복사하는 동안 파일을 복사하고 확인하는 방법은 무엇입니까?

(또 다른 "복사 및 확인" 질문...)

여러 HDD 간에 적당한 양의 데이터를 복사하고 싶고, 데이터가 올바르게 복사되었는지 절대적으로 확인하고 싶습니다.

현재 복사 방법은 매우 표준적입니다. 복사한 후 확인합니다(sha256 사용). 나는 추가 단계와 관련된 시간이 마음에 들지 않습니다. 30~60분의 체크섬이면 프로세스를 중단하기에 충분하며 어떤 단계도 놓치지 않고 모든 것을 올바르게 검증하기 위해 더 열심히 노력해야 합니다.

그래서 특별히 원스텝 복제 및 검증 프로세스를 찾고 있습니다.

하지만 디스크 캐시에서 복사된 파일을 다시 읽고 싶지 않습니다., 이는 검증 포인트를 무효화하기 때문입니다!

꼭 필요한 경우 이 작업을 위해 나만의 도구를 작성할 준비가 되어 있지만 여기의 의견에 동의하고 내가 설명한 것과 같은 도구를 이미 작성한 사람의 의견을 꼭 듣고 싶습니다.

Linux에서는 .를 사용할 수 있다는 것도 알고 있습니다 echo 3 > /proc/sys/vm/drop_caches. 하지만 이 작업을 몇 킬로바이트 또는 심지어 메가바이트마다 수행하면 I/O 성능이 확실히 저하됩니다. 이 특정 기술은 일반적으로 이식 가능하지 않으므로 이 문제에 대한 해결책으로 파일로 보관하고 싶지 않습니다.

나는 fsync(file); fdatasync(file); fsync(dir); fdatasync(dir)이것이 아마도 좋은 출발점이 될 것이라는 것을 알고 있습니다(여기서는 과잉이 좋습니다). 그러나 순차적 스트림 처리량이 줄어들까 걱정됩니까?

현재 내 생각은 읽기/쓰기 복사를 수행하는 동시에 읽기/쓰기가 도달한 위치보다 256MB 뒤에 있는 대상 파일도 여는 것입니다.훌륭한그런 다음 $copypoint-256MB 위치를 순차적으로 읽고 HDD 온보드 컨트롤러 및 캐시 RAM의 범위에서 확인합니다.

멋진 발놀림을 O_SYNC | O_DIRECT하고 적절한 속도를 얻을 수 있나요?그리고내 리드백이 디스크 플래터에서 데이터를 가져오도록 얼마나 잘 보장합니까?

아니면... 나중에 쓰기 먼저 확인하는 것이 "최신" 운영 체제, HDD 컨트롤러 및 우수한 보안 파일 I/O 설계의 최적이 아닌 상태를 처리하는 가장 좋은 방법일까요? :/

답변1

파일을 소싱 cat하고 파이프하여 tee대상에 저장하는 동시에 출력을 sha256sum. 캐시 대신 디스크에서 대상을 다시 읽으려는 경우 ddiflag=direct옵션을 사용할 수 있습니다.

관련 정보