폴더를 .tar.gz 아카이브로 압축했습니다. 포장을 풀고 나면 부피가 거의 두 배로 늘어납니다.
du -sh /path/to/old/folder = 263M
du -sh /path/to/extracted/folder = 420M
나는 많이 검색한 결과 tar가 실제로 메타데이터를 추가하거나 다른 이상한 작업을 수행함으로써 이 문제를 일으키는 것을 발견했습니다.
md5sum 뿐만 아니라 폴더 안의 파일 2개를 비교했습니다. 전혀 차이가 없으며 체크섬은 정확히 동일한 값입니다. 그러나 하나의 파일 크기는 원본 파일 크기의 두 배입니다.
root@server:~# du -sh /path/to/old/folder/subfolder/file.mcapm /path/to/extracted/folder/subfolder/file.mcapm
1.1M /path/to/old/folder/subfolder/file.mcapm
2.4M /path/to/extracted/folder/subfolder/file.mcapm
root@server:~# diff /path/to/old/folder/subfolder/file.mcapm /path/to/extracted/folder/subfolder/file.mcapm
root@server:~#
root@server:~# md5sum /path/to/old/folder/subfolder/file.mcapm
root@server:~# f11787a7dd9dcaa510bb63eeaad3f2ad
root@server:~# md5sum /path/to/extracted/folder/subfolder/file.mcapm
root@server:~# f11787a7dd9dcaa510bb63eeaad3f2ad
저는 다른 접근 방식을 찾고 있는 것이 아니라 이러한 파일의 크기를 다시 원래 크기로 줄이는 방법을 찾고 있습니다.
어떻게 해야 하나요?
답변1
[이 답변은 GNU tar 및 GNU cp를 가정합니다.]
전혀 차이가 없으며 체크섬은 정확히 동일한 값입니다. 그러나 하나의 파일 크기는 원본 파일 크기의 두 배입니다.
1.1M /path/to/old/folder/subfolder/file.mcapm 2.4M /path/to/extracted/folder/subfolder/file.mcapm
파일 .mcapm
은 다음과 같을 수 있습니다.부족한. 아카이브 생성 시 -S
( ) 옵션을 사용하세요 --sparse
.tar
예:
$ dd if=/dev/null seek=100 of=dummy
...
$ mkdir extracted
$ tar -zcf dummy.tgz dummy
$ tar -C extracted -zxf dummy.tgz
$ du -sh dummy extracted/dummy
0 dummy
52K extracted/dummy
$ tar -S -zcf dummy.tgz dummy
$ tar -C extracted -zxf dummy.tgz
$ du -sh dummy extracted/dummy
0 dummy
0 extracted/dummy
나중에 다음을 사용하여 파일을 "다시 희소화"할 수도 있습니다 cp --sparse=always
.
$ dd if=/dev/zero of=junk count=100
...
$ du -sh junk
52K junk
$ cp --sparse=always junk junk.sparse && mv junk.sparse junk
$ du -sh junk
0 junk
답변2
@mosvy는 파일이 희박할 수 있다고 지적했습니다. 다시 아카이브하고 tar --sparse
작업을 추출하거나 다음을 수행할 수 있습니다.파일 시스템의 기존 파일을 다시 희소하게 만들려면 다음 명령을 사용하십시오.
fallocate -d
(util-linux에서) 내부 홀 펀칭.
for f in **/*some*pattern*;do
fallocate --dig-holes "$f"
done
이것매뉴얼 페이지이 옵션을 다음과 같이 설명하세요.
이 옵션을 작업을 수행
cp --sparse
한 다음 추가 디스크 공간 없이 대상 파일의 이름을 원본 파일로 바꾸는 것으로 처리할 수 있습니다.
리눅스 지원fallocate(2)
시스템 호출을 사용하면 범위를 구멍으로 바꾸는 대신 파일의 페이지 크기 구멍을 닫거나 확장하여 파일을 줄이거나 늘리는 등의 멋진 기능을 사용할 수 있습니다. 이는 기본 FS가 다양한 Fallocate 기능을 각각 지원하는지 여부와 일반적으로 스파스 파일/범위를 지원하는지 여부에 따라 다릅니다.
또한 예를 들어 조각화를 방지하기 위해 토렌트를 다운로드하기 전에 기록되지 않은 범위(홀과 유사하지만 디스크 공간을 예약)를 사전 할당할 수 있습니다. 이름의 "배포"는 여기서 유래되었습니다.
util-linux가 실행될 수 있는 다른 커널은 IDK라는 이 기능의 일부 또는 전부를 지원할 수 있습니다. 그게 작동하지 않으면cp --sparse
많은사전 할당된 범위, 구멍 뚫기, 특히 기존 데이터 간의 구멍 확장 또는 축소보다 훨씬 더 뛰어납니다.