scp를 통해 한 Solaris 컴퓨터에서 다른 컴퓨터로 전송하는 7.5Gb 파일이 있습니다. scp 다음에 파일은 대상 서버에 13Gb를 표시합니다. 그 이유가 무엇인지 알고 싶습니다.
답변1
이런 일이 발생할 수 있는 한 가지 방법은 "취약한" 파일을 사용하는 것입니다.스파스 파일. 프로그램이 다음과 같은 일을 한다고 가정해보자:
fd = open("somefile", O_RDWR);
seek(fd, 1024, SEEK_SET);
write(fd, "blah blah", 9);
시스템 seek()
호출은 파일의 첫 번째 디스크 블록을 건너뛰고(Solaris를 사용한 지 꽤 된 것 같습니다) 두 번째 블록에 9바이트를 씁니다. 대부분/모든 Unix 및 Linux 파일 시스템은 실제로 기록되지 않은 첫 번째 디스크 블록을 할당하지 않습니다. 파일을 복사하거나 보관하거나 다른 작업을 수행하는 경우 read()
파일의 처음 1024바이트에 대한 작업이 모두 0바이트를 반환하므로 파일 크기가 커집니다.
하지만 그러한 상황은 실제로 드물다. 중복 등의 오류를 찾기 위해 더욱 노력하겠습니다.
크기와 디스크 사용량을 비교하여 소스 파일이 희박한지 여부를 확인할 수 있습니다.
ls -l the_file
du -k the_file
두 번째 숫자(디스크 사용량)가 첫 번째 숫자(실제 파일 크기)보다 작으면 파일이 희박합니다.
파일이 희박한 경우 rsync -a --sparse
를 사용하여 전송할 수 있습니다 scp
. Rsync는 사용자가 지시하면 스파스 파일을 스파스 파일로 복사할 수 있습니다.