Linuxベースのファイルサーバー(ark)があり、nfs4を介してRAIDボリュームをエクスポートします。
大きなコピー操作を行うと、タイムアウトになることがあります。
[nathan@ebisu /mnt/extra/disk] rsync -a --progress . /mnt/raid/backup/backup.extra/disk
sending incremental file list
BSD.0/
BSD.0/BSD.0.vdi
411336704 12% 48.60MB/s 0:00:56
rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32)
rsync: write failed on "/mnt/raid/backup/backup.extra/disk/BSD.0/BSD.0.vdi": Input/output error (5)
rsync error: error in file IO (code 11) at receiver.c(322) [receiver=3.0.9]
rsync: connection unexpectedly closed (32 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
Dmesgが私にそう言うので、これがタイムアウトであることを私は知っています:
[nathan@ebisu ~] dmesg | tail
[52722.138132] nfs: server ark not responding, timed out
[52722.138137] nfs: server ark not responding, timed out
[52722.138145] nfs: server ark not responding, timed out
[52722.138150] nfs: server ark not responding, timed out
[52722.138154] nfs: server ark not responding, timed out
これがrsyncに関連するバグである可能性があると思われる場合は、通常のコピーも実行してみました。
[nathan@ebisu /mnt/extra/disk] cp BSD.0/BSD.0.vdi /mnt/raid/backup/backup.extra/disk
cp: error writing ‘/mnt/raid/backup/backup.extra/disk/BSD.0.vdi’: Input/output error
cp: failed to extend ‘/mnt/raid/backup/backup.extra/disk/BSD.0.vdi’: Input/output error
この問題を解決するためにどこから始めればよいのかさえわかりません。これらは両方とも、ギガビットスイッチを介してギガビットイーサネット経由で接続されています。私はethtoolを使用して、両方が実際にギガビット速度で実行されていることを検証しました。ホストとサーバー間のほとんどの操作は正常に機能します。それが死ぬのは大きな移籍の真っ只中だけです。
ファイルサーバーのdmesgには、厄介なものとして目立つものはありません。
[root@ark ~]# dmesg | tail
[ 7.088959] NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory
[ 7.266363] NFSD: starting 90-second grace period (net ffffffff81880e80)
[ 8492.222871] type=1326 audit(1365926452.334:2): auid=4294967295 uid=99 gid=99 ses=4294967295 pid=336 comm="sshd" sig=31 syscall=48 compat=0 ip=0x7fe1be17edc7 code=0x0
[ 8492.314714] type=1326 audit(1365926452.424:3): auid=4294967295 uid=99 gid=99 ses=4294967295 pid=338 comm="sshd" sig=31 syscall=48 compat=0 ip=0x7fe30fd9ddc7 code=0x0
[ 8492.405336] type=1326 audit(1365926452.514:4): auid=4294967295 uid=99 gid=99 ses=4294967295 pid=340 comm="sshd" sig=31 syscall=48 compat=0 ip=0x7f6bb032ddc7 code=0x0
[ 8492.501048] type=1326 audit(1365926452.611:5): auid=4294967295 uid=99 gid=99 ses=4294967295 pid=342 comm="sshd" sig=31 syscall=48 compat=0 ip=0x7f81d7c2fdc7 code=0x0
[ 8492.603056] type=1326 audit(1365926452.714:6): auid=4294967295 uid=99 gid=99 ses=4294967295 pid=344 comm="sshd" sig=31 syscall=48 compat=0 ip=0x7f97c8bc9dc7 code=0x0
[ 8492.703732] type=1326 audit(1365926452.814:7): auid=4294967295 uid=99 gid=99 ses=4294967295 pid=346 comm="sshd" sig=31 syscall=48 compat=0 ip=0x7f0661b2fdc7 code=0x0
[ 8492.837977] type=1326 audit(1365926452.947:8): auid=4294967295 uid=99 gid=99 ses=4294967295 pid=348 comm="sshd" sig=31 syscall=48 compat=0 ip=0x7fd024f8cdc7 code=0x0
[54125.173195] type=1326 audit(1365972085.286:9): auid=4294967295 uid=99 gid=99 ses=4294967295 pid=353 comm="sshd" sig=31 syscall=48 compat=0 ip=0x7f390a6b9dc7 code=0x0
Syslogにも同様に問題はありません。
私が収集したさらにランダムな診断情報:
[root@ebisu etc]# nfsstat -rc
Client rpc stats:
calls retrans authrefrsh
1057273 34163 1050608
それはたくさんの再トランスです。
Nfsdスレッドが飽和しているかどうかを確認しましたが、ほとんどアイドル状態でした。
楽しみのために、ディスクエラーや速度低下が発生していないかどうかを確認するために、同様の転送を完全にローカルで実行しました。
[root@ark ~]# rsync --progress test.img /mnt/bigraid/backup/backup.ark/
test.img
8589934592 100% 48.38MB/s 0:02:49 (xfer#1, to-check=0/1)
sent 8590983238 bytes received 31 bytes 50386998.65 bytes/sec
total size is 8589934592 speedup is 1.00
50MB/sを少し下回ったようです。これは、リモートrsyncで取得していた速度とほぼ同じです。
サーバーでhtopを実行しているときに転送を実行しようとしましたが、しばらくすると、nfsdがより多くのメモリバッファーを要求したように見えることに気付きました。最新の標準ではサーバーはハイメモリシステムではないため、メモリに関連している可能性があります。しかし、これにより、完全にタイムアウトするのではなく、転送が遅くなるだけであるように思われます。
これは実際には答えではありませんが、いくつかのトラブルシューティングのヒントです。
問題がNFSに接続されていることを確認し、別のプロトコルを使用して同じボリュームをエクスポートします。SMBたとえば(手順については ここ を参照)。同じエラーが発生しますか?または、scp
でコピーしてみてください。
[nathan@ebisu ~] scp root@ark:/mnt/bigraid/backup/backup.ark/test.img .
これは、単一の大きなファイルをコピーする場合にのみ発生しますか、それとも同じ量のデータを多数の小さなファイルにコピーした場合にも同じエラーが発生しますか?
split test.img
rsync -a --progress x* /mnt/raid/backup/backup.extra/disk
このページ によると、高い再変換値は
サーバーで使用可能なNFSカーネルスレッドの数が、このクライアントからの要求を処理するには不十分であること
したがって、RPCNFSDCOUNT
変数を設定して、スレッドの数を増やしてみてください。ディストリビューションに応じて、これは/etc/sysconfig/nfs
または/etc/default/nfs-kernel-server
で設定できます(私のDebianではここにあります)。次のようなものを試してください
RPCSVCGSSDOPTS=16
同じページでは、クライアントでブロックサイズを32に設定することも提案しています。 /etc/fstab
から共有をマウントしていると仮定して、次のオプションを関連する行に追加します。
rsize=32768,wsize=32768,intr,noatime
これらのオプションは、読み取り/書き込みブロックサイズを増やすだけでなく、
また、ハングが発生した場合にNFS操作が中断される可能性があり、リモートNFSファイルシステムでアクセスされるファイルでatimeが常に更新されないようにします。
それは私にはネットワークの問題に非常によく似ています。一部のネットワークカード(特にRealtekチップの場合)は、特に1Gbpsで、間にスイッチがある場合、標準にあまり準拠していません。だからあなたは試してみるべきです:
ifconfig
とethtool -S ethX
のエラーをチェックしていますifconfig
を使用してMTUをチェックし、それが高い場合は15に設定しますping -f
を使用して、特に-s
(pingパケットサイズ)の値が高い場合に、2つの間でドロップされたパケットをチェックします-不安定な接続willping -f -s 10000
のようなものを数秒間実行すると、パケット損失が発生します同じエラーメッセージが表示されました(ただし、毎回エラーを再現できるため、同じ問題ではありません!)。
rsyncをより詳細に実行(_rsync -vv
_)は、ターゲットファイルシステムがいっぱいであることを明らかにしました!
rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32) test/file1 is uptodate test/file2 is uptodate test/file3 is uptodate rsync: recv_generator: mkdir "test/file4" failed: No space left on device (28) * Skipping any contents from this failed directory * rsync: recv_generator: mkdir "test/file5" failed: No space left on device (28) rsync: close failed on "test/file6": Input/output error (5) rsync: connection unexpectedly closed (78708 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.6]