du -s --외견 크기 VS du -s

du -s --외견 크기 VS du -s

누군가 다음의 차이점을 말해 줄 수 있습니까?

du -s dir 
3705012 dir

du -s --apparent-size dir
3614558 dir

이러한 디렉터리는 블록 장치(cryptsetup을 사용하여 생성됨) 내에 위치합니다. 또는 더 나은 방법: 암호화된 블록 장치 내부의 파일에 대해서만 --apparent-size를 추가해야 하는 이유는 무엇입니까?

답변1

파일의 "겉보기 크기"는 파일에 실제로 얼마나 유효한 데이터가 있는지를 나타냅니다. 파일에서 읽을 수 있는 실제 데이터 양입니다. 블록 지향 장치는 바이트가 아닌 블록만 저장할 수 있습니다. 따라서 디스크 사용량은 항상 다음으로 높은 블록으로 반올림됩니다. 이 경우 "블록"은 파일 시스템이 공간을 할당하는 방식에 따라 저장 장치의 물리적 블록과 같지 않을 수도 있습니다.

암호화된 장치의 경우 파일 시스템은 암호화/암호 해독 정보를 지원하기 위한 오버헤드를 포함하는 데 사용되는 공간만큼 확장될 수 있습니다. 또한 파일 끝과 파일이 포함된 블록 끝 사이의 사용되지 않는 공간을 암호화하거나 무작위화하여 파일이 더 크게 보일 수도 있습니다 du.

이 중 어느 것도 암호화된 파일 시스템에서 지원하지 않을 수 있는 스파스 파일 처리를 고려하지 않습니다.

답변2

최소 블록 세분성 예시

그것을 가지고 놀면서 무슨 일이 일어나는지 봅시다.

mount내가 마운트된 ext4 파티션에 있다고 알려줍니다 /.

블록 크기를 찾았습니다.그리고:

stat -fc %s .

이것은 만든다:

4096

이제 다음과 같은 크기의 파일을 만들어 보겠습니다 1 4095 4096 4097.

#!/usr/bin/env bash
for size in 1 4095 4096 4097; do
  dd if=/dev/zero of=f bs=1 count="${size}" status=none
  echo "size     ${size}"
  echo "real     $(du --block-size=1 f)"
  echo "apparent $(du --block-size=1 --apparent-size f)"
  echo
done

결과 :

size     1
real     4096   f
apparent 1      f

size     4095
real     4096   f
apparent 4095   f

size     4096
real     4096   f
apparent 4096   f

size     4097
real     8192   f
apparent 4097   f

따라서 우리는 그 이하이거나 같은 것이 4096실제로 바이트를 차지한다는 것을 알 수 있습니다.4096

그리고 일단 넘어가면 까지 올라 4097갑니다 .81922 * 4096

분명히 디스크는 항상 바이트 블록 경계에 데이터를 저장합니다 4096.

스파스 파일은 어떻게 되나요?

정확한 표현이 무엇인지는 조사하지 않았지만 분명히 고려하고 있습니다 --apparent.

이로 인해 겉보기 크기가 실제 디스크 사용량보다 커질 수 있습니다.

예를 들어:

dd seek=1G if=/dev/zero of=f bs=1 count=1 status=none
du --block-size=1 f
du --block-size=1 --apparent f

다음을 제공합니다:

8192    f
1073741825      f

관련된:https://stackoverflow.com/questions/38718864/how-to-test-if-sparse-file-is-supported

여러 개의 작은 파일을 저장하고 싶다면 어떻게 해야 하나요?

몇 가지 가능성은 다음과 같습니다:

서지:

우분투 16.04에서 테스트되었습니다.

관련 정보