ZFS オンラインディスク移行

ZFS オンラインディスク移行

ZFS が次のことを処理できるかどうか疑問に思っています。ミラーリングされたセットアップで 2 つの物理 500 GB ディスクを持つ zpool に FreeBSD がインストールされているとします。これらはルート パーティションを形成するため、実際に使用されるのは最大 20 GB のみです。

後で、物理ディスクをミラーリングされたセットアップの 2 つの小さな SSD に交換したいと思います。これをオンラインで実行する方法はありますか? 私の考えでは、これらのディスクを追加のミラーとして zpool に追加し、再ミラーリングが完了するのを待ってから、古いドライブを削除します。問題は、これらの新しいディスクが元のディスクよりも小さくなることです。

私が考えたアイデアは、500 GB のドライブをパーティション分割して、ZFS が各物理ディスクで 30 GB のスペースだけを取得し、残りは無駄にすることです。この方法だと SSD のスペースが増えるので、縮小の問題は発生しません。問題は、この方法では将来の交換ディスクのサイズを事前に見積もる必要があることです。これを回避する方法はありますか?

答え1

vdev がディスク全体である場合、SSD に切り替えるときに少なくともそのサイズである必要があり、より小さなディスクに「縮小」することはできません (もちろん、より大きなディスクに拡張することはできます)。また、パーティションを使用して vdev を将来の SSD よりも小さくすることができるため、それらの SSD がどのくらいの大きさになるかを推測する必要があることも正しいです。

あるいは、サーバーが 4 つのディスクすべてを同時に収容できる場合 (たとえ短時間であっても)、今すぐに任意の方法で zpool を作成し、送信/受信を使用してデータを新しい SSD に転送できます。ただし、すべてのデバイスを同時に接続する必要があります。小さな注意点として、送信/受信操作はスナップショットからのみ送信できます。そのため、「ライブ」ディスクを複製することはできず、これに対応する必要があります (少し複雑にすることで、ダウンタイムをかなり短くすることができます)。

さらに複雑なのは、別のディスク上の中間ファイルへの「送信」を保存し、そこから「受信」するという方法です。つまり、サーバーで必要なディスクは常に 3 つだけです。さらに複雑なのは、4 つのディスクを異なるサーバー上に配置して、送信/受信を ssh または netcat 経由でパイプできるということです。

答え2

これを実行する明白な方法が思いつきません。

今のところ、ルート ディスクをパーティション分割する必要があり (ブートコードを追加するため)、頻繁に行う必要もなさそうなので、ルート プール用に小さな (<20 GB) パーティションを作成することをお勧めします。追加のスペースが必要な場合は、残りのスペースから 2 番目のプールを作成できます。SSD を挿入するときは、パーティション分割し、ブートコードを追加し、ルート プールに 'zfs アタッチ' してから、元の SSD を 'zfs デタッチ' します (または 'zfs アタッチ' と 'zfs デタッチ' の代わりに 'zfs 置換' を使用します)。

関連情報