一日一回、Linux マシンから Windows マシンに接続してファイルをもらってくるという作業がある。使用できるプロトコルは netbios のみなので、smbclient を使ってシェルスクリプトを書いた。スクリプトといっても実質はたった一行だけど。Windows2000 サーバに接続して再帰的にディレクトリの中身をコピーする。あとはこれを cron で自動実行するだけ。
smbclient は TurboLinux Server 6.5 付属の Version 2.0.7-ja-1.2 だ。swat の管理画面からマニュアルを読んでみたところ、以下のようなオプションがあると書かれていた。
今回は理論よりも実を取り、以下のようにスクリプトを修正。
#!/bin/sh
LOG='/home/hiroaki/log/get_profitlog.log'
echo `date` get start >>$LOG
cd /home/hiroaki/import
/usr/bin/smbclient //windows2000server/public PASSWORD -W DOM-HIROAKI -U saitou_hiroaki -D /common -c "prompt; recurse; mget BbsLog" >>$LOG
echo `date` get complete >>$LOG
- なんだか遅い
なんだか転送速度が遅い。1.2Mbps くらいしか出ていない。相手先サーバは 100Mbps ではなく10Mbps でネットワークに接続しているようだが、それを差し引いても遅すぎる。getting file ABC00001.PIX of size 2030122 as ABC00001.PIX (138.533 kb/s) (average 164.479 kb/s)
smbclient は TurboLinux Server 6.5 付属の Version 2.0.7-ja-1.2 だ。swat の管理画面からマニュアルを読んでみたところ、以下のようなオプションがあると書かれていた。
-b buffersize
このオプションはサーバとファイルの送受信を行なうときの送受信バッファのサイズを変更する。規定値は 65520 バイトである。この値を(最小 1200 バイトまで)小さくすることで、 Windows 9x サーバとのファイルの転送がスピードアップすることが確認されている。
Domain=[DOM-HIROAKI] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager]接続時に上記メッセージが出ていることからもわかるように、今回の相手先サーバは Windows2000 なのだがとりあえず試してみた。
- -b で smbclient が速くなった
-b 4096 を付けると10倍くらい速くなった。何でだろう? Widows9x 系以外でも有効なのかな?getting file ABC00001.PIX of size 2030122 as ABC00001.PIX (1293.24 kb/s) (average 1282.02 kb/s)
今回は理論よりも実を取り、以下のようにスクリプトを修正。
/usr/bin/smbclient //windows2000server/public PASSWORD -W DOM-HIROAKI -U saitou_hiroaki -D /common -b 4096 -c "prompt; recurse; mget BbsLog" >>$LOG
- samba の使用するメモリが気になったので、inetd 経由による起動を検討してみた。
Google で samba inetd 起動を検索すると、いろいろヒット。でも、inetd 経由で起動するデメリットも見つかった。
パフォーマンスが悪くなるかも、という意見の他にも、以下のような記述があった。
[samba-jp:08169] Re: UNIX Magazine 2001 年1 月号のSamba 記事
http://www.tac.tsukuba.ac.jp/~yamato/samba/8000/msg00169.htm ...
3) swat から制御する場合には inetd を使わない
これは知らなかった。でも、ちょっと考えればすぐに気づくなあ。
一方で、もっとボトルネックになる要素があるのでパフォーマンスはあまり悪くはならない、inetd 経由を推奨するという意見もあった。
[samba-jp:08187] Re: UNIX Magazine 2001年1 月号の Samba記事
http://www.tac.tsukuba.ac.jp/~yamato/samba/8000/msg00187.htm ...
わざわざ複雑にする必要もないと思うので、sonic と pro では現状のデーモンのままとしよう。
http://pc.2ch.net/test/read.cgi/unix/1028825681/487
そういえば、オレも以前からこの問題は気になってた。
ということで調べてみた。結論から言うと、「エディタが悪い」。
http://pc.2ch.net/test/read.cgi/unix/1028825681/519 に回答を書いておいたが、>>487 はもう読んでないんだろうなー。
そういえば、オレも以前からこの問題は気になってた。
ということで調べてみた。結論から言うと、「エディタが悪い」。
http://pc.2ch.net/test/read.cgi/unix/1028825681/519 に回答を書いておいたが、>>487 はもう読んでないんだろうなー。
>>487
> WindowsクライアントからSAMBAのファイルを更新すると、
> 強制的にcreate maskで指定したパーミッションになってしまいますが、
> これはどうにかならないのでしょうか?
[samba-jp:08599] シェルスクリプトの実行属性によると、どうにもならないようだ。
http://www.samba.gr.jp/ml/samba-jp/htdocs/20010214/8599.html
http://www.samba.gr.jp/ml/samba-jp/htdocs/20010214/8602.html
http://www.samba.gr.jp/ml/samba-jp/htdocs/20010214/8603.html
http://www.samba.gr.jp/ml/samba-jp/htdocs/20010214/8607.html
http://www.samba.gr.jp/ml/samba-jp/htdocs/20010214/8608.html
Windows のエディタの多くは、上書き保存するときに
1) すでにあるファイルを rename して、
2) 新しくセーブするべきファイルを作成し、
3) 前のファイルを消す
ということをしているから、とのこと。