ZFS圧縮を使用したファイルサイズ


9

通常、を使用してディレクトリツリー全体のサイズを見積もりますが、du -ks $DIRECTOY_TREE_ROOTこの方法はzfs圧縮がオンの場合は使用できません。

totalで表示されるには、ls -l単一のディレクトリのためにOKですが、ディレクトリツリーの同じ結果を得るための最も簡単な方法はありますか?

編集:

オペレーティングシステムは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」オプションが存在しないという事実にもかかわらずdu...
jlliagre

Solaris 11では、次の方法で機能しますgdu -bsh foldername
コピーランスタート

3

コマンド 'find'からパラメーター '-ls'を使用して、ファイルサイズとおおよそのディスク使用量を直接取得することが可能です。

 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の両方の合計が報告しているディスクで使用されたサイズではありません。
jlliagre 2011

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

かもしれない。ただし、Solaris Express 11にはあります。
the-wabbit 2011

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.