디스크에 있는 파일과 tar 아카이브에 있는 파일 간의 총 크기 차이

디스크에 있는 파일과 tar 아카이브에 있는 파일 간의 총 크기 차이

저는 새로운 Linux 사용자이고 아직 배우고 있습니다. 내가 아는 한, 이 명령은 ( 또는 등 옵션 tar없이 단독으로 ) 기본적으로 파일을 압축하지 않습니다. 여러 파일을 하나의 파일로 묶는 것뿐입니다. 아래는 내 테스트입니다.zjJ

root@u2004:~# du -sh /etc/
11M /etc/
root@u2004:~# tar cf etc.tar /etc
tar: Removing leading `/' from member names
root@u2004:~# du -sh etc.tar 
6.6M    etc.tar
root@u2004:~#

보시다시피 /etc디렉터리의 총 파일 수는 11M입니다. 단일 파일로 아카이브한 후 새 아카이브는 6.6M입니다. 크기 차이는 어디서 오는가? 파일이 계속해서 쓰여지고 뭉쳐서 그런걸까요?

답변1

기본적으로 du파일 크기는 "블록" 단위로 측정됩니다. 따라서 각 작은 파일(블록보다 작음)은 필요한 만큼의 블록을 차지하고 나머지는 비어 있습니다. 하지만 다른 파일에서는 사용할 수 없습니다(블록은 하나의 파일에만 속할 수 있기 때문입니다). 따라서 일부 바이트를 "낭비"하게 됩니다.

반면에 tar모든 파일을 연결하십시오. "낭비되는" 공간이 훨씬 적습니다.

-btar 크기를 더 잘 예측 하려면 du키를 사용할 수 있습니다.

당신이 달리면 의미

$ du -shb /etc
$ du -shb etc.tar 

차원이 서로 더 가까운 숫자를 얻게 됩니다. 차이점은 파일 설명에서 비롯됩니다. 첫 번째 경우는 디렉터리의 크기이고, 두 번째 경우는 tar 헤더의 크기입니다.

더 자세히 연구하려면 다음과 같이 시작할 수 있습니다.

$ df /some_test_dir

디렉터리가 어떤 물리적 장치에 있는지 알려줍니다(파일 시스템 열).

$ sudo /sbin/dumpe2fs /dev/?? |grep 'Block size'

여기에서 장치를 정의하면 해당 장치의 블록 크기를 얻을 수 있습니다.

이렇게 하고 du /some_test_dir디렉토리가 비어 있으면 블록 크기를 얻게 됩니다.

이제 길이가 0인 파일(또는 여러 파일)을 배치하면 du블록 크기는 여전히 디렉토리에 제공됩니다. 이는 파일이 공간을 전혀 차지하지 않고 파일에 대한 정보가 저장되기 때문입니다. 디렉토리의 블록 내부에 있습니다.

다음 테스트를 위해 이 디렉터리에 각각 크기가 1블록 미만인 N개의 파일을 만듭니다. 실제 크기는 중요하지 않습니다. 0보다 크고 블록보다 작아야 합니다. 이제 du목차를 알려드리겠습니다 (N+1)*block. 여기서 각 파일은 한 블록을 차지하고 디렉터리 자체도 한 블록을 차지합니다.

파일이 많은 경우(수는 파일 시스템에 따라 다름) 파일 정보를 저장하기 위해 디렉터리 자체의 크기가 커질 수 있습니다. 그러나 디렉터리 크기는 항상 블록 크기의 배수입니다.

관련 정보