du가 빈 디렉토리를 잘못 보고함

du가 빈 디렉토리를 잘못 보고함

나는 다음 명령을 사용하고 있습니다 :

du -sh --apparent-size ./*
du -sh ./*

둘 다 보고합니다:

4.0K    ./Lightroom_catalog_from_win_backup
432M    ./Lightroom catalog - wine_backup

그리고 이 디렉토리에는 다음이 포함됩니다.

$ll ./"Lightroom catalog - wine_backup"
total 432M
-rwxrwx--- 1 gigi gigi 432M Mar 18  2018 Lightroom 5 Catalog Linux.lrcat
-rwxrwx--- 1 gigi gigi  227 Nov 21  2015 zbackup.bat
$ll ./Lightroom_catalog_from_win_backup
total 396M
-rwxrwx--- 3 gigi gigi 396M Dec 17 09:35 Lightroom 5 Catalog Linux.lrcat
-rwxrwx--- 3 gigi gigi  227 Dec 17 09:35 zbackup.bat

du./Lightroom_catalog_from_win_backup이 보고되는 이유 는 무엇 4.0K이며 올바르게 보고하도록 하려면 어떻게 해야 합니까?

추신: 기타 시스템 정보:

$stat --file-system $HOME
  File: "/home/gigi"
    ID: 5b052c62a5a527bb Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 720651086  Free: 155672577  Available: 119098665
Inodes: Total: 183050240  Free: 178896289

$lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.5 LTS
Release:        16.04
Codename:       xenial

답변1

파일이 하드 링크인 경우 다음을 재현할 수 있습니다.

~ mkdir foo bar
~ dd if=/dev/urandom of=bar/file1 count=1k bs=1k
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00985276 s, 106 MB/s
~ ln bar/file1 foo/file1
~ du -sh --apparent-size foo bar
1.1M    foo
4.0K    bar

이는 예상된 동작입니다. ~에서GNU du문서:

두 개 이상의 하드 링크가 동일한 파일을 가리키는 경우 하드 링크 중 하나만 계산됩니다. 파일 매개변수 순서는 계산되는 링크에 영향을 미치며, 매개변수 순서를 변경하면 du가 출력하는 숫자와 항목이 변경될 수 있습니다.

중복된 크기의 하드 링크가 정말로 필요한 경우 다음 -l옵션을 시도해 보십시오.

' -l'
' 이미 (하드 링크로) 나타나는 경우에도 모든 파일의 크기를 계산합니다 --count-links.

~ du -sh --apparent-size foo bar -l
1.1M    foo
1.1M    bar

답변2

3두 파일의 링크 Lightroom 5 Catalog Linux.lrcat수도 기록해 두십시오 .zbackup.batLightroom_catalog_from_win_backup

이는 이 두 파일이 어딘가에 있는 다른 파일(추가 이름 포함)에 하드 링크되어 있음을 의미합니다. du디렉터리나 파일 집합에서 실행하는 경우 각 하드 링크는 한 번만 계산됩니다.

예:

$ ls -l
total 41024
-rw-r--r--  2 kk  wheel  10485760 Dec 17 09:07 file1
-rw-r--r--  2 kk  wheel  10485760 Dec 17 09:07 file2

$ du -h file1
10.0M   file1

$ du -h file2
10.0M   file2

$ du -h .
10.0M   .

이 동작은 다음으로 인해 발생합니다.du유틸리티용 POSIX 표준:

파일 피연산자 아래에서 여러 번 발생하고 링크 수가 1보다 큰 파일은 하나의 항목에 대해서만 계산되고 기록되어야 합니다.

일부 du구현에는 이 동작을 비활성화하는 비표준 옵션이 있습니다. GNU의 경우 du이는 -l옵션을 통해 수행됩니다.

답변3

거의 확실하게 잘 작동하고 있습니다. du각 파일은 참조 횟수에 관계없이 한 번만 계산됩니다. 두 디렉터리 모두 동일한 하드 링크 파일 세트를 포함하고 있을 가능성이 높습니다.

GNU 매뉴얼 페이지는 이 표준 최적화를 해제하는 방법을 du제공합니다 ( 구현에 이 최적화가 포함되어 있는지 확인 참조). 또는 각 디렉터리에 대해 한 번씩, 두 번 실행합니다 .-l--count-linksman dudu

관련 정보