はじめに
みなさん、ZFS使ってますか?
「そんなカッタルイもんつかってられるかいな、これからはbtrfsやろ」
そう思っていた時期が、僕にもありました、っていうかそのとおりだとは思います。
ただ、諸般の事情でzfs-fuseでファイルサーバを既に立てちゃってた場合、「あー今のHDDももう4年つかったし、そろそろ新しいサーバに移し替えたいナー」という、運用上なんともしがたい作業があるわけです!
ローカルでディスクつないでcloneすればいいんですが、たとえばraidzでHDD3本使ってたりすると、移行元と先でトータル6台もHDDをつながないといけないので、やっぱネットワーク越しにcloneするのが無難と思われます(あと、移行元のマシンは大分古いので、あんまり触りたくないですしね.....)。
で、このネットワーク越しのclone時に、Ubuntu(Studio)の場合はひと工夫必要が必要だったので、そのときの備忘録です
何が問題か
Oracleのマニュアル見ると「そんなん簡単でっせ、ssh使いなはれ」、と書いてあります。
https://docs.oracle.com/cd/E19253-01/819-6260/gbinw/index.html
より
host1# zfs send -i tank/dana@snap1 tank/dana@snap2 | ssh host2 zfs recv newtank/dana
えええええええええええ!!!!!、正気ですか!?(ケンドーコバヤシ風に)
問題だらけじゃないッスか!!
- デフォルトではrootにsshは許可されてない
- っていうか設定か変更すればできるけど、rootにssh許可とかセキュリティ上したくないし、そもそもsshdの設定変更して移行終わったら元に戻すのなんか嫌
- ubuntuだとrootはアカウントとして無効になってる(あくまでもロールとして提供)
- 一般ユーザでログオンしてからsudoする方法もあるけど、/etc/sudoers.dにわざわざコンフィグ書きたくない
うーん、色々設定できればできそうなんですけど、セキュリティホールになりそうだし、移行のためだけにわざわざ設定変えたくないッス
こまりました。
ncとかいう神コマンド
そこで登場するのがtcpのパイプを作ってくれるnc(network cat)コマンドです。
必要に応じてapt install netcat でインストールしときます。
(もしかしたらデフォルトで入ってるかも)
まず最初に移行先でtcpをlistenするサーバを立ち上げます。
-Fは送られてきたデータで上書きです。初回だけつけます
nc -l 0 13000 | zfs recv -v -F pool/backup
これでポートtcp/13000に投げ込まれたストリームがzfs recvにリダイレクトされます。
そしてこんどは移行元から移行先サーバに対してストリームを投げ込みます
zfs send pool-old/backup@snap-20140101 | nc <移行先サーバのIP> 13000
コピーが完了するとサーバ側のzfs recvが完了してプロンプトが帰ってきます。
次のスナップショットを送るときはサーバ側は-Fは不要、クライアントは-iつきで差分を投げます
(2019/08/18追記)
なんか「cannot receive incremental stream: destination XXXXXXX has been modified since most recent snapshot」ってエラーで怒られることがある(たぶんatimeの都合)ので、サーバ側は2回目以降も-Fつけたほうがよさそう
サーバ側
nc -l 0 13000 | zfs recv -v pool/backup
クライアント側
zfs send -i pool-old/backup@snap-20140101 pool-old/backup@snap-20140201 | nc <移行先サーバのIP> 13000
おわりに
しっかし、zfsの書き込み遅いっすね。
SATA HDDx3 のraidz につくられたファイルシステム500GBぐらい移行してみたら、スループットとして5〜10MB/secぐらいしか出てない......結局全部クローンするのに20hぐらいかかりました....orz.
(わざわざ1Gbpsのハブ買ったのに!!)
リモートから入って作業しててうっかりコネクション切れちゃうと最初からやりなおしなので、作業するときはscreenコマンド必須と思います。
昔SSDで組んだZFSのアプライアンスとか出してたメーカーがありましたが、SSDだとマトモな速度(せめて30〜100MB/secぐらい出てほしいナー)で動くんですかねぇ
まぁ最近はSSDも安くなっってきたので、そのうちZFS+SSDに挑戦してみたいですねー。