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>