- PR -

Samba-3.0.23dでread_data:〜、write_data〜エラーが出る

投稿者投稿内容
koara
ベテラン
会議室デビュー日: 2005/09/16
投稿数: 96
投稿日時: 2007-02-09 01:39
いつもお世話になっております。
koaraと申します。

次の環境で立ち上げたSambaが

・Red Hat 3ES(kernel2.4.21-4)
・Samba-3.0.23d(RPM)

read_data: 〜、write_data: 〜というエラーを不定期に出続けています、
解決の糸口が見つからず困っています。

【エラーログの内容】
引用:

> > Jun 4 00:40:30 samba smbd[820]: [2003/06/04 00:40:30, 0] lib/util_sock.c:read_data(436)

> > Jun 4 00:40:30 samba smbd[820]: [2003/06/04 00:40:30, 0] lib/util_sock.c:read_data(436)
> > Jun 4 00:40:30 samba smbd[820]: read_data: read failure for 30564. Error = Connection reset by peer
> > Jun 4 00:40:30 samba smbd[820]: read_data: read failure for 30564. Error = Connection reset by peer



*本日はサーバーのログを見ることができないため、
同じ症状について書き込まれた掲示板のエラーログを転載しました。

エラーの詳細を探ろうとsmb.confのログの設定を
log level=2
log file=/var/log/samba/%m.log
として経過を見ていたところ気になる点が2つ見つかりました。

1つは同一のホストのログにホスト名.log、IPアドレス.log
という2種類が存在していました。 

もう1つはread_errorはIPアドレス.logで出ており、
ほとんどが0.0.0.0というIPアドレスで発生しています。
一方、write_errorはホスト名.logだけで出ていました。

これらは何か手掛かりになりますでしょうか?

何か解決に至るお知恵をお持ちの方いましたら、
アドバイスよろしくお願いいたします。



[ メッセージ編集済み 編集者: koara 編集日時 2007-02-09 14:25 ]

[ メッセージ編集済み 編集者: koara 編集日時 2007-02-10 03:06 ]
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2007-02-09 08:40
おはようございます。

samba-jp の ML で Patch を作成された方がいらっしゃいます。
http://www.tac.tsukuba.ac.jp/~yamato/samba/14500/msg00330.html
が、修正 Patch というよりもエラー発生したらリトライしてね的なので…

引用:

 その切断が一時的なものなのか恒久的なものなのか、read(2) だ
けでは判断出来ませんので、一般的には何度か retry して様子を
見るしか手はありません。



という様子見が必要になると思います。
koara
ベテラン
会議室デビュー日: 2005/09/16
投稿数: 96
投稿日時: 2007-02-09 13:58
あるかな様 レスありがとうございます。
私も紹介して頂いたページを見ておりました。

引用:

log に retry 回数を残すようにしてありますので、参考のため
に何回くらいで成功しているのか調べてみて貰えませんか?もしく
は、これでも失敗するようなら、回数や待ち時間を増やしてみて下
さい。
 その状況を見て、2.2.8a-ja-1.1 に反映させたいと思います。



とそのページに書かれていますが、
Samba-3.0.23d-1のlib/util_sock.cのソースを見たところ、
read_dataは未だretryをしないようです。

引用:

ssize_t read_data(int fd,char *buffer,size_t N)
{
ssize_t ret;
size_t total=0;

smb_read_error = 0;

while (total < N) {
ret = sys_read(fd,buffer + total,N - total);

if (ret == 0) {
DEBUG(10,("read_data: read of %d returned 0. Error = %s\\n", (int)(N - total), strerror(errno) ));
smb_read_error = READ_EOF;
return 0;
}

if (ret == -1) {
if (fd == client_fd) {
/* Try and give an error message saying what client failed. */
DEBUG(0,("read_data: read failure for %d bytes to client %s. Error = %s\\n",
(int)(N - total), client_ip_string, strerror(errno) ));
} else {
DEBUG(0,("read_data: read failure for %d. Error = %s\\n", (int)(N - total), strerror(errno) ));
}
smb_read_error = READ_ERROR;
return -1;
}
total += ret;
}
return (ssize_t)total;
}



何か不具合でもあったのでしょうか・・・。

根本的な原因を知りたいです、
何か術はないのでしょうか?
koara
ベテラン
会議室デビュー日: 2005/09/16
投稿数: 96
投稿日時: 2007-02-09 14:02
koaraです。

ログを見られる状態になりましたので、
追加させてください。

*write_dataエラー

./log.example_hostname:[2007/02/05 15:01:25, 0] lib/util_sock.c:write_data(562)
./log.example_hostname: write_data: write failure in writing to client 192.168.100.3. Error 接続が他からリセットされました
./log.example_hostname:[2007/02/06 14:16:13, 0] lib/util_sock.c:write_data(562)
./log.example_hostname: write_data: write failure in writing to client 192.168.100.3. Error パイプが切断されました

