ルートrpoolに加えて、追加のストレージプールを備えたSolaris 10 U8サーバーを拡張しています。
特定のZFSファイルシステムをrpoolからこの新しいストレージプールに移動する最も効果的/シンプル/信頼できる方法は何ですか?
オンラインで実行できますか、またはこれらのプールを使用して最初にサービスをシャットダウンする必要がありますか?
ルート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
編集:
「パイプビュー」コマンド(pv)をインストールすると、次のコマンドで転送のステータスを監視できます。
zfs send rpool/filesystem@snapshot | pv | zfs receive destinationpool/filesystem
jlliagreが言ったことの多くを繰り返していますが、子孫のファイルシステムを追加しています。(ほとんどの場合、私は忘れたときに参照があります。)
サブファイルシステムがある場合は-r
、zfs snapshotコマンドでフラグを使用し、コマンドで-r
or -R
フラグを使用しzfs send
ます。大文字-R
はすべてのプロパティ、スナップショット、クローンを移動します。
プール全体を移動するには:
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」などのツールを使用するといくつかの利点があります。両端がほとんど連続してデータをストリーミングできる場合、ZFSのsend / recvのパフォーマンスが劇的に向上し、mbuffer(または同様のもの)がないと、一方が連続してブロックするピンポン効果が得られます。