문제

보관하고있는 디렉토리가 있습니다.

$ du -sh oldcode
1400848
$ tar cf oldcode.tar oldcode

디렉토리는 1.4GB입니다. 그러나 파일은 훨씬 작습니다.

$ ls -l oldcode.tar
-rw-r--r-- 1 ieure ieure 940339200 2002-01-30 10:33 oldcode.tar

897MB 만. 어떤 식 으로든 압축되지 않습니다.

$ file oldcode.tar
oldcode.tar: POSIX tar archive

TAR 파일이 내용보다 작은 이유는 무엇입니까?

도움이 되었습니까?

해결책

파일 시스템의 작동 방식 때문에 차이가 있습니다.

간단히 말해서 디스크는 클러스터로 만들어집니다. 각 클러스터의 고정 크기는 -4 킬로바이트입니다. 1KB 파일을 클러스터에 저장하면 3KB가 사용되지 않습니다. 정확한 세부 사항은 사용하는 파일 시스템의 종류에 따라 다르지만 대부분의 파일 시스템은 그런 식으로 작동합니다.

3KB 낭비 공간은 단일 파일의 경우별로 많지 않지만 파일이 매우 작은 경우 폐기물이 디스크 사용의 중요한 부분이 될 수 있습니다.

Tar-archive 내부에서 파일은 클러스터에 저장되지 않고 차례로 저장됩니다. 그것이 그 차이가 나오는 곳입니다.

다른 팁

어떤 타르를 사용하고 있는지 또는 어떤 종류의 유닉스 시스템을 사용하고 있는지 알지 못합니다. 여기에 내 추측이 있습니다. OldCode에는 수많은 작은 파일이 포함되어 있습니다. 디스크 공간에 디스크 공간이 비효율적으로 사용될 때 디스크 공간이 어떤 종류의 블록으로 할당되기 때문입니다. 바이트에 의한 바이트보다는. TAR 파일에서는 연결이 발생하여 지정된 디스크 공간을 최대한 활용합니다.

이것은 파일 시스템의 블록 크기와 관련이 있습니다. 남자 1 du MacOSX 10.5.6 상태 :

DU 유틸리티는 파일 시스템을 표시합니다 블록 사용량 각 파일 인수와 각 디렉토리의 각 디렉토리에 대해 각 디렉토리 인수에 루팅 된 계층 구조. 파일이 지정되지 않으면 현재 디렉토리에 루팅 된 계층 구조의 블록 사용이 표시됩니다.

[mirko@borg foo]$ ls -la
total 0
drwxr-xr-x   2 mirko  wheel   68 Jan 30 21:20 .
drwxrwxrwt  10 root   wheel  340 Jan 30 21:16 ..
[mirko@borg foo]$ du -sh
0B  .
[mirko@borg foo]$ touch foo
[mirko@borg foo]$ ls -la
total 0
drwxr-xr-x   3 mirko  wheel  102 Jan 30 21:20 .
drwxrwxrwt  10 root   wheel  340 Jan 30 21:16 ..
-rw-r--r--   1 mirko  wheel    0 Jan 30 21:20 foo
[mirko@borg foo]$ du -sh
0B  .
[mirko@borg foo]$ echo 1 > foo
[mirko@borg foo]$ ls -la
total 8
drwxr-xr-x   3 mirko  wheel  102 Jan 30 21:20 .
drwxrwxrwt  10 root   wheel  340 Jan 30 21:16 ..
-rw-r--r--   1 mirko  wheel    2 Jan 30 21:20 foo
[mirko@borg foo]$ du -sh
4.0K    .

보시다시피 2 바이트 파일조차도 4KB의 전체 블록을 차지합니다. 이 공간 낭비를 피하는 파일 시스템이 있습니다. 블록 하위 할당.

2 가지 가능성이 있습니다.

작은 파일

아마도, 아마도 그렇지 않습니다 내용보다 작습니다. Nils Pipenbrinck가 쓴대로, du 파일 시스템 블록에 파일이 저장되기 때문에 파일 시스템이 할당하는 공간의 양을 표시합니다. 파일은 파일의 논리적 크기 이상입니다.

파일의 논리적 크기를 보려면 du --apparent-size. 이 경우 결과는 TAR 파일보다 작아야합니다.

드문 파일

TAR 파일은 희소 파일을 저장할 수 있습니다. Tarball이 사용하여 만들어진 경우 --sparse, 스파 스 파일의 구멍이 녹음되므로 타르 볼은 파일의 논리적 크기보다 작을 수 있습니다.

추출 된 사본의 Sparsense 정보가 어떻게 든 손실 된 경우 (예 : 스파 스 파일을 지원하지 않는 파일 시스템으로 타르 공을 추출한 경우 또는 ZIPPENT 및 UNZIPPENT 등). df 확장 된 크기를보고합니다.

DU는 파일 크기가 아닌 디스크 블록을 계산합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top