「クローン」とは、書き込み可能なボリュームまたはファイルシステムのことで、最初の内容は作成元のデータセットと同じです。スナップショットの場合と同様に、クローンは瞬間的に作成され、最初は追加のディスク領域を消費しません。また、クローンのスナップショットを作成することもできます。
クローンは、スナップショットからしか作成できません。スナップショットが複製されるときに、クローンとスナップショットの間に暗黙の依存関係が作成されます。クローンはファイルシステム階層内の別の場所に作成されますが、クローンが存在する間は元のスナップショットを破棄することはできません。この依存関係は、origin プロパティーからわかります。そのような依存関係が存在する場合には、zfs destroy コマンドを実行すると表示されます。
クローンでは、作成元のデータセットのプロパティーが継承されません。zfs get および zfs set コマンドを使用して、複製したデータセットのプロパティーを表示して変更することができます。詳細については、ZFS プロパティーを設定するを参照してください。
クローンのすべてのディスク領域は最初は元のスナップショットと共有されるため、used プロパティーの初期値はゼロになります。クローンに変更が加えられるにつれて、使用されるディスク領域が多くなります。元のスナップショットの used プロパティーには、クローンが消費するディスク領域は含まれません。
このセクションの内容は次のとおりです。
クローンを作成するには、zfs clone コマンドを使用します。クローンの作成元となるスナップショット、および新しいファイルシステムまたはボリュームの名前を指定すると、ZFS 階層内の任意の場所に配置できます。新しいデータセットは、クローンの作成元になったスナップショットと同じ種類 (ファイルシステムやボリュームなど) です。クローンを作成するためのファイルシステムは、基にするファイルシステムスナップショットがあるプールに存在している必要があります。
次の例では、初期の内容がスナップショット system1/ws/gate@yesterday と同じ system1/home/matt/bug123 という名前の新しいクローンを作成します。
# zfs snapshot system1/ws/gate@yesterday # zfs clone system1/ws/gate@yesterday system1/home/matt/bug123
次の例では、スナップショット projects/newproject@today からクローンが作成されたワークスペースを一時ユーザー用に projects/teamA/tempuser として作成します。次に、クローンが作成されたワークスペース上にプロパティーが設定されます。
# zfs snapshot projects/newproject@today # zfs clone projects/newproject@today projects/teamA/tempuser # zfs set share.nfs=on projects/teamA/tempuser # zfs set quota=5G projects/teamA/tempuser
ZFS クローンを破棄するには、zfs destroy コマンドを使用します。例:
# zfs destroy system1/home/matt/bug123
親のスナップショットを破棄する前に、クローンを破棄する必要があります。
アクティブな ZFS ファイルシステムをそのファイルシステムのクローンで置き換えるには、zfs promote コマンドを使用します。この機能を使ってファイルシステムの複製と置換を実行でき、「作成元」のファイルシステムが、指定されたファイルシステムのクローンになります。さらに、クローンの作成元であるファイルシステムを破棄することもできます。クローンの移行促進を行わない限り、アクティブクローンの元のファイルシステムを破棄することはできません。詳細については、ZFS クローンを破棄するを参照してください。
次の例では、system1/test/productA ファイルシステムのクローンが作成されたあとに、クローンファイルシステム system1/test/productAbeta が元の system1/test/productA ファイルシステムになります。
# zfs create system1/test # zfs create system1/test/productA # zfs snapshot system1/test/productA@today # zfs clone system1/test/productA@today system1/test/productAbeta # zfs list -r system1/test NAME USED AVAIL REFER MOUNTPOINT system1/test 104M 66.2G 23K /system1/test system1/test/productA 104M 66.2G 104M /system1/test/productA system1/test/productA@today 0 - 104M - system1/test/productAbeta 0 66.2G 104M /system1/test/productAbeta # zfs promote system1/test/productAbeta # zfs list -r system1/test NAME USED AVAIL REFER MOUNTPOINT system1/test 104M 66.2G 24K /system1/test system1/test/productA 0 66.2G 104M /system1/test/productA system1/test/productAbeta 104M 66.2G 104M /system1/test/productAbeta system1/test/productAbeta@today 0 - 104M -
この zfs list の出力では、元の productA ファイルシステムのディスク領域計上情報が、productAbeta ファイルシステムのものに置き換わっています。
ファイルシステムの名前を変更することで、クローンの置換処理を完了することができます。例:
# zfs rename system1/test/productA system1/test/productAlegacy # zfs rename system1/test/productAbeta system1/test/productA # zfs list -r system1/test
また、旧バージョンのファイルシステムを削除することもできます。例:
# zfs destroy system1/test/productAlegacy