これで最後です、たぶん。たくさん書いて疲れたので、ちょっと休憩しました。
ZFS でのファイルシステムの構築と、一般的なリプレース作業について残しておきます。
前回までのあらすじとして、なにはなくとも、内部ストレージから boot していると思います。ここまで来たら、ユーザランドに ZFS を扱うプログラムを用意して設定を行うことができます。以下のドキュメントを読んでおけば大丈夫です。
ZFS
https://wiki.gentoo.org/wiki/ZFS
今回はハードディスク 6 本で RAIDZ2 のボリュームを作ります。ディスクが 2 本まで壊れても大丈夫な構成です。
# zpool create -o ashift=12 -m /home home raidz2 sda sdb sdc sdd sde sdf
ashift オプションに 12 を指定しているのは、使っているハードディスクのセクタ長が 4096 バイトだからです。2 の 12 乗が 4096 になります。デフォルトでは自動でカーネルが検知した値を使ってくれるそうですが、明示的に指定しています。セクタ長より大きい値を用いると I/O で用いる単位が大きくなるのでパフォーマンスが良くなるそうです。しかしながら、これは利用可能なストレージ容量とのトレードオフになります。好み、でしょうね。
このボリュームの利用用途は、まさにホームディレクトリなので名前は home ですし、 mount ポイントも /home です。この mount の設定は /etc/fstab に書く必要はありません。ZFS 関連のデーモンが上がれば、自動的に mount してくれます。なので、 OS の起動時に自動でデーモンをあげるよう、忘れずに設定する必要があります。最初の 1 回を忘れなければ大丈夫です。
さて、ようやく広大なファイルシステムを手に入れることができました。いよいよリプレースの作業を行いますが、オリジナルから移行するのは /etc/passwd, /etc/shadow, /etc/group くらいでしょうか。ログインするユーザの UID と GID を移行しておけば概ね問題はありません。
いよいよ、データを移行します。すでに稼働しているファイルサーバからデータを持ってくるわけですが、幸にして両方とも ZFS を利用しています。なので、現行のサーバでスナップショットを作成して、新しいサーバに適用できるわけです。受け渡し方法として、スナップショットを標準出力で ssh へ渡して、受け取る側も標準入力で受け取るという、なかなかシンプルな方法があります。これだとファイルごとに TCP コネクションを作り直す必要がないので、 TCP 的には絶好調な Window サイズでどんどんデータを遅れる、と思います。
ZFS のバージョンは同じではないので、そのまま適用できるわけではないのですが、意外にも Oracle のドキュメントにいろいろヒントがあります。もともとは Sun Microsystems の成果物ですしね。
Oracle Solaris ZFS 管理ガイド > ZFS データのリモート複製
https://docs.oracle.com/cd/E24845_01/html/819-6260/gbchx.html#gbinz
もしかしたら、英語版のドキュメントの方が新かったり、メンテナンスされているかもしれません。日本語ドキュメントがとても読みやすかったので、とくに英語版はみていません。
新しく作ったサーバの IP アドレスを 192.168.0.127 にしたので、現行のファイルサーバから以下を実行しました。
# zfs snapshot home@today # zfs send home@today | ssh root@192.168.0.127 zfs recv -F home@today
途中経過とか一切わからないので、ひたすら信じて放置します。正常終了したら、データ移行はおしまいです。あっけないですね。
ちなみに、現行のファイルサーバの uptime がひどいことになっていました。
# uptime 18:03:30 up 380 days, 3:22, 1 user, load average: 0.00, 0.03, 0.27
ユーザランドはちょいちょい更新して、遊んだりしていたのですが、カーネルは何も変えていなかったのです。とはいえ、 1 年以上も安定稼働していたわけで、ちょっとごつい PC のわりにはよくがんばったと思います。
主な作業はこれでおしまいです。あとは現行サーバの IP アドレスと新しいサーバの IP アドレスをスイッチして、動作確認して問題なければ大丈夫です。他にもいつものツール群やサーバアプリケーションなどなど、設定事項はいくらでもありますが、いったんはおしまいとします。