디렉토리의 전체 크기를 계산하는 방법과 'du' 출력이 디렉토리 복사본마다 다른 이유는 무엇입니까?

디렉토리의 전체 크기를 계산하는 방법과 'du' 출력이 디렉토리 복사본마다 다른 이유는 무엇입니까?

여기에 분명히 뭔가가 빠져 있기 때문입니다.

 $ cp -a CENTOS-chroot 1
 $ cp -a CENTOS-chroot 2
 $ cp -a CENTOS-chroot 3
 $ cp -a CENTOS-chroot 4
 $ du --block-size=1 -s 1 2 3 4
6320304128  1
6320304128  2
6320234496  3
6320238592  4

이것은 내가 가지고 있는 두 대의 Linux 시스템(Manjaro 및 Centos7)에 ext4가 있는 HDD 및 NVME SSD 모두에서 발생합니다.

답변1

명백한 du"파일 크기" 수준... 보세요 --apparent-size.

--apparent-size

디스크 사용량이 아닌 겉보기 크기를 인쇄합니다. 겉보기 크기는 일반적으로 더 작지만 ('희소') 파일의 구멍, 내부 조각화, 간접 블록 등으로 인해 더 커질 수 있습니다.

-b주는 것보다 더 나은 옵션이 될 수 있는 도 참조하십시오 .--block-size=1 그리고 --apparent-size함께:

-b,--bytes

에 해당--apparent-size --block-size=1

... 그러면 du -bs ${dir}더 나은 결과가 나오나요?


대부분/모든 파일 시스템이 고정 크기 블록을 기반으로 한다는 점을 고려하면 "파일 크기"(즉, 파일에서 읽을 수 있는 바이트 수)는 디스크에서 사용되는 실제 공간(예: 이 파일과 해당 메타데이터를 저장하는 데 사용되는 바이트 수)과 다릅니다.

예를 들어:

  • 작은 파일은 일반적으로 파일보다 더 많은 공간을 사용합니다."~해야 한다"... 4KiB 블록이 있는 파일 시스템에서는 1바이트만 저장하더라도 파일이 4KiB 미만의 디스크 공간을 사용하도록 하는 것은 불가능합니다.
  • 대용량 파일은 일반적으로 여러 개의 "범위"... 익스텐트는 파일의 일부에 대한 데이터를 찾을 위치를 설명합니다. 익스텐트는 디스크 공간도 소비합니다.
    • 조각화(예: 사용되지 않은 공간의 큰 간격)가 없는 파일 시스템에서는 "크기가 큰" 파일에는 익스텐트가 하나만 있습니다.
    • 조각화가 많은 파일 시스템(예: 데이터가 여기저기에 많고 데이터 사이에 작은 간격이 남음)에서는 "크기가 큰" 파일에는 실제로 데이터가 저장되는 위치를 나타내는 데 사용되는 여러 범위가 있을 수 있습니다.

이는 전적으로 파일이 디스크에 배치된 순서와 연속된 여유 공간 블록을 찾는 데 사용되는 알고리즘에 따라 달라집니다.

잘 플레이된 테트리스 보드처럼 완벽하게 테셀레이션되도록 모든 파일을 지속적이고 신중하게 재배열하는 매우 공간 효율적인 파일 시스템을 가질 수 있습니다. 파일 시스템은 적절한 공간을 검색하는 데 많은 시간을 소비하게 되고 성능이 크게 저하됩니다.

마찬가지로, 첫 번째 사용되지 않은 블록만 사용하고 사용된 블록은 건너뛰는 매우 조각화 지향적인 파일 시스템을 가질 수 있습니다. 첫 번째 간격으로 데이터를 작성하면 성능이 저하될 수도 있습니다.

대신에 우리는 균형을 맞추고 지출하는 것을 선호합니다.일부시간 (하지만 너무 많지는 않아) 쓰려는 데이터 전체를 포함하는 사용되지 않은 연속 공간 블록을 찾습니다.

파일의 조각화 수준은 복사 명령이 실행된 순서와 직접적으로 연관되지 않습니다. 부분적으로는 "시도하되 너무 힘들지는 마세요." 위에 설명된 접근 방식을 사용합니다.


요약하자면, 이 두 디렉터리에 저장된 데이터는 동일해야 하지만 디스크 사용량(예:동일한 데이터) 완벽하게 일치할 가능성은 거의 없습니다.

저장된 데이터가 동일한지 확인하는 옵션은 여러 가지가 있습니다. 시도해 보세요 diff(출력이 좋지 않으면 변경 사항이 보고됩니다).

diff -qr "${src}" "${dst}"

이를 더욱 복잡하게 만들기 위해 스파스 파일이 다음을 사용할 수 있습니다.상당히예상보다 적음:

$ truncate -s 100M x
$ ls -l x
-rw-r--r-- 1 attie attie 104857600 Jul 14 17:15 x
$ du --block-size 1 x
0       x
$ du -bs x
104857600       x

답변2

ext4 파일 시스템의 블록 및 범위 레이아웃은 파일 시스템의 채우기 속도 및 조각화에 따라 달라집니다.

이는 더 많은 파일이 있는 파일 시스템이 빈 파일 시스템보다 추가 파일을 위해 (약간) 다른 공간을 사용할 가능성이 있음을 의미합니다. 귀하의 경우 네 번째 복사본이 첫 번째 복사본보다 더 많은 공간을 차지하게 됩니다.

관련 정보