tar가 블록 수준에서 데이터 중복을 제거할 수 있습니까?

tar가 블록 수준에서 데이터 중복을 제거할 수 있습니까?

간단히 말해서 tar 파일이 디스크에 생성될 때 tar 내부 및/또는 외부 범위의 중복을 제거할 수 있습니까? 이론적으로 묻는 것이니 tar 내부의 데이터 범위가 동일하다면(압축 범위 내에서 이동이나 분할이 없는 경우) 이론적으로 해당 범위는 tar 외부의 데이터 범위와 동일하므로 중복 제거가 발생할 수 있습니다.

예를 들어 디렉터리를 tar한 다음 블록 수준 중복 제거를 사용하는 경우 tar의 유효 크기는 추가된 헤더, 메타데이터 및 아카이브 표시의 끝 크기가 됩니다.

분명히 나는 ​​압축되지 않은 tar, 특히 GNU tar에 대해 이야기하고 있습니다. 나는 본 적이GNU tar 표준내가 읽고 있는 내용의 원래 블록 데이터를 보존하는 것처럼 보이지만 어쩌면 내가 읽고 있는 내용을 오해하고 있는 것일 수도 있습니다.

답변1

일반적으로 말하면 그렇지 않습니다. 이러한 종류의 중복 제거 기능을 제공하는 파일 시스템을 설계하는 것은 가능하지만 비용이 매우 높고 실질적인 이점이 거의 없기 때문에 실제로 구현된 적이 있는지 의심스럽습니다. 문제는 중복 제거가 다음에만 집중한다는 것입니다.조정범위.

파일 시스템 중복 제거는 일반적으로 블록 수준에서 발생합니다. 파일 시스템 드라이버는 블록을 저장하려고 할 때 블록 내용의 체크섬을 계산하고 테이블에서 체크섬을 찾습니다. 테이블에 이 체크섬이 있는 블록이 존재하지 않는다고 표시되면 블록이 저장되고 체크섬이 테이블에 추가됩니다. 테이블에 체크섬이 있는 경우 드라이버는 해당 체크섬이 있는 블록이 저장될 블록과 동일한지 확인합니다. 그렇다면 해당 블록에 대한 새 참조가 생성되고, 그렇지 않은 경우 블록이 추가됩니다.

보시다시피 블록을 작성할 때마다 비용이 발생합니다. 하지만 적어도 이 비용은 블록이 기록될 때마다 한 번만 지불하면 됩니다. 파일 1에 가 포함되어 있고 aaaabbbbcccc파일 2에 가 포함되어 있으며 aabbbbcccc블록 크기가 4인 경우 파일에 동일한 블록이 포함되어 있지 않으므로 중복 제거가 발생하지 않습니다. 파일 2가 파일 1에 포함되어 있는지 여부를 감지하려면 정렬된 블록에 대한 체크섬을 계산해야 하며 이는 비용이 많이 듭니다.

일반적으로 tar 파일의 파일 블록은 파일 시스템의 블록과 정렬되지 않습니다. tar 아카이브의 파일은 512(tar 블록 크기)의 배수인 모든 오프셋에서 시작할 수 있지만 대부분의 파일 시스템은 더 큰 블록 크기를 사용합니다. 아카이브 내의 파일 시작 부분이 파일 시스템 블록의 시작 부분과 일치하는 경우 기회가 주어지면 해당 파일은 중복 제거됩니다. 일반적인 파일 시스템 블록 크기는 이보다 크지만 512의 배수이므로 때때로 중복 제거가 발생합니다. 예를 들어 균일한 파일 크기 분포가 4096이라고 가정하면 4096바이트 블록에 대한 중복 제거는 약 8개(1:1)가 됩니다. 이는 완전히 정확하지 않으므로 확률은 실제로 더 작습니다.)

중복 제거의 일반적인 사용 사례는 동일하거나 거의 동일한 파일(예: 백업 복사본, 이전 버전의 파일 등)입니다. 변환된 파일은 일반적이지 않습니다. 압축되지 않은 아카이브는 특히 비정형적입니다.

관련 정보