web-dev-qa-db-ja.com

レプリケーション後にZFSプールルートをスナップショットに置き換える方法

いくつかの障害のあるディスクを新しいものと交換しています。それらを1つずつ交換するのではなく、新しいディスク上に新しいZFSプールを作成し、古いプールを新しいものにコピーしました。これをプールレベルで行ったので、内部のすべてのボリュームがコピーされます。

# zfs snapshot -r oldpool@moving
# zfs send -R oldpool@moving | zfs recv -F -v newpool

これは機能し、新しいプールに@movingスナップショットがあります。

# zfs list -t snapshots
oldpool@moving
oldpool/vol1@moving
oldpool/vol2@moving
newpool@moving
newpool/vol1@moving
newpool/vol2@moving

これで、newpoolマウントポイントにあるすべてのファイルを確認でき、スナップショットからのものであっても変更することができます(スナップショットはすべて読み取り専用であり、書き込み可能にするにはクローンを作成する必要があるため、 zfs recvがすでにスナップショットのクローンを作成したかどうかはわかりません)。

したがって、newpool@movingスナップショットを破棄し、この状態を新しいプール(つまり、スナップショットがまったくない基本状態)に昇格させる方法を考えています。

スナップショットのクローンを作成しようとしましたが、スナップショットを別のパスに移動するように見えました。

# zfs clone newpool@moving newpool/clone
# zfs promote newpool/clone
# zfs destroy newpool@moving
could not find any snapshots to destroy; check snapshot names.
# zfs list -t snapshots
oldpool@moving
oldpool/vol1@moving
oldpool/vol2@moving
newpool/clone@moving    # was newpool@moving
newpool/vol1@moving
newpool/vol2@moving

トップレベルのボリュームとスナップショット(ただし、その中の子ボリュームはありません)の名前を変更し、「スナップショットのないベースボリューム」に変換するのではなく、スナップショットとして保持したようです。

何かを悪化させる前に、私は何が欠けていますか? newpoolのスナップショットをすべてベースボリュームにマージして、スナップショットを複製する前のoldpoolの状態を反映するようにするには、どうすればよいですか。 newpool

3
Malvineous

私はこれを解決したと思います。元の状況(zfs cloneを台無しにする前)は、ファイルシステムがコピーされ、将来の増分更新(zfs send -iを使用)を支援するために一致するスナップショットが作成されたというものでした。ファイルがコピーされてからスナップショットが作成されたかのようでした。つまり、後続の変更はすべて基になるファイルシステムに送られ、必要に応じてそれらの変更をスナップショットにロールバックできました(元のプールを作成したのと同じように)スナップショット)。

これは必要なかったので、スナップショットを削除するだけで済みました。

# zfs destroy -v -r newpool@moving
# zfs destroy -v -r oldpool@moving

そして、2つのプールは同一になりました。

ただし、この場合、最初にzfs promoteで作成した混乱を修正する必要がありました。これにより、データセットルートがクローンになり、この構造が効果的に変更されました。

newpool
 |
 +-- vol1
 |
 +-- vol2

この構造に:

newpool
 |
 +-- clone
      |
      +-- vol1
      |
      +-- vol2

解決策は、クローンのこのプロモーションを元に戻すことでした。これは、次のように実行できました。

# zfs snap -r newpool@s1   # Not sure if this is actually needed or not
# zfs promote newpool

それが完了すると、すべてがzfs recvパラメーターの直後の状態に近づき、通常どおりクローン(zfs destroy newpool/clone)と余分な@s1スナップショットを削除する必要がありました。

2
Malvineous