web-dev-qa-db-ja.com

最小限のダウンタイムでzfsプールを移行する方法は?

2x5TBミラーリングドライブと2x1TBミラーリングドライブを備えたRAID1ZFSプールがあり、2つの1TBデバイスを4TBデバイスに交換したいと考えています。 zpool addは元に戻すことができるため[1]、目的のレイアウトで再作成した後、プールを破棄する必要があります。

したがって、

  • ミラーリングされたデバイスをzpool detachedし、それらを使用して新しいプールを作成しました。
  • マウントポイントが重複しているために次のコマンドが失敗した後、zpool import -R /mnt/data1を使用して別のルートでそれをex-および再インポートしました
  • 現在進行中のmigrate1を実行できるようにするために、スナップショットSudo zfs send -R data@migrate1 | Sudo zfs receive -F data1を作成しました。

さて、zfs sendパイプが完了した後の最良の手順を知りたいのですが、私の理解では、古いプールdataを代替ルートにマウントし、新しいプールdata1を代替ルートなしで取得する必要があるためです。古いプールを削除し、そのデバイスを新しいプールに接続できるようにするには、再起動します。多分別の方法があります。

Linux4.13.0-16-genericを搭載したUbuntu17.10のソースからビルドされたZFS0.7.0-182_gc0daec32f8とSPL0.7.0-20_g35a44fcbを使用しています。

私はチェックした

これは複雑であり、1 TBのデバイスをプール内に保持しても問題はないことを私は知っていますが、それは問題の一部ではありません。


[1]これをZFSOnLinuxの問題として https://github.com/zfsonlinux/zfs/issues/6857 でリクエストしました。これは、背後にある複雑な計画/ロードマップへのリンクを提供します。

1
Karl Richter

2x5TBミラーリングドライブと2x1TBミラーリングドライブを備えたRAID1ZFSプールがあり、2つの1TBデバイスを4TBデバイスに交換したいと考えています。 zpool addは元に戻すことができるため[1]、目的のレイアウトで再作成した後、プールを破棄する必要があります。

これは、RAIDZ1(少なくとも3x1)よりもストライプミラー(2x2)のように聞こえます。どちらの方法でも、一度に1つのディスクを取り外して交換することで、両方の構成を適切に拡張できます。各リシルバーが終了するのを待ってから、次のディスクを交換します。最後に、すべてのディスクを交換した後、プールをzpool offline、次にzpool online -eして新しいサイズに拡張します(または拡張前にautoexpand=trueを設定します)。

    zpool online [-e] pool device...
         Brings the specified physical device online. This command is not
         applicable to spares.

         -e      Expand the device to use all available space. If the
                 device is part of a mirror or raidz then all devices must
                 be expanded before the new space will become available to
                 the pool.

もちろん、最初に取り外したデバイスをケースに再接続します。これは、十分な冗長性がある場合にのみ交換が可能になるためです。


それとは別に、マウントポイントをその場で設定および変更したり、アクティブなマウントポイントを持つプールを破棄したりできます(アクティブなI/Oがない場合)。それが機能しない場合、zpool export/zpool importはほとんどの場合、再起動と同様に機能します(許可できる場合、これはルートプールではありません)。

1
user121391