du가 포함된 폴더의 크기

du가 포함된 폴더의 크기

rsync포함 심볼릭 링크, 하드 링크, 권한, 대상 파일 삭제 등을 사용하여 폴더를 복사했습니다. 그것들은 매우 유사해야 합니다.

한 폴더는 USB 드라이브에 있고 다른 폴더는 로컬 디스크에 있습니다.

두 폴더 모두에서 다음을 실행 하면 du -bls크기가 약간 다릅니다.

du지원은 하드 링크로 적용 --apparent-size되며 하드 링크의 내용을 계산해야 합니다.-s-l

이 차이를 설명하는 방법과 실제 합계를 얻는 방법은 무엇입니까?

두 파일 시스템 모두 ext4이며 유일한 차이점은 USB 드라이브가 암호화된다는 것입니다.

편집하다:

실제로 다른 폴더를 찾기 위해 더 깊이 파고 들었고 하나를 찾았습니다. 내용은 특별하지 않았습니다(블록 장치 없음, 파이프 없음, 하드 또는 심볼릭 링크 없음, 0바이트 파일 없음). 특별한 점은 아마도 여러 개의 작은 파일이 있습니다. . 이 특정 폴더의 차이점은 872830과 881022입니다.

또한 du -blsc두 폴더 모두에서 실행했는데 이 경우 결과는 동일합니다.

내가 사용한 명령에 대한 추가 세부 정보는 다음과 같습니다.

$ du -Pbsl $LOCALDIR $USBDIR | cut -f1
872830
881022

$ du -Pbslc $LOCALDIR/*
[...]
868734  total

$ du -Pbslc $USBDIR/*
[...]
868734  total

$ ls -la $USBDIR | wc
    158    1415    9123
$ ls -la $LOCALDIR | wc
    158    1415    9123

$ diff -sqr --no-dereference $LOCALDIR $USBDIR | grep -v identical
[No output and all identical if I remove the grep]

답변1

를 사용하여 파일을 복사한 rsync다음 를 사용하여 두 파일 세트를 모두 비교했으며 보고된 차이점이 diff없으므로 diff두 파일 세트는 모두 동일합니다.

크기 차이는 두 디렉터리 구조의 실제 디렉터리 노드 크기로 설명될 수 있습니다. 일부 파일 시스템에서는 파일이나 하위 디렉터리가 삭제되면 디렉터리가 잘리지 않고 실제로 필요한 것보다 약간 더 큰 디렉터리 노드가 남습니다.

나중에 삭제된 많은 파일을 어느 시점에 보관했다면 큰 디렉터리 노드가 남을 수 있습니다.

예:

$ mkdir dir
$ ls -ld dir
drwxr-xr-x  2 kk  wheel  512 May 11 17:09 dir
$ touch dir/file-{1..1000}
$ ls -ld dir
drwxr-xr-x  2 kk  wheel  20480 May 11 17:09 dir
$ rm dir/*
$ ls -ld dir
drwxr-xr-x  2 kk  wheel  20480 May 11 17:09 dir
$ du -h .
20.0K   ./dir
42.0K   .
$ ls -R
dir

./dir:

생성한 1000개의 파일을 삭제하더라도 디렉터리는 dir여전히 20KB를 사용합니다.

답변2

파일 시스템 블록 크기를 확인했습니까? 두 장치가 모두 동일한 파일 시스템을 사용하더라도 블록 크기가 다를 수 있으며 이는 "약간 다른" 크기를 설명할 수 있습니다.

예를 들어, 8KiB 블록 크기를 사용하도록 설정된 파일 시스템이 있는 장치에 1KiB 파일 묶음을 저장하면 사용된 각 블록에 대해 7KiB가 낭비됩니다. 이 경우 파일이 디스크에서 가져오는 실제 크기는 파일 자체의 크기가 아니라 사용된 블록의 크기입니다(각 블록에 여러 파일을 저장하는 도구가 없는 경우). 다양한 장치의 블록 크기를 확인하려면 다음 명령을 사용해 보세요.

# blockdev --getbsz <DEVICE>

관련 정보