du と find -ls

du と find -ls

NFS 経由でリモート ファイルシステムをマウントした Solaris 10 サーバーがあります。リモート システムは NetApp だと思いますが、はっきりしません。

実行すると、df -h <mountpoint>サイズ 12T が取得され、容量が 87% の 10T が使用されました。

マウントポイントに変更して実行すると、ls -A |xargs du -s約 8 MB になります。du は再帰的に降下してすべてのファイル サイズを合計することを期待していましたが、ここではそうではないようです。

ヘッジとして、私は走った

find <mountpoint> -ls | awk '{total=total+$7}END{print total}'

答えは 13006791645 です。1024^3 (1073741824) で割ると、約 12.1 テラバイトになります。

find -lsしたがって、と はdf多かれ少なかれ一致しているように見えます。なぜ du はそれほどひどく失敗するのでしょうか?

PS: コマンドはls -A隠しスナップショット ディレクトリも取得しますが、何も見つかりません (「サイクルが検出されました」を除く)。

答え1

du -sは 512 バイトのブロックでレポートします。 は人間が判読できるデータをレポートしないdf -hため、 との比較はできません。du

両方の値を比較するには、 または を使用して、du -sh <mountpoint>512バイト単位でもレポートできる/usr/xpg4/bin/df -Pようにします。df

によるとman du

複数のリンクを持つファイルは、1 つのエントリのみカウントされ、書き込まれます。レポートで選択されたディレクトリ エントリは指定されていません。デフォルトでは、ファイル サイズは 512 バイト単位で書き込まれ、次の 512 バイト単位に切り上げられます。

/usr/xpg4/bin/df -P次のように報告された 512 バイトを取得してみてくださいdf:

bash-3.2$ /usr/xpg4/bin/df -P /var
Filesystem            512-blocks        Used   Available Capacity  Mounted on
rpool/ROOT/s10/var
                      1147797504    66061270   954397119     7%    /var

以下と比較してくださいdu -s:

bash-3.2$ du -s /var
65976060        /var

あるいは比較してみましょう:

bash-3.2$ df -h /var              
Filesystem             size   used  avail capacity  Mounted on
rpool/ROOT/s10x_u11wos_24a/var
                       547G    32G   455G     7%    /var

と:

bash-3.2$ du -hs /var   
  31G   /var

関連情報