quota プロパティーを使用して、ファイルシステムが使用できるディスク容量を制限できます。また、reservation プロパティーを使用して、指定されたディスク容量をファイルシステムが使用できることを保証することもできます。どちらのプロパティーも、設定対象のファイルシステムとそのファイルシステムのすべての子孫に適用されます。
つまり、割り当て制限を tank/home ファイルシステムに設定した場合は、tank/home およびそのすべての子孫が使用するディスク容量の合計がその割り当て制限を超えることができなくなります。同様に、tank/home に予約を設定した場合は、tank/home およびそのすべての子孫がその予約を利用することになります。ファイルシステムとそのすべての子孫が使用するディスク容量は、used プロパティーによって報告されます。
refquota プロパティーと refreservation プロパティーは、スナップショットやクローンなどの子孫で消費されるディスク容量を計上せずにファイルシステムの容量を管理するために使用されます。
この Oracle Solaris リリースでは、特定のユーザーまたはグループが所有するファイルによって消費されるディスク領域の量に割り当て制限を設定できます。ファイルシステムバージョン 4 より古いファイルシステム上のボリューム、またはバージョン 15 より古いプール上のボリュームには、ユーザーおよびグループの割り当て制限プロパティーを設定できません。
ファイルシステムを管理するために、割り当て制限と予約の機能としてどれがもっとも役立つかを判断するには、次の点を考慮してください。
quota プロパティーと reservation プロパティーは、ファイルシステムとその子孫が消費するディスク容量を管理する場合に便利です。
refquota プロパティーと refreservation プロパティーは、ファイルシステムが消費するディスク容量を管理する場合に適しています。
refquota または refreservation プロパティーに、quota または reservation プロパティーより大きい値を設定しても、何の効果もありません。quota プロパティーまたは refquota プロパティーを設定した場合、どちらかの値を超えるような操作は失敗します。refquota より大きい値の quota 値を超える場合もあります。たとえば、スナップショットのブロックの一部が変更された場合は、refquota を超える前に実際に quota を超える可能性があります。
ユーザーおよびグループの割り当てを制限することによって、大学などのような、多数のユーザーアカウントが存在する環境でディスクスペースを簡単に管理できるようになります。
多くの異なるユーザーのための大規模なファイルシステム上に割り当て制限を設定するための便利な方法として、デフォルトのユーザーまたはグループ割り当て制限の設定があります。
割り当て制限と予約の設定方法の詳細については、ZFS ファイルシステムに割り当て制限を設定するおよびZFS ファイルシステムに予約を設定するを参照してください。
ZFS ファイルシステムの割り当て制限は、zfs set および zfs get コマンドを使用して設定および表示できます。次の例では、tank/home/jeff で 10G バイトの割り当て制限が設定されます。
$ zfs set quota=10G tank/home/jeff $ zfs get quota tank/home/jeff NAME PROPERTY VALUE SOURCE tank/home/jeff quota 10G local
割り当て制限を設定すると、zfs list および df コマンドの出力も変化します。例:
$ zfs list -r tank/home NAME USED AVAIL REFER MOUNTPOINT tank/home 1.45M 66.9G 36K /tank/home tank/home/eric 547K 66.9G 547K /tank/home/eric tank/home/jeff 322K 10.0G 291K /tank/home/jeff tank/home/jeff/ws 31K 10.0G 31K /tank/home/jeff/ws tank/home/lori 547K 66.9G 547K /tank/home/lori tank/home/mark 31K 66.9G 31K /tank/home/mark $ df -h /tank/home/jeff Filesystem Size Used Avail Use% Mounted on tank/home/jeff 10G 306K 10G 1% /tank/home/jeff
tank/home は 66.9G バイトのディスク容量を使用できますが、tank/home/jeff と tank/home/jeff/ws は、tank/home/jeff の割り当て制限のため、10G バイトのディスク容量しか使用できません。
ファイルシステムに refquota を設定して、ファイルシステムが消費できるディスク容量を制限できます。この制限には、子孫によって消費されたディスク容量は含まれません。たとえば、studentA の 10G バイトの割り当て制限は、スナップショットによって消費される容量によって影響されません。
$ zfs set refquota=10g students/studentA $ zfs list -t all -r students NAME USED AVAIL REFER MOUNTPOINT students 150M 66.8G 32K /students students/studentA 150M 9.85G 150M /students/studentA students/studentA@yesterday 0 - 150M - $ zfs snapshot students/studentA@today $ zfs list -t all -r students students 150M 66.8G 32K /students students/studentA 150M 9.90G 100M /students/studentA students/studentA@yesterday 50.0M - 150M - students/studentA@today 0 - 100M -
さらに利便性を高めるために、ファイルシステムに別の割り当て制限を設定して、スナップショットで消費されるディスク容量を管理することもできます。例:
$ zfs set quota=20g students/studentA $ zfs list -t all -r students NAME USED AVAIL REFER MOUNTPOINT students 150M 66.8G 32K /students students/studentA 150M 9.90G 100M /students/studentA students/studentA@yesterday 50.0M - 150M - students/studentA@today 0 - 100M -
このシナリオでは、studentA が refquota (10G バイト) の強い制限に到達する可能性がありますが、studentA は、スナップショットが存在している場合でも回復のためにファイルを削除することができます。
上の例では、2 つの割り当て制限 (10G バイトと 20G バイト) の小さいほうが、zfs list 出力に表示されています。両方の割り当て制限を表示するには、zfs get コマンドを使用します。例:
$ zfs get refquota,quota students/studentA NAME PROPERTY VALUE SOURCE students/studentA refquota 10G local students/studentA quota 20G local
ファイルシステムの割り当て制限を強制的に適用すると、数秒間の遅延が発生する可能性あります。この遅延が発生する場合は、ファイルシステムが割り当て制限を超えていることをシステムが通知し、EDQUOT エラーメッセージで追加の書き込みを拒否する前に、ユーザーがファイルシステム割り当て制限を超えている可能性があります。
ユーザー割り当て制限またはグループ割り当て制限を設定するには、それぞれ zfs userquota コマンドまたは zfs groupquota コマンドを使用します。例:
$ zfs create students/compsci $ zfs set userquota@student1=10G students/compsci $ zfs create students/labstaff $ zfs set groupquota@labstaff=20GB students/labstaff
現在のユーザーまたはグループの割り当て制限が次のように表示されます。
$ zfs get userquota@student1 students/compsci NAME PROPERTY VALUE SOURCE students/compsci userquota@student1 10G local $ zfs get groupquota@labstaff students/labstaff NAME PROPERTY VALUE SOURCE students/labstaff groupquota@labstaff 20G local
次のプロパティーのクエリーによって、ユーザーまたはグループの全般的なディスク領域使用状況を表示することができます。
$ zfs userspace students/compsci TYPE NAME USED QUOTA POSIX User root 350M none POSIX User student1 426M 10G $ zfs groupspace students/labstaff TYPE NAME USED QUOTA POSIX Group labstaff 250M 20G POSIX Group root 350M none
個々のユーザーやグループのディスク領域の使用状況を特定するには、次のプロパティーのクエリーを行います。
$ zfs get userused@student1 students/compsci NAME PROPERTY VALUE SOURCE students/compsci userused@student1 550M local $ zfs get groupused@labstaff students/labstaff NAME PROPERTY VALUE SOURCE students/labstaff groupused@labstaff 250 local
zfs get all dataset コマンドを使用しても、ユーザーおよびグループの割り当て制限プロパティーは表示されず、その他のすべてのファイルシステムプロパティーの一覧が表示されるだけです。
ユーザー割り当て制限またはグループ割り当て制限は、次のようにして解除することができます。
$ zfs set userquota@student1=none students/compsci $ zfs set groupquota@labstaff=none students/labstaff
ZFS ファイルシステムのユーザーおよびグループ割り当て制限で提供される機能は、次のとおりです。
親ファイルシステムで設定されたユーザー割り当て制限またはグループ割り当て制限は、自動的には子孫のファイルシステムに継承されません。
ただし、ユーザーまたはグループの割り当て制限が設定されているファイルシステムのクローンまたはスナップショットを作成した場合には、それらの割り当て制限が適用されます。同様に、zfs send コマンド (–R オプションなしでも可) を使用してストリームを作成した場合にも、ユーザーまたはグループの割り当て制限がファイルシステムに組み込まれます。
非特権ユーザーは、自身のディスク領域使用状況のみを確認することができます。root ユーザー、または userused 権限や groupused 権限を持っているユーザーは、あらゆるユーザーまたはグループのディスク領域アカウント情報にアクセスすることができます。
userquota および groupquota プロパティーは、ZFS ボリューム、バージョン 4 よりも古いファイルシステム、またはバージョン 15 よりも古いプールでは設定できません。
ユーザーまたはグループの割り当て制限が適用されるのが数秒遅れることがあります。そのような遅延が発生する場合は、ユーザーが割り当て制限を超えているのでこれ以上は書き込みが許可されないことが EDQUOT エラーメッセージによって通知される前にユーザーがユーザー割り当て制限を超えている可能性があります。
従来の quota コマンドを使用して、NFS 環境 (例えば、ZFS ファイルシステムがマウントされているものなど) におけるユーザーの割り当て制限を確認することができます。ユーザーが割り当て制限を超えている場合は、何もオプションを指定しなくても、quota コマンドだけで、出力情報が表示されます。例:
$ zfs set userquota@student1=10m students/compsci $ zfs userspace students/compsci TYPE NAME USED QUOTA POSIX User root 350M none POSIX User student1 550M 10M $ quota student1 Block limit reached on /students/compsci
ユーザーの割り当て制限をリセットして制限を超えることがないようにする場合は、quota –v コマンドを使用してユーザーの割り当てを確認することができます。例:
$ zfs set userquota@student1=10GB students/compsci $ zfs userspace students/compsci TYPE NAME USED QUOTA POSIX User root 350M none POSIX User student1 550M 10G $ quota student1 $ quota -v student1 Disk quotas for student1 (uid 102): Filesystem usage quota limit timeleft files quota limit timeleft /students/compsci 563287 10485760 10485760 - - - - -
Oracle Solaris 11.3 リリース以降では、特定の割り当て制限が定義されていないすべてのユーザーに自動的に適用されるデフォルトのユーザー割り当て制限またはデフォルトのグループ割り当て制限を設定できます。特定のユーザーおよびグループ割り当て制限と同様に、デフォルトのユーザーおよびグループ割り当て制限も子孫ファイルシステムには継承できません。さらに、デフォルトのユーザーまたはグループ割り当て制限が最上位ファイルシステム上に設定されている場合、子孫ファイルシステムで消費された容量は最上位ファイルシステムのデフォルトの割り当て制限に計上されません。
大規模な共有ファイルシステムでは、デフォルトのユーザー割り当て制限を設定できます。例:
$ zfs set defaultuserquota=30gb students/labstaff/admindata
大規模な共有ファイルシステムでデフォルトのユーザー割り当て制限を使用すると、個々のユーザー割り当て制限を指定することなく、容量の増大を制限できます。また、だれが最上位ファイルシステムを使用しているかをモニターすることもできます。
$ zfs userspace students/labstaff/admindata TYPE NAME USED QUOTA SOURCE POSIX User admin1 2.00G 30G default POSIX User admin2 4.00G 30G default POSIX User root 3K 30G default
上の例では、既存の割り当て制限が設定されていない各ユーザーに students/labstaff/admindata 内の 30G バイトのディスク容量が許可されます。この動作を students/labstaff/admindata に 30G バイトのファイルシステム割り当て制限を設定した場合と比較すると、30G バイトの累積の割り当て制限が、既存の割り当て制限が設定されていなかったすべてのユーザーに適用されます。
デフォルトのグループ割り当て制限も同様に設定できます。たとえば、次の構文は、students/math ファイルシステム上に 120G バイトの割り当て制限を設定します。zfs groupspace コマンドを使用すると、デフォルトのグループ割り当て制限で最上位ファイルシステムの使用状況を追跡できます。
$ zfs set defaultgroupquota=120g students/math $ zfs groupspace students/math TYPE NAME USED QUOTA SOURCE POSIX Group root 6K 120G default POSIX Group students 40.0G 120G default