せっかくなんで小ネタを1つ。
LAN内でファイルを転送したいときに、セキュリティとかチョウどうでもいいのにscpしてきっと無駄してるんだろうなーとか思うじゃないですか。たとえば
ichii386@count% iperf -c bigbird ------------------------------------------------------------ Client connecting to bigbird, TCP port 5001 TCP window size: 16.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.0.21.1 port 47091 connected with 10.0.21.3 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 112 MBytes 93.7 Mbits/sec
くらいのネットワークで、700MBくらいの iso イメージファイルを転送したいとします。
無難にscpすりゃあいいんですけど、できたらsecureにするとこにCPU使いたくない。でもrcpとかinetdとかめんどうなのはイヤ。そういやrsyncってデーモンになれるんだよね!
rsync --daemon
ということで思い立ってrsyncd.confを書いてみました。いつも立ちあげっぱにするんじゃなくて、必要なときにforegroud jobでちょろっと実行するイメージです。
以下のような設定ファイル (rsyncd.conf) をどっかに置きます。
log file = /home/ichii386/rsyncd.log pid file = /home/ichii386/rsyncd.pid [test] path = /home/ichii386/pub lock file = /home/ichii386/rsyncd.lck read only = no use chroot = no
これで送信先で
ichii386@bigbird% rsync --daemon --no-detach --config=rsyncd.conf --port=10873
と起動して、送信元から
ichii386@count% rsync -avP hoge.iso rsync://bigbird:10873/test/
とやってあげる。
比較対象
openssh のソース見ると cipher.c に
struct Cipher { char *name; int number; /* for ssh1 only */ u_int block_size; u_int key_len; u_int discard_len; const EVP_CIPHER *(*evptype)(void); } ciphers[] = { { "none", SSH_CIPHER_NONE, 8, 0, 0, EVP_enc_null }, { "des", SSH_CIPHER_DES, 8, 8, 0, EVP_des_cbc }, { "3des", SSH_CIPHER_3DES, 8, 16, 0, evp_ssh1_3des }, { "blowfish", SSH_CIPHER_BLOWFISH, 8, 32, 0, evp_ssh1_bf },
とか書いてある割に、 "ssh -cnone" ってできないんですよね。
そんなで、以下がどれくらい違うのかを適当に比較してみました。ネットワークが落ち着いてそうな時に1回計測しただけです。
結果
ふつうにscp
os200805.iso 100% 686MB 3.8MB/s 03:03 real 3m3.294s user 2m44.610s sys 0m16.121s
scp -cblowfish
os200805.iso 100% 686MB 4.5MB/s 02:33 real 2m33.260s user 2m17.429s sys 0m14.285s
ふつうにrsync
os200805.iso 719087616 100% 4.53MB/s 0:02:31 (xfer#1, to-check=0/1) sent 719175494 bytes received 31 bytes 4715905.08 bytes/sec total size is 719087616 speedup is 1.00 real 2m31.886s user 2m14.976s sys 0m15.137s