Database JUNKY

MySQL,MariaDBを中心としたブログです

NFSでのディスクフォーマットって何を使っている??

一般的な家庭でファイルサーバを構築し、利用する上ではなんも問題ないですが、たとえば企業で、NASを購入するのはまだ早いとかの理由で、LinuxNFSサーバを作ってみました的なノリで運用した場合、今一度フォーマットに何を選択したのか?ご確認をしたほうが良いかもしれません。

nfsクライアントの仕様としては、ファイルの更新をタイムスタンプで管理しており、該当ファイルのタイムスタンプ(ctime)を元にNFSサーバ側と照合し、ファイルのサイズ、ファイル名、ファイルのタイムスタンプ等を元に秒単位での差異があれば、NFSサーバからファイルを再取得しますが、変更がない場合は、NFSクライアントのキャッシュからファイルを返します。

この秒単位でというのがポイントで、ファイルのタイムスタンプを、ナノ秒まで管理できていれば当該問題は発生しないのですが、ext3のフォーマットですと、ファイル作成時間を、秒までしかもてません。ナノ秒まで管理するためには、ext3ではなくext4かXFSフォーマットを利用します。 ただし、ext4はまだ、世間にあまり出回っておりません。

話をNFSに戻しますと、一秒間の間に、同じサイズの同じファイルを、リードライトした場合、期待したものと違う結果が戻ってくる危険性があります。 上記の理屈でいうと、たとえば、複数のクライアントから、a.txtというテキストファイルに1秒の範囲内で、同時に違う内容を書き込んだら?言葉でいうと難しいですが

例を挙げますと

12:10:12 CLIENT1のNFS CLIENTから/data に echo "ABC" > /data/test.txt 12:10:12 CLIENT2のNFS CLIENTから/data に echo "CBA" > /data/test.txt 12:10:12 CLIENT3のNFS CLIENTから/data に cat /data/test.txt

仮に、CLIENT3の結果が、ABC だったと過程すると NFSサーバでは、CBAとなっているのにずっと、ABCの内容しか見れないといった状態になってしまいます。

この状態からをCLIENT3から本来のCBAの内容を閲覧したいのであれば、方法は一つ・・・CLIENT2のNFS CLIENTを再起動するしか手がありません。