気がついたのはサーバー側からクライアント側へ大容量ファイルの転送に失敗した際に、 /var/log/syslog に残っていた「 NETDEV WATCHDOG: eth0: transmit timed out 」というログ。
これをそのまま、Google さんに聞いてみると、当たったのが NINXIT-BLOG さんちの以下の記事。
NINXIT-BLOG 「 NETDEV WATCHDOG: eth0: transmit timed out 」
X27D にも採用されているオンボードの LAN インターフェイスである RealTek の RTL8168B は Debian GNU/Linux (lenny) インストール時に同じ RealTek の RTL8169 と誤認識され、 正常なドライバーがインストールされません。
このために通信が非常に不安定になるようで、特に大容量のファイルなどを転送すると、 パケットロスが続発し、再送要求を繰り返し、最後にはタイムアウトしてインターフェイスごとダウン、 インターフェイスの再起動が行われていたようです。
うちの場合、クライアントからサーバへの通信は問題ないのですが、 その逆、サーバーからクライアントへのファイル転送で頻繁にこける現象が続発しました。
この現象を解消するには、正常な RTL8168B のドライバをインストールしてやる必要があります。 しかし、まずその前に、RealTek のサイトで公開されている Linux 用のドライバーはコンパイルして使用しなければならないため、コンパイル環境を整えなければなりません。 このとき、Linux のカーネルヘッダーも必要なため、以下のようにパッケージをインストールしてやる必要があります。
apt-get install gcc make linux-headersそのあとのコンパイルからドライバーのインストールまでは NINXIT-BLOG さんちの記事にあるとおりです。
ただし、NINXIT-BLOG さんちは CentOS へのインストールですので、 Debian GNU/Linux の場合、 /etc/modprobe.conf が存在しないので、このまま OS を再起動したら元の木阿弥です。
そこで 禁煙できない SE の独り言 さんちの 以下の記事を参考にしました。 こちらの記事では導入するドライバーは異なりますが OS 再起動後でも 正しいドライバーが導入する手法はそのまま使えます。
禁煙できない SE の独り言 「 D945GCLF:lenny に r8101 ドライバをインストール」
正しいドライバーのコンパイル、インストール後、以下のようにコマンドを実行します。
# modprobe -r r8169 # modprobe r8168 # cat "blacklist r8169" >> /etc/modprobe.d/blacklist # update-initramfs -uこれでサーバーを再起動しても、間違いなく RTL8168B のドライバーを読んでくれるようになります。
長くなりましたが、以上です。
この作業終了後、我が家のサーバーからクライアントへ 20GB クラスのファイル転送を試みましたがビクともしませんでした。 今度こそ、今度こそほんとに解決 (^^)b