io.Copy()로 인한 희소 파일 부풀림
io.Copy()로 파일을 복사할 때 큰 희소 파일이 불균형적으로 커지는 경향이 있습니다. 목적지에서. 이 동작은 파일 홀에 대한 정보를 전달하는 수단이 부족한 io.Copy()의 원시 바이트 처리에서 비롯됩니다.
홀 처리
홀을 관리하려면 , syscall 패키지를 더 깊이 파고들어 lseek(2)에 대한 SEEK_HOLE 및 SEEK_DATA 값을 수정해야 합니다. 안타깝게도 이러한 값은 표준 syscall 패키지나 golang.org/x/sys 패키지에는 없습니다.
해결책
이를 극복하려면 다음 단계를 따르세요.
예를 들어 Linux에서는 다음을 사용할 수 있습니다.
// +build linux const ( SEEK_DATA = 3 SEEK_HOLE = 4 )
희소 파일 읽기 및 전송
데이터 영역을 감지하고 희소 파일을 읽는 동안. 희박성이 그대로 유지된 파일을 전송하는 경우 프로세스가 더 복잡해지고 플랫폼별 고려 사항이 필요합니다.
Linux 관련 접근 방식
Linux에서는 fallocate(2)를 다음과 함께 사용합니다. FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE는 파일 끝에 구멍을 뚫습니다. 실패하면 구멍을 덮기 위해 제로 블록을 삽니다.
추가 참고 사항
위 내용은 이동 중에 블로팅 없이 희소 파일을 효율적으로 복사하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!