*read_dataエラー

./log.0.0.0.0:[2007/02/08 01:02:55, 0] lib/util_sock.c:read_data(534)
./log.0.0.0.0: read_data: read failure for 4 bytes to client 192.168.100.1. Error = 接続が他からリセットされました

それぞれ
root# cd /var/log/samba
root# grep -H write_data ./log.*
root# grep -H read_data ./log.*
として調べました。
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2007-02-09 15:45
あら。失礼しました。

2.2.8a-ja-1.1 を入手できないでいるので、実際に反映されたか、わかりませんが。
2 系の最新(最終?)版も落とせない。。。

引用:

 read(2) が ECONNRESET で失敗しているようですね。要するに、
client からの SMB packet を読もうとしたら接続が切断されてい
て読めなかったということです。



状況としては、上記の通りであると想定されるので、その原因の判断として、
retry を組み込んで検証するのも手であると思います。
samba3 で本家取り込みになった時点で、上記のコードに特に問題はなくとも、
単に外されただけかもしれませんし…
検証期間だけ、組み込んでみてはどうでしょうか?
それで改善するようであれば、原因の切り分けにななると思います。
koara
ベテラン
会議室デビュー日: 2005/09/16
投稿数: 96
投稿日時: 2007-02-13 11:22
あるかな様
アドバイスどうもありがとうございます。

引用:

samba3 で本家取り込みになった時点で、上記のコードに特に問題はなくとも、
単に外されただけかもしれませんし…



本家とはどういう意味でしょうか?
どういったルールでSambaのソースがメンテされているのか知識が無いため、
もう少し詳しく教えてもらえませんか?

おそらく下記のような流れなのかなと想像しておりますが、
正しいでしょうか?

【バグ発見から次期バージョンに取り込まれるまで】
・ユーザーがバグ発見

・日本Sambaユーザー会に報告、
または検証して結果を報告

・日本Sambaユーザー会にて有用性が認められれば、
次期バージョンに取り込まれる

引用:

検証期間だけ、組み込んでみてはどうでしょうか?
それで改善するようであれば、原因の切り分けになると思います。



申し遅れましたが、私は社内サーバーの新人担当です。
運用中サーバーなので、その辺どうしても慎重になってしまいます。

まず出来る限り安全な方法で問題を切り分けたいと思います。

環境テスト用サーバーで試そうと考えたのですが、
同じバージョンのSambaでread_data、write_dataエラーとも発生して無かったので、
このサーバー固有の問題かなと考えております。

また、教えて頂いた掲示板の書込みを最後まで読んだところ、
オンボードの3comGbEのドライバ?が原因で、
NICを交換したところエラーは発生しなくなったということでした。

当方のNICはオンボードのINTEL PRO/1000XTで、
物こそ違いますが、NICドライバを疑っております。

"ifconfig -a"のNICの統計情報は問題の切り分けには繋がりますでしょうか?
またLinuxでドライバのバージョンを調べるにはどうしたら良いでしょうか?

『教えて』ばかりで本当にすみません、
アドバイスの方よろしくお願い致します。
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2007-02-13 13:48
こんにちは。

ちょっと言葉が悪かったです。
私もメンテに参加している訳では無いので、細かいルールは存じ上げないのですが。
Ver.2 系では、
samba.org で開発>日本 Samba ユーザ会が日本語向けにカスタマイズ>samba 日本語版リリース
だったのを、Ver.3 系からは
samba.org で開発<日本 Samba ユーザ会のメンバーも参加||samba.org からリリース
となっているのかな。と思ってます。
Samba 3.0 日本語版について で本家にマージする形で、と言われていましたので。

で、本題ですが。
koara 様の環境の場合だと、ハード問題の可能性が高そうですね。
ネットワーク周りか samba 自体かの切り分けが、リトライの目的ではあるので、
今回の場合は行う必要はさなそうです。
ただ、リトライで解決するのであれば、それも暫定対応としての解決策かな、とも思わなかったり。。。

デバイスの確認ですが、
/proc/
配下に情報があったと思います。
# cat /proc/pci
などで、NIC の情報とかは拾えないでしょうか?
#Linux 機が手元に無いので、うろ覚え情報ですみません。

と、ここまで書いて、なんなんですが。
そもそもディスク周りは正常に動作しているのでしょうか?
ログに samba 以外でのディスク読み書きエラーが出ていたり、とか。
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2007-02-13 14:14
Linux のハード周りの確認などは弱いので、そこは識者の方のご意見をお待ちするとして。
ネットワーク周りの知りたい情報としては、ifconfig よりも netstat の方が適切かも、です。
netstat -i で、パケットレベルですが、Ierrs/Oerrs で大量カウントされているかの確認はどうでしょうか?

スキルアップ/キャリアアップ(JOB@IT)