dfコマンドで出力したサイズを超えたduの計算結果の原因を求める


Linuxで下記のような事象に遭遇しました。ご存じの方は教えて欲しいです。

### 事象

`df -h` コマンドでマウントしているボリュームが50GBのサイズを有している

`du -h` コマンドでマウントしているディレクトリの総サイズを調べてみたら、59GBでした。

### 質問1

何故duで計算した結果はボリュームのサイズを超えたか？

### 質問2

この二つのコマンドの計算が違うか？

### 試したこと

  * duのハードリンク、シンボルリンクと辿らないようなオプションを付ける
  * findコマンドでtypeがfの全部を探して、duで個々のサイズを計算し、総量を出す

### 想像した原因

  1. ハードリンク、シンボルリンクが数回duによって計算された  
→ findでファイルだけ出して計算しても同じなので、関係なさそう

  2. 該当ディレクトリのしたにまたは別のボリュームがマウントしている  
→ なかった

  3. Windowsのような、ファイルを圧縮して保存という機能が有効  
→ 不明




思いつくのはこれくらいですね。

  1. オープンしたまま削除されたファイルが存在している。  
`lsof /path/to/mount/point |grep '(deleted)$`

  2. 拡張属性 (SELinux ラベルも含む) が大量に付与されているファイルが多数存在する。

`getfattr --recursive --no-dereference --dump /path/to/mount/point`

  3. ACL が大量に付与されているファイルが多数存在する。

`getfacl --recursive /path/to/mount/point`

  4. ファイルシステムが壊れている。

多くの場合は 1、稀に 4 はあるかと思いますが、2 と 3 は見たことありません。  
ちなみに拡張属性と ACL は、少ない数とサイズであれば、inode 内に保存されます。(ファイルシステムの種類と inode サイズに依る。Linux
なら XFS や ext4)

