ルートrpoolに加えて追加のストレージプールを備えたSolaris 10 U8サーバーを拡張しています。
特定のZFSファイルシステムをrpoolからこの新しいストレージプールに移動する最も効果的/シンプル/信頼できる方法は何ですか?
オンラインで実行できますか、それともこれらのプールを使用してサービスをシャットダウンする必要がありますか?
サービスの無効化に関する問題は、基本的にサービス自体に依存します。
いずれの場合でも、ZFSファイルシステムの送信には時間がかかることがあります。ほとんどの場合、サービスをオンラインにしておくことにより、サービスの利用不可を最小限に抑えることができます。
その2番目のスナップショットを段階的に送信すると、前回の転送よりもはるかに速くなります。例えば。:
zfs send -i rpool/filesystem @ snapshot rpool/filesystem @ snapshot2 | zfs receive -F destinationpool/filesystem
完了したら、ファイルシステムのマウントポイントを古いデータセットから新しいデータセットに移動します。例えば。:
zfs set mountpoint=/application/directory.old rpool/filesystem
zfs set mountpoint =/application/directory destination/filesystem
これを実現するには、プロセスが/application/filesystem
にバインドされていないことを確認する必要があります(たとえば、ファイルにアクセスしたり、現在のディレクトリとして持っている)。
これはオンラインでは実行できないと思いますが、私のプロセスは、必要なサービスをシャットダウンし、スナップショットを取り、zfs send/receiveを使用して移行を行うことです。何かのようなもの:
zfs send rpool/filesystem@snapshot | zfs receive destinationpool/filesystem
編集:
「pipe view」コマンド(pv)をインストールすると、次の方法で転送のステータスを監視できます。
zfs send rpool/filesystem@snapshot | pv | zfs receive destinationpool/filesystem
私はjlliagreが言ったことの多くを繰り返していますが、子孫のファイルシステムのための追加があります。 (ほとんどの場合、私は忘れたときに参照情報を持っています。)
サブファイルシステムがある場合は、zfs snapshotコマンドで-r
フラグを使用し、-r
コマンドで-R
またはzfs send
フラグを使用する必要があります。大文字の-R
は、すべてのproperties、スナップショットおよびクローンを移動します。
プール全体を移動するには:
zfs snapshot -r sourcepool@moving
zfs send -R sourcepool@moving | zfs receive -F destpool
次に、移行期間を短くするために変更を同期するには、アプリケーションをシャットダウンし、samba、nfsをシャットダウンします。
zfs snapshot -r sourcepool@moving2
zfs send -Ri sourcepool@moving sourcepool@moving2 | zfs receive -F destpool
移行用に複数の中間スナップショットを作成する場合は、zfs send -I
スイッチのマニュアルページをお読みください。
また、パイプラインで「mbuffer」などのツールを使用すると、いくつかの利点があります。明らかに、両端がほとんど連続的にデータをストリーミングでき、mbuffer(または類似のもの)なしで一方が他方を継続的にブロックするピンポン効果が得られる場合、ZFS送信/受信パフォーマンスは劇的に向上します。