zfs 압축을 사용한 파일 크기


9

나는 보통을 사용하여 전체 디렉토리 트리의 크기를 추정 du -ks $DIRECTOY_TREE_ROOT하지만 zfs 압축이 켜져 있으면이 방법을 사용할 수 없습니다.

total에 의해 표시는 ls -l하나의 디렉토리에 대한 확인하지만, 디렉토리 트리에 대해 동일한 결과를 얻을 수있는 가장 간단한 방법은 무엇입니까?

편집하다:

운영 체제는 Solaris 10입니다.

디스크에서 사용되는 공간이 아닌 실제 파일 크기를 찾고 있습니다.


디스크에서 실제 사용 된 공간 또는 실제 파일 크기를 찾고 있습니까?
justarobert

답변:


5

이것은 작동해야합니다.

find . -type f -exec ls -l {} + | nawk '{s=s+$5}
END {print s}'

12

du -b 예제를 사용하십시오 .

# du -sh .
215G    .

# du -sbh .
344G    .

Solaris 10에는 "-b"옵션이 없다는 사실에도 불구하고 12 개의 투표du
jlliagre

Solaris 11에서는 다음을 통해 작동합니다.gdu -bsh foldername
Copy Run Start

3

'-ls'매개 변수를 사용하여 'find'명령에서 파일 크기와 대략적인 디스크 사용량을 각각 얻을 수 있습니다.

 function lsdu() (
    export SEARCH_PATH=$*
    if [ ! -e "$SEARCH_PATH" ]; then
        echo "ERROR: Invalid file or directory ($SEARCH_PATH)"
        return 1
    fi
    find "$SEARCH_PATH" -ls | gawk --lint --posix '
        BEGIN {
            split("B KB MB GB TB PB",type)
            ls=hls=du=hdu=0;
            out_fmt="Path: %s \n  Total Size: %.2f %s \n  Disk Usage: %.2f %s \n  Compress Ratio: %.4f \n"
        }
        NF >= 7 {
            ls += $7
            du += $2
        }
        END {
            du *= 1024
            for(i=5; hls<1; i--) hls = ls / (2^(10*i))
            for(j=5; hdu<1; j--) hdu = du / (2^(10*j))
            printf out_fmt, ENVIRON["SEARCH_PATH"], hls, type[i+2], hdu, type[j+2], ls/du
        }
    '
)

일부 샘플 명령 및 출력 :

-bash-3.00# lsdu test_sloccount/
Path: test_sloccount/ 
  Total Size: 30.90 MB 
  Disk Usage: 1.43 MB 
  Compress Ratio: 21.6250 

2

이 oneliner는 원하는 결과를 산출해야합니다.

find $DIRECTOY_TREE_ROOT -type d -exec ls -l '{}' \; | awk '/^total\ .[0-9]+$/ { sum+=$(NF) }END{ print sum }'

테스트 할 ZFS 파티션이 없지만 ext4 파티션에서와 동일한 결과를 출력합니다 du -ks.


du와 ls total이 모두보고하는 디스크에서 사용 된 파일이 아니라 실제 파일 크기를 요청하도록 질문이 편집되었습니다.
jlliagre

2

man du는 아마 여기에 도움이 될 것입니다 :

 --apparent-size
      print apparent sizes, rather than disk usage;  although
      the  apparent size is usually smaller, it may be larger
      due to holes in (`sparse') files,  internal  fragmenta-
      tion, indirect blocks, and the like

Solaris 10 du에는 이러한 옵션이 없습니다. 비표준 Gnu 확장입니다.
jlliagre

아마도. 그러나 솔라리스 익스프레스 11에는 있습니다.
the-wabbit

4
Solaris 10은 Gnu du를 번들로 제공하지 않습니다. Solaris 11 Express에는 --apparent-size 옵션을 지원하지 않는 / usr / bin / du와이를 지원하는 / usr / gnu / bin / du가 있습니다.
jlliagre

2

완전성을 기하기 위해 FreeBSD에 대한이 질문에 대한 답을 포함시킬 것입니다. 에 따르면 man du:

 -A      Display the apparent size instead of the disk usage.  This can be
         helpful when operating on compressed volumes or sparse files.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.