NFSファイルサーバーとして使用するAmazon EC2インスタンスがあります。 5x1TBボリュームRAID0アレイを使用します。システムはI / O集約的であり、ファイルは常にNFS共有を介して作成/コピー/削除されます。私はしばしば使用されているディスク容量と空き容量の大きな違いを見つけます。 (システムがアイドル状態でファイル共有/システムにファイルが記録されていない場合に確認します)。これに対する唯一の「修正」は、インスタンスをシャットダウンして再起動することです(再起動しても機能せず、システムが停止するだけです)。再起動すると、実行され、fsck
システムログ(多く)で「参照されていない」inodeがクリーンアップされることがわかります(完全ログではありません)。
25.110924] EXT4-fs (dm-1): ext4_orphan_cleanup: deleting unreferenced inode 122291727
[ 25.114687] EXT4-fs (dm-1): ext4_orphan_cleanup: deleting unreferenced inode 122291723
[ 25.118610] EXT4-fs (dm-1): ext4_orphan_cleanup: deleting unreferenced inode 122291703
[ 25.135184] EXT4-fs (dm-1): ext4_orphan_cleanup: deleting unreferenced inode 122291722
[ 25.140005] EXT4-fs (dm-1): ext4_orphan_cleanup: deleting unreferenced inode 122291725
[ 25.144013] EXT4-fs (dm-1): ext4_orphan_cleanup: deleting unreferenced inode 122291705
[ 25.148008] EXT4-fs (dm-1): 735 orphan inodes deleted
[ 25.150286] EXT4-fs (dm-1): recovery complete
[ 26.126887] EXT4-fs (dm-1): mounted filesystem with ordered data mode. Opts: (null)
[ OK ]
オンラインで解決策が見つかりません。この問題の原因や予防方法を知っている人はいますか?または、ドライブをマウント解除せずに問題を解決できますか?
追加情報:
バージョン情報:
Linux version 3.10.42-52.145.amzn1.x86_64 (mockbuild@gobi-build-64003) (gcc version 4.8.2 20131212 (Red Hat 4.8.2-7) (GCC) ) #1 SMP Tue Jun 10 23:46:43 UTC 2014
RAID0 アレイは/etc/fstab
次のようにマウントされます。
/dev/vg0/data /data ext4 defaults,auto,noatime,noexec 0 0
/etc/mdadm.conf:
DEVICE /dev/xvdk /dev/xvdj /dev/xvdi /dev/xvdh /dev/xvdg
ARRAY /dev/md0 metadata=1.2 name=ip-172-31-10-215:0 UUID=4c4fb472:e0540788:69a83d01:a75a8a3e
/etc/export:
/data *(rw,sync)
クライアントは、次のようにNFS共有をマウントします。
x.x.x.x:/data /mnt/fileserver nfs defaults 0 0
答え1
あなたが説明する動作は、ファイルが削除されたにもかかわらず、アプリケーションがファイルを開いたままにしているために発生する可能性があります。あるアプリケーションがファイル(たとえばtail
)を開き、別のアプリケーションが表示されてファイル(たとえばrm
)を削除すると、最初のアプリケーションはそのアプリケーションがファイルを閉じるまでファイルへの参照を保持します。この時点で、ファイルシステムはファイルが削除され、どのアプリケーションでも開かれていないことを認識し、参照を消去します。
これは、ファイルとinodeがどのように関連しているかについての簡単な説明です。ファイルは、デフォルトで特定の inode に 1 つ以上の名前を割り当てるファイルシステムのレコードです。開いたファイルは実際にはinodeを通して参照されます。ファイルを削除すると、実際にはファイル名とinodeの間のリンクは削除されますが、開いたファイルは開いたファイル記述子とinodeの間のリンクも保持します。ファイルを閉じると、開いたファイル記述子と inode 間のリンクが削除されます。ファイルシステムは、すべてのリンクが削除されるまでinodeを回収しません。
ファイルシステムによって報告された空きスペースを見ると、現在使用されているとマークされているすべてのinodeに関連するスペースがわかります。すべてのディレクトリを見て、各ファイル/ディレクトリが使用するファイルスペースを合計すると、ファイルが削除されたがまだ開いている場合は少なくなります。ディレクトリ検索では、削除された名前リンクを含むファイルが使用するスペースを見ることはできません。
システムを強制終了すると、アプリケーションにファイルを閉じる機会は与えられません。このような機会がなければ、ファイルシステムは削除されたファイルの開かれたファイル記述子が使用するinodeを回収する機会がありません。システムが起動すると、ファイルシステムはこれらのinodeを見ることができますが、それを指すエントリはありません。これを「孤立 inode」といい、ファイルシステムがファイル参照を削除していることを伝えます。
開いたファイル記述子を持つプロセスを見つけるために使用できるツールがありますlsof
。プロセスでこのコマンドを実行すると、そのプロセスに対して開いているすべてのファイル記述子が表示されます。(deleted)
バージョンによって削除されたファイルは一般的にマークされます。