以下、安全なネットワークでのお話。くれぐれもインターネットにつながった世界とかではやらないでください。
zfs send/recv
ZFS には zfs send/recv という仕組みがあって、ファイルシステムを標準出力に吐き出して、それを標準入力から受け取るこが出来ます。とうぜん、ネットワーク経由で他のマシンに送り込んでバックアップを取る、ということもできるわけです。
そこで気になるのが、ネットワークでの送信手段。よくあるのは ssh で、Solaris のマニュアルにも
% pfexec zfs send -v tank/hoge@snapshot | ssh remote_host pfexec zfs recv tank/hoge@snapshot
みたくやりましょう、と書いてあります。
けれど、実際にやってみるとネットワークのwire speedにくらべてかなり遅い。remote_hostでprstatしてみると、sysじゃなくて (zfsはカーネル側)、 ssh がユーザランドで CPU 食ってることが分かります。
そこで「やっぱり Sun がスキ!」のブログでは mbuffer を使った例 が紹介されています。けれど、送信するたびにリモートでmbuffer起動して、とかやるのは自動化するときにはちょい面倒。安全なLAN内に限って、もうちょい楽をしたいんですよね。
rsh
ということで、安全なことを前提に rsh やってみました。
Solaris だと inetd まわりは inetadm を使うんだけど、 svc のほうにもエントリがあるので svcadm でまとめて管理してくれます。
% pfexec svcadm enable svc:/network/shell:default % pfexec svcs -l svc:/network/shell:default fmri svc:/network/shell:default name rsh enabled true state online next_state none state_time Tue Dec 08 10:31:02 2009 restarter svc:/network/inetd:default contract_id dependency require_any/error svc:/network/loopback (online) dependency optional_all/error svc:/milestone/network (online) % pfexec inetadm | grep network/shell:default enabled online svc:/network/shell:default
そして、とてつもなく久しぶりの .rhosts *1 を書きます。むかし某所で「.xhost ってファイル書くといいよ!」みたいないたずら流行ってたのが懐かしい。
count.local% echo "elmo.local ichii386" > ~/.rhosts count.local% chmod 600 ~/.rhosts
あとは rsh でコマンド実行出来るか確認。
elmo.local% rsh count.local id uid=101(ichii386) gid=10(staff) groups=10(staff)
send してみるテスト
elmo.local と count.local は1Gのネットワークで繋がってます。
- via ssh
elmo.local% pfexec zfs send -v rpool/test@snapshot | ssh count.local pfexec zfs recv rpool/test@snapshot receiving full stream of rpool/test@snapshot into rpool/test@snapshot received 7.65GB stream in 250 seconds (31.3MB/sec)
- via rsh
elmo.local% pfexec zfs send -v rpool/test@snapshot | rsh count.local pfexec zfs recv rpool/test@snapshot receiving full stream of rpool/test@snapshot into rpool/test@snapshot received 7.65GB stream in 90 seconds (90.2MB/sec)
うーん、いいですね。これであとは zfs send -i してゆけばカンペキです。
*1:追記: ファイル名が間違ってたのを直しました