先日、おもしろい状況に遭遇しました。/backupに1TBのNFSファイルシステムをマウントしています。 df
は、予想どおり、合計サイズが約1TBであると報告しました。
ただし、/ backup /.snapshotディレクトリでdu -csh .
を実行すると、3.0 TBのデータが報告されました。
マウントポイントよりも合計サイズが大きいduプロデュース出力を見たことがありません。このNFS共有は、NetAppアプライアンスによって提供されます。 .snapshotディレクトリは、スペースの5%を使用するように構成されたNetAppafaikによって作成されます。 (もちろん、スペースの300%を使用することはできません)
では、これはLinuxの問題、NFSの問題、NetAppの問題、またはその他の問題ですか?他にどのようなデータを提供できますか?
OSはCentOS6です。
NetAppを使用してからしばらく経ちますので、絶対的な権限でお答えすることはできませんが、このような動作については説明できます。
これは、LinuxのLVMの動作と非常によく似た動作をしているように聞こえます。 1TBの物理ディスクがあり、その100%がLVMボリュームグループにマップされているとします。次に、そのボリュームグループに100GBの論理ボリュームを作成します。いくつかの作業を行ったり、ファイルを配置したりします。次に、その論理ボリュームのスナップショットを作成します。これで、論理ボリューム上で変更されたファイル(実際にはブロック)がコピーされ、スナップショットが元のデータにアクセスできるようになります。ただし、このスナップショットを取得して、通常のボリュームのようにマウントすることもできます。これをマウントすると、2つの100GBファイルシステムがマウントされます。ただし、2つのファイルシステムは、一方のデータが変更されるまで、同じデータ(物理ボリュームブロック)を共有します。
したがって、NetAppが実行している可能性が高いのは、/backup/.snapshot
ディレクトリを介してこれらのスナップショットにアクセスできるようにすることです。分析すると、各スナップショットは元のボリュームと同じサイズのように見えます。
これは奇妙に思えるかもしれませんが、(NFS、カーネルなどの点で)完全に合法です。 df
を実行すると、システムは「このファイルシステムの大きさ」を示すNFS呼び出しを行い、リモートシステムは必要に応じて応答できます。次に、du
を実行すると、システムはNFS呼び出しを行い、「このファイルの大きさ」を通知します。これに対して、リモートシステムは必要に応じて応答できます。
スパースファイルでも同様の(ただし同じではない)ことを行うことができます。このファイルは、実際よりも多くのスペースを占有していると言われています。
最近では、ファイルシステムのスペースを節約するための高度な方法がたくさんあります。 「どのくらいのスペースがありますか」または「このファイルがどのくらいのスペースを占めるか」という質問には、必ずしも簡単な答えがあるとは限りません。スナップショット、重複排除、透過的圧縮などを行うことができます。