たまたま、下記のページを見つけた。
NFS3(非同期)の場合、
- NFSサーバ側で、常にデータをファイルに書き込む。
- NFSクライアント側で、tail コマンドでデータを読み込む。
NFSクライアントがデータをNULL(0x00)で置き換えることがあるそうです。
ファイルの属性情報とNFSキャッシュのデータがずれることが原因みたい。
そんなことあるのか? と思い、CentOS6で試してみました。
NFSサーバの設定は以下のようにします。
[root@pm01 ~]# cat /etc/exports /data 10.1.0.0/24(rw,no_root_squash,async,wdelay)NFSサーバ側で以下のように実行して、0.1 秒間隔で 10個のファイルに "abc" を書き込みます。
[root@pm01 ~]# for f in /data/file{00..09}; do while true; do echo 'abc' >> ${f}; sleep .1; done & done [1] 2356 [2] 2357 [3] 2358 [4] 2359 [5] 2360 [6] 2361 [7] 2362 [8] 2363 [9] 2364 [10] 2365 [root@pm01 ~]#NFSクライアント側では、NFSver3 でマウントし、rsize/wsize を大きい値に設定します。
マウント後、tail コマンドを実行して、ファイルを監視すると、NULL(0x00)が出ました。(赤字部分)
[root@pm02 ~]# mount -t nfs -o nfsvers=3,rsize=32768,wsize=32768 10.1.0.71:/data /mnt [root@pm02 ~]# for f in /mnt/file{00..09}; do tail -f ${f} | hexdump -C & done [1] 2498 [2] 2500 [3] 2502 [4] 2504 [5] 2506 [6] 2508 [7] 2510 00000000 61 62 63 0a 61 62 63 0a 61 62 63 0a 61 62 63 0a |abc.abc.abc.abc.| * 00000000 61 62 63 0a 61 62 63 0a 61 62 63 0a 61 62 63 0a |abc.abc.abc.abc.| * 00000000 61 62 63 0a 61 62 63 0a 61 62 63 0a 61 62 63 0a |abc.abc.abc.abc.| * [8] 2512 [9] 2514 [10] 2516 00000000 61 62 63 0a 61 62 63 0a 61 62 63 0a 61 62 63 0a |abc.abc.abc.abc.| * 00000000 61 62 63 0a 61 62 63 0a 61 62 63 0a 61 62 63 0a |abc.abc.abc.abc.| * 00000000 61 62 63 0a 61 62 63 0a 61 62 63 0a 61 62 63 0a |abc.abc.abc.abc.| * 00000000 61 62 63 0a 61 62 63 0a 61 62 63 0a 61 62 63 0a |abc.abc.abc.abc.| * [root@pm02 ~]# 00000000 61 62 63 0a 61 62 63 0a 61 62 63 0a 61 62 63 0a |abc.abc.abc.abc.| * 00000000 61 62 63 0a 61 62 63 0a 61 62 63 0a 61 62 63 0a |abc.abc.abc.abc.| * 00000000 61 62 63 0a 61 62 63 0a 61 62 63 0a 61 62 63 0a |abc.abc.abc.abc.| * [root@pm02 ~]# 000001f0 61 62 63 0a 00 00 00 00 61 62 63 0a 61 62 63 0a |abc.....abc.abc.| 00000200 61 62 63 0a 61 62 63 0a 61 62 63 0a 61 62 63 0a |abc.abc.abc.abc.| * 00000610 61 62 63 0a 00 00 00 00 61 62 63 0a 61 62 63 0a |abc.....abc.abc.| 00000620 61 62 63 0a 61 62 63 0a 61 62 63 0a 61 62 63 0a |abc.abc.abc.abc.| *
fluentd の in_tail プラグインを使うときは注意しよう。。。