目次


Linux の 101 試験対策

ディスク・クォータの管理

ディスク・スペースを共有する

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: Linux の 101 試験対策

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:Linux の 101 試験対策

このシリーズの続きに乞うご期待。

概要

このチュートリアルでは、ユーザーのディスク・クォータを管理する方法を学びます。このチュートリアルで説明する内容は以下のとおりです。

  • ファイルシステムのディスク・クォータをセットアップする方法
  • クォータで制限を設ける方法
  • クォータをチェックする方法
  • クォータに関するレポートを生成する方法

このチュートリアルは、LPIC-1: Linux Server Professional Certification 101 試験における主題 104 の項目 104.4 に備える上で役に立ちます。この項目は、重要度が 1 とされています。

ディスク・スペースを共有する

クォータは、ユーザーやグループによるディスクの使用量を制御するための機能です。クォータは、ファイルシステムでユーザーやグループがそれぞれに許可されている以上の容量を使用したり、ファイルシステムを占有したりしないように制限します。XFS ファイルシステムはディスク・クォータに加え、プロジェクト・クォータもサポートします。プロジェクト・クォータは、プロジェクトのディレクトリー・ツリーにどのユーザーがファイルを作成したかに関係なく、プロジェクトで使用する容量に制限を設けます。

クォータを有効にして管理することができるのは、root ユーザー、または root 権限を持つユーザーです。クォータはマルチユーザー・システムでよく使用されますが、シングル・ユーザーのワークステーションではそれほど使用されません。

このチュートリアルでは、XFS 以外のファイルシステムにおけるバージョン 2 のクォータと、XFS ファイルシステムにおける xfs クォータを取り上げます。LPI 101 試験で焦点としているのは、バージョン 2 のクォータであることに注意してください。

前提条件

この連載のチュートリアルを最大限に活用するには、Linux の基礎知識と、チュートリアルに記載されたコマンドを演習できる実際の Linux システムが必要です。特に記載のない場合、このチュートリアルの例で使用しているのは、CentOS 6 (カーネル 2.6.32-504) です。プログラムのバージョンによって出力のフォーマットに違いが出てくる場合もあるため、コマンドの実行結果は必ずしもここに記載するリストや図とまったく同じであるとは限りません。

また、チュートリアル「Linux の 101 試験対策: パーティションおよびファイルシステムの作成」で説明している内容についても十分に理解している必要があります。

テストのセットアップ

チュートリアルに記載する例をよく理解できるように、まずは、このチュートリアルで使用しているテスト用パーティションのセットアップについて説明します。ファイルの所有権とアクセス権についてすでに理解していて、クォータ・パッケージがインストール済みであれば、「クォータを有効にする」セクションまで読み飛ばして構いません。コマンドに関してはここでは簡単に説明するだけなので、developerWorks の LPIC-1 ロードマップで詳細を説明している連載の他のチュートリアルへのリンクを参照してください。

テスト用のパーティションとユーザー

このチュートリアルのデモでは、110 GB の ext4 パーティション (/dev/sdc6) と 40 GB の XFS パーティション (/dev/sdc3) を使用します。これらのパーティションはそれぞれ /quotatest/ext4、/quotatest/xfs にマウントされています。

リスト 1. パーティションをセットアップする
[root@attic4-cent ~]# mkfs -t ext4 /dev/sdc6
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=1 blocks, Stripe width=0 blocks
7045120 inodes, 28160000 blocks
1408000 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
860 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@attic4-cent ~]# mkfs -t xfs -i size=512 /dev/sdc3
mkfs.xfs: /dev/sdc3 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
[root@attic4-cent ~]# mkfs -t xfs -f -i size=512 /dev/sdc3
meta-data=/dev/sdc3              isize=512    agcount=16, agsize=655360 blks
         =                       sectsz=4096  attr=2, projid32bit=0
data     =                       bsize=4096   blocks=10485760, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=5120, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@attic4-cent ~]# mkdir -p /quotatest/ext4
[root@attic4-cent ~]# mkdir -p /quotatest/xfs
[root@attic4-cent ~]# mount /dev/sdc6 /quotatest/ext4
[root@attic4-cent ~]# mount /dev/sdc3 /quotatest/xfs

このチュートリアルの例では、一般ユーザーが新しいファイルシステムにファイルを作成できるようにします。ファイルシステムが作成されると、その所有者は root ユーザーになります。root ユーザーが所有するファイルシステムに、一般ユーザーがファイルやディレクトリーを作成することはできないので、新規ファイルシステムの所有権を変更して development というユーザーが新規ファイルシステムを所有するようにします。このユーザーは、同じく development という名前の専用グループを持ちます。development グループのユーザーもファイルとディレクトリーを作成できるように、ファイルシステムのアクセス権を変更します。リスト 2 に、所有権とアクセス権をセットアップする方法を示します。

リスト 2. テスト用パーティションのための所有権とアクセス権を変更する
[root@attic4-cent ~]# # Show default ownership and permissions
[root@attic4-cent ~]# ls -l /quotatest/
total 4
drwxr-xr-x. 3 root root 4096 Aug  7 15:51 ext4
drwxr-xr-x. 2 root root    6 Aug  7 15:56 xfs
[root@attic4-cent ~]# # Change user and group ownership to development
[root@attic4-cent ~]# chown development:development /quotatest/*
[root@attic4-cent ~]# # Allow group members to create files and directories
[root@attic4-cent ~]# chmod g+w /quotatest/*
[root@attic4-cent ~]# ls -l /quotatest/
total 4
drwxrwxr-x. 3 development development 4096 Aug  7 15:51 ext4
drwxrwxr-x. 2 development development    6 Aug  7 15:56 xfs
[root@attic4-cent ~]# # Set default group of new files and directories
[root@attic4-cent ~]# # to development
[root@attic4-cent ~]# chmod g+s /quotatest/ext4/
[root@attic4-cent ~]# ls -l /quotatest/
total 4
drwxrwsr-x. 3 development development 4096 Aug  7 15:51 ext4
drwxrwxr-x. 2 development development    6 Aug  7 15:56 xfs

SELinux (Security Enhanced Linux) を enforcing モードで使用している場合には、最後にセキュリティーのコンテキストを更新する必要があるかもしれません。fixfiles check を実行することで、コンテキストを更新する必要があるかどうかを調べ、fixfiles relabel を実行することで、/quotatest ツリーにラベルを付け直します (リスト 3 を参照)。次回ブート時にファイルシステム全体にラベルを付け直す方法をはじめとし、ラベルを付け直す他の方法については、man ページを参照してください。

リスト 3. SELinux のコンテキストをチェックして修正する
[root@attic4-cent ~]# # Check whether SELinux contexts need updating
[root@attic4-cent ~]# fixfiles check /quotatest
/sbin/restorecon reset /quotatest context unconfined_u:object_r:default_t:s0->
                                          unconfined_u:object_r:home_root_t:s0
/sbin/restorecon reset /quotatest/ext4 context system_u:object_r:file_t:s0->
                                               system_u:object_r:user_home_dir_t:s0
/sbin/restorecon reset /quotatest/ext4/lost+found context system_u:object_r:file_t:s0->
                                                          system_u:object_r:user_home_t:s0
/sbin/restorecon reset /quotatest/xfs context system_u:object_r:file_t:s0->
                                              system_u:object_r:user_home_dir_t:s0
[root@attic4-cent ~]# # Update SELinux contexts
[root@attic4-cent ~]# fixfiles relabel /quotatest

    Files in the /tmp directory may be labeled incorrectly, this command 
    can remove all files in /tmp.  If you choose to remove files from /tmp, 
    a reboot will be required after completion.
    
    Do you wish to clean out the /tmp directory [N]? n

チュートリアルの例では、それぞれのユーザー名と同じ名前の専用グループを持つ ian、mary、jenni という 3 人のユーザーも使用します。この 3 人のユーザーはいずれも development グループのメンバーです。

クォータ・パッケージの有無をチェックする

デスクトップ・システムを使用している場合、クォータ・パッケージはおそらくインストールされていません。通常のデフォルト・デスクトップ・インストールにはクォータが含まれていないためです。クォータ・パッケージがインストールされているかどうかをチェックするには、dpkg または rpm を使用します (リスト 4 を参照)。

リスト 4. クォータ・パッケージをチェックする
ian@ubuntu:~$ # Ubuntu 15.04
ian@ubuntu:~$ dpkg -l quota
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
un  quota          <none>       <none>       (no description available)

[root@attic4-cent ~]# # CentOS 6
[root@attic4-cent ~]# rpm -q quota
quota-3.17-21.el6_5.x86_64
[root@attic4-cent ~]# yum list installed quota
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: centos.mirror.nac.net
 * epel: archive.linux.duke.edu
 * extras: mirror.us.leaseweb.net
 * updates: mirror.netdepot.com
Installed Packages
quota.x86_64      1:3.17-21.el6_5       @anaconda-CentOS-201410241409.x86_64/6.6

このチュートリアルの Ubuntu 15.04 の例では、クォータ・パッケージがインストールされていません。一方で、CentOS 6 システムにはインストールされています。

クォータ・パッケージがインストールされていない場合には、連載のチュートリアル「Linux の 101 試験対策: Debian によるパッケージ管理」と「Learn Linux, 101: RPM and YUM package management」で、パッケージのインストール方法を調べてください。

クォータを有効にする

クォータ・サポートには、以下の 3 つのタイプがあります。

  1. バージョン 1 (カーネル 2.2 まで使われていたクォータ・フォーマット)
  2. バージョン 2 (カーネル 2.4 まで使われていたクォータ・フォーマット)
  3. xfs (XFS ファイルシステムでのクォータ)

クォータには、カーネル 2.4 以降で導入されているカーネル・サポートが必要です。カーネル 2.6 には必要なサポートが備わっています。

XFS クォータは常にジャーナリングされます。ジャーナリングされたバージョン 2 のクォータは、カーネル 2.6.11 以降でサポートされます。

バージョン 1 クォータ・サポートは「vfsold」と呼ばれることがあります。バージョン 2 クォータ・サポートは「vfsv0」(32 ビット UID / GID を使用している場合や、64 ビット空間の使用量と 32 ビット i ノードの使用量および制限に関するフォーマット) と呼ばれる場合と、「vfsv1」(64 ビット・クォータの制限および使用量に関するフォーマット) と呼ばれる場合があります。

クォータ・サポートを /etc/fstab に追加する

クォータを有効にするための次のステップは、ユーザー・クォータまたはグループ・クォータを実装するのか、あるいはその両方を実装するのかに応じて、/etc/fstab のファイルシステム定義に適切なオプションを追加することです。XFS ファイルシステムでは、ユーザー・クォータとグループ・クォータに加え、プロジェクト・クォータもサポートされます。

このチュートリアルを執筆している時点では、クォータを有効にするオプションを中心に説明している man ページはありません。表 1 に、使用できるオプションとそれぞれの適用対象となるクォータ・システムのタイプを記載します。

表 1. /etc/fstab でのクォータのオプション
オプション適用対象用途
usrquotaすべてのタイプユーザー・クォータを有効にする
usrjquota=filename vfsv0、vfsv1 (バージョン 2)ジャーナリングされたユーザー・クォータを有効にする (クォータ・データベース・ファイル名 (通常は aquota.user) と jqfmt オプションの指定が必要)
uquotaxfsusrquota と同様
grpquotaすべてのタイプグループ・クォータを有効にする
grpjquota=filenamevfsv0、vfsv1 (バージョン 2)ジャーナリングされたグループ・クォータを有効にする (クォータ・データベース・ファイル名 (通常は aquota.group) と jqfmt オプションの指定が必要)
gquotaxfsgrpquota と同様
prjquotaxfsプロジェクト・クォータを有効にする
pquotaxfsprjquota と同様
jqfmt=format vfsv0、vfsv1 (バージョン 2)usrjquota または grpjquota のいずれかが指定されている場合に使用されるクォータのフォーマット (現在サポートされるフォーマットは vfsv0、vfsv1 (バージョン 2) のみ)
quotavfsold (バージョン 1)、vfsv0、vfsv1 (バージョン 2)usrquota と同様
noquotavfsold (バージョン 1)、vfsv0、vfsv1 (バージョン 2)クォータを有効にしない
uqnoenforcexfsユーザー・クォータ・アカウンティングを有効にする一方、クォータ制限の適用を無効にする
gqnoenforcexfsグループ・クォータ・アカウンティングを有効にする一方、クォータ制限の適用を無効にする
pqnoenforcexfsプロジェクト・クォータ・アカウンティングを有効にする一方、クォータ制限の適用を無効にする

デモで使用するのは、ext4 パーティションと XFS パーティションです。これらのファイルシステムにユーザー・クォータとグループ・クォータを追加して、これらのクォータが 2 つの異なるファイルシステムでどのように機能するかを調べます。リスト 5 に、デモ用に設定した /etc/fstab のエントリーを記載します。

リスト 5. /etc/fstab においてクォータ・サポートを有効にする
/dev/sdc6  /quotatest/ext4  ext4    defaults,usrquota,grpquota          1 2
/dev/sdc3  /quotatest/xfs   xfs     defaults,usrquota,grpquota          1 2

ファイルシステムを再マウントする

/etc/fstab を編集してクォータを追加したら、ファイルシステムを再マウントしてください。XFS ファイルシステムでは、クォータ・データはファイルシステム・メタデータの一部であると見なされます。他のファイルシステムでは、ユーザー・クォータ情報はファイルシステムのルートにある aquota.user ファイルに保管され、グループ・クォータ情報は aquota.group に保管されます。バージョン 1 のクォータの場合には、quota.user と quota.group が使用されていました。XFS 以外のファイルシステムでは、ファイルシステムを再マウントした後に、クォータ・ファイルを作成して、クォータ・チェックを有効にする必要があります。quotacheck コマンドは、すべてのファイルシステムでクォータをチェックし、必要とされる aquota.user ファイルと aquota.group ファイルが存在しない場合には、これらのファイルを作成します。このコマンドは壊れたクォータ・ファイルを修復することもできます。詳細については、man ページを参照してください。

以下に示すのは、quotacheck コマンドで使用できる一般的なオプションから抜粋したものです。

-a または --all
マウントされているすべてのファイルシステム (NFS ファイルシステムを除く) を /etc/mtab でチェックします。
-c または --create-files
既存のクォータ・ファイルを無視し、新規にスキャンを実行して、その結果をディスクに書き込みます。
-u または --user
ユーザー・クォータをチェックします (これがデフォルトです)。
-g または --group
グループ・クォータをチェックします。
-v または --verbose
詳細を出力します。

リスト 6 に、ファイルシステムをアンマウントしてから、/etc/fstab の定義を使って再マウントし、新しく再マウントされたファイルシステム上で quotacheck コマンドを実行した場合の結果を示します。-a オプションを使用しない場合は、チェック対象のファイルシステムを指定する必要があります。

リスト 6. vfsold (バージョン 1) および vfsv0 または vfsv1 (バージョン 2) のクォータ・データベース・ファイルを作成する
[root@attic4-cent ~]# umount /quotatest/*
[root@attic4-cent ~]# mount /quotatest/ext4
[root@attic4-cent ~]# mount /quotatest/xfs
[root@attic4-cent ~]# quotacheck -augvc
quotacheck: Your kernel probably supports journaled quota but you are not using it. 
Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.
quotacheck: Scanning /dev/sdc6 [/quotatest/ext4] done
quotacheck: Cannot stat old group quota file /quotatest/ext4/aquota.group: No such file 
or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file /quotatest/ext4/aquota.group: No such file 
or directory. Usage will not be subtracted.
quotacheck: Checked 2 directories and 1 files
quotacheck: Old file not found.
quotacheck: Skipping /dev/sdc3 [/quotatest/xfs]
[root@attic4-cent ~]# # find the created quota ext4 files
[root@attic4-cent ~]# find /quotatest
/quotatest
/quotatest/ext4
/quotatest/ext4/aquota.group
/quotatest/ext4/lost+found
/quotatest/ext4/aquota.user
/quotatest/xfs

出力に以下のようなメッセージが含まれている場合、

quotacheck: Cannot create new quotafile /quotatest/ext4/aquota.user.new: Permission denied

おそらく SELinux のコンテキストは更新されていないので、前に戻って リスト 3 を調べてください。

上記メッセージでは、quotacheck コマンドからの警告として、ジャーナリングされたクォータの使用に切り替えるよう提案されていることに注目してください。この提案に従うには、/etc/fstab で、/dev/sdc6 の ext4 ファイルシステム用に設定されている以下のオプションを見つけてください。
defaults,usrquota,grpquota
上記のオプションを以下のように変更します。
defaults,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0

/etc/fstab を更新したら、ファイルシステムをもう一度マウントしなおす必要があります。

もう 1 つ注意する点として、quotacheck コマンドは XFS ファイルシステムをチェックしませんでした。これは、XFS クォータ構造はメタデータの一部としてジャーナリングされるためです。

クォータ・チェックを開始/停止する

vfsold および vfsv0 のクォータ・チェックを実施するには、quotaon コマンドを使ってクォータを起動しなければなりません。よく使われるオプションには、-a-g-u、および -v があり、それぞれの意味は quotacheck コマンドで使用する場合と同じです。同様に、-a オプションを指定しない場合には、ファイルシステムを指定する必要があります。クォータが起動されているのかどうかを確かめたいだけなら、-p オプションを使用してください。クォータ・チェックを停止するには quotaoff コマンドを使用します。リスト 7 に、クォータを起動するコマンドと停止するコマンド両方の例を記載します。

リスト 7. vfsold および vfsv0 クォータに対するクォータ・チェックを起動する
[root@attic4-cent ~]# quotaon -p /quotatest/ext4/
group quota on /quotatest/ext4 (/dev/sdc6) is off
user quota on /quotatest/ext4 (/dev/sdc6) is off
[root@attic4-cent ~]# quotaon -uagv
/dev/sdc6 [/quotatest/ext4]: group quotas turned on
/dev/sdc6 [/quotatest/ext4]: user quotas turned on
[root@attic4-cent ~]# quotaoff -ugv /quotatest/ext4/
/dev/sdc6 [/quotatest/ext4]: group quotas turned off
/dev/sdc6 [/quotatest/ext4]: user quotas turned off
[root@attic4-cent ~]# quotaon -ugv /quotatest/ext4/
/dev/sdc6 [/quotatest/ext4]: group quotas turned on
/dev/sdc6 [/quotatest/ext4]: user quotas turned on

XFS ファイルシステムの場合、ファイルが uqnoenforcegqnoenforce、または pqnoenforce オプションを使ってマウントされていない限り、クォータ・チェックがデフォルトで起動されます。xfs クォータを操作するには、xfs_quota コマンドで -x (expert の略) オプションを指定します。-x オプションを指定しないと、クォータ情報を表示することしかできません。このコマンドにはいくつかのサブコマンドがあり、例えば使用可能なサブコマンドの一覧を表示する help、全体的な状態を表示する state、クォータ・チェックを有効にする enable、クォータ・チェックを無効にする disable などを使用することができます。また、オプションの -u-g-p を指定すると、コマンドの実行対象がそれぞれユーザー、グループ、プロジェクトに絞られ、-v オプションを指定すると詳細が出力されます。さらに、このコマンドはコマンドライン・モードで実行することもできます。その場合、個々のサブコマンドは -c オプションで指定します。このオプションは複数のサブコマンドに対して何度でも使用することができます。サブコマンドにオプションを指定するとしたら、大抵の場合はサブコマンドを引用符で囲む必要があります。リスト 8 にいくつかの例を記載します。

リスト 8. xfs クォータに対するクォータ・チェックを起動する
[root@attic4-cent ~]# xfs_quota -x
xfs_quota> state
User quota state on /quotatest/xfs (/dev/sdc3)
  Accounting: ON
  Enforcement: ON
  Inode: #99 (2 blocks, 2 extents)
Group quota state on /quotatest/xfs (/dev/sdc3)
  Accounting: ON
  Enforcement: ON
  Inode: #100 (2 blocks, 2 extents)
Project quota state on /quotatest/xfs (/dev/sdc3)
  Accounting: OFF
  Enforcement: OFF
  Inode: #100 (2 blocks, 2 extents)
Blocks grace time: [7 days 00:00:30]
Inodes grace time: [7 days 00:00:30]
Realtime Blocks grace time: [7 days 00:00:30]
xfs_quota> disable
xfs_quota> quit
[root@attic4-cent ~]# xfs_quota -x  -c "enable -gu -v"  /quotatest/xfs
User quota state on /quotatest/xfs (/dev/sdc3)
  Accounting: ON
  Enforcement: ON
  Inode: #99 (2 blocks, 2 extents)
Group quota state on /quotatest/xfs (/dev/sdc3)
  Accounting: ON
  Enforcement: ON
  Inode: #100 (2 blocks, 2 extents)
Blocks grace time: [7 days 00:00:30]
Inodes grace time: [7 days 00:00:30]
Realtime Blocks grace time: [7 days 00:00:30]

ブート時にバージョン 1 クォータとバージョン 2 クォータをチェックする

このチュートリアルでは取り上げませんが、一般に quotacheck コマンドと quotaon コマンドは初期化スクリプトに組み込まれているので、クォータはシステムをリブートすると常に有効になります。詳細については、「Quota mini-HOWTO」を参照してください。ジャーナリングされたクォータを使用している場合には、ブート時に quotacheck を実行する必要はありません。

クォータ制限を設定する

これまでの説明でおわかりのように、クォータは、ファイルシステムのルートに置かれたバイナリー・ファイルで制御されるか、ファイルシステムのメタデータによって制御されるかのどちらかです。クォータを特定のユーザーに対して設定するには、edquota コマンドを使用します。このコマンドは、クォータが有効に設定されている各種のファイルシステムから、指定のユーザーのクォータ情報を抽出して一時ファイルを作成し、クォータを調整するためのエディターを開きます。デフォルトで edquota が使用するのは、vi エディターです。別のエディターを使用する場合には、EDITOR または VISUAL 環境変数を設定してください。ユーザー・クォータを編集するには、-u オプション (デフォルト) でユーザー名を 1 つ以上指定します。グループ・クォータを編集する場合は、-g オプションを使ってグループ名を 1 つ以上指定します。

クォータは root ユーザーでないと編集することができません。リスト 9 に一例として、vi をエディターとして使用した場合に表示される情報を記載します。

リスト 9. edquota -u ian を実行する
Disk quotas for user ian (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdc6                         0          0          0          0        0        0
  /dev/sdc3                         0          0          0          0        0        0

リスト 9 を見るとわかるように、edquota によって表示されるのは、クォータが有効に設定された各ファイルシステムで私が現在使用している 1 K のブロック (blocks) と i ノード (inodes) の量です。また、ブロックと i ノードの両方に対するソフト制限 (soft) とハード制限 (hard) も表示されます。上記の例ではいずれも 0 となっていますが、これはクォータ制限が適用されていないことを意味します。

ソフト制限の値に達すると、ユーザーはクォータを超えているという警告を e-メールで受信します。ハード制限の値は、ユーザーが超えてはならない値です。ブロック制限は、ユーザーが保管できるデータ量のおおよその制限、そして i ノード制限はファイルおよびディレクトリー数の制限であると考えてください。

クォータ制限を変更する

クォータ制限を変更するには、一時ファイルで値を変更して保存します。値を変更しても、ファイルを保存しないで閉じれば、変更は適用されません。以降の例ではクォータ制限の効果を簡単に見て取れるように、極めて小さな値を制限として適用し、テスト用ファイルシステムのそれぞれでクォータを 10 MB のデータと 50 のファイルに設定することにします。ハード制限にはソフト制限の 10% を加算します (リスト 10 を参照)

リスト 10. 制限を設定する
Disk quotas for user ian (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdc6                         0      11264          0          0       50       55
  /dev/sdc3                         0      11264          0          0       50       55

ファイルを保存すると、新しいクォータが適用されます。ただし、すでに使用されているブロックまたは i ノードに対して値を変更しても、その変更は無視されることに注意してください。

クォータをコピーする

今度は、他の開発者の ID を作成する場合を考えてみてください。mary と jenni というユーザーがいて、この両方に ian と同じクォータを割り当てるとします。この場合、edquota-p オプションを使用すれば、ian のクォータ値が他のユーザーのクォータ値のプロトタイプとして使用されることになります (リスト 11 を参照)。

リスト 11. プロトタイプによるクォータの設定
[root@attic4-cent ~]# edquota -p ian mary jenni

グループ制限

edquota は、ファイルのグループ所有権ごとにディスク・スペースの割り当てを制限するために使用することもできます。例えば、上記の 3 人の開発者が development グループのメンバーであり、このグループの全メンバーが使用する合計容量を 250 MB および 100 ファイルに制限するとします。それには、コマンド edquota -g development を使用して、容量とファイル数の値を設定します (リスト 12 を参照)。

リスト 12. グループに対するクォータを設定する
Disk quotas for group development (gid 1002):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdc6                         4      25600      28160          1      100      110
  /dev/sdc3                         0      25600      28160          1      100      110

/dev/sdc6 の ext4 ファイルシステムで、どうしてすでに使用されているブロックと i ノードがあるのか不思議に思うかもしれませんが、リスト 2 をもう一度見てください。ここでは chownchmod を使用して、すべての新規ファイルのデフォルト・グループが development グループになるように設定しました。この設定が、2 つのクォータ・データベース・ファイルにも適用されているというわけです。これらの設定を root のグループに戻すには、リスト 13 のように変更します。この際、必ずクォータ・チェックを無効にしてから変更を行い、その後にクォータ・チェックをもう一度有効に設定することを忘れないでください。

リスト 13. クォータ・データベース・ファイルのグループ所有者の再設定
[root@attic4-cent ~]# quotaoff /quotatest/ext4/
[root@attic4-cent ~]# chown :root /quotatest/ext4/aquota.*
[root@attic4-cent ~]# quotaon /quotatest/ext4

猶予期間

ユーザーまたはグループは、猶予期間中は設定されたソフト制限を超えることが許されています。猶予期間のデフォルトは、7 日間です。猶予期間が過ぎると、ソフト制限はハード制限に切り替わります。ハード制限に達すると、一部のファイルを削除してからでないと、新しいファイルを作成できなくなります。猶予期間を設定するには、edquota -t を使用します。この場合もエディターが開き、リスト 14 のようなデータが表示されます。前と同じく、変更を保存すると値が更新されます。必ず、ユーザーが警告 e-メールを受信してから適宜ファイルを削除するのに十分な時間を設定してください。

リスト 14. 猶予期間を設定する
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesystem             Block grace period     Inode grace period
  /dev/sdc6                     7days                  7days
  /dev/sdc3                     7days                  7days

クォータをチェックする

オプションを指定しないで quota コマンドを実行すると、コマンドを呼び出したユーザーがクォータを設定しているファイルシステムのうち、そのユーザーのファイルが存在するファイルシステムのクォータが表示されます。クォータが有効になっているすべてのファイルシステムでのクォータ情報を表示するには、-v オプションを使用します。root ユーザーであれば、このコマンドにユーザー名を追加して、その特定のユーザーのクォータを表示することもできます。リスト 15 には、ext4 ファイルシステムに 1 MB のファイルを作成して、-v オプションを使用した場合と使用しない場合の quota コマンドの使用例を示しています。

リスト 15. クォータを表示する
[ian@attic4-cent ~]$ dd if=/dev/zero of=/quotatest/ext4/ianfile1 bs=1024 count=1024
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.00736743 s, 142 MB/s
[ian@attic4-cent ~]$ quota
Disk quotas for user ian (uid 1000): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdc6    1024   11264       0               1      50      55        
[ian@attic4-cent ~]$ quota -v
Disk quotas for user ian (uid 1000): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdc6    1024   11264       0               1      50      55        
      /dev/sdc3       0   11264       0               0      50      55

現在の使用量に関する統計と併せて、クォータのソフト制限とハード制限も表示されます。ファイルを作成した直後に quota コマンドを実行すると、値がわずかに大きいブロック・カウントが短時間、表示されるはずです。

リスト 16 に、ソフト制限を超えた場合に何が起こるのか、続いてハード制限を超える容量を使用しようとした場合に何が起こるのかを示します。この例では、前に作成した 1 MB のファイルの他、ソフト制限を超えるのに十分な大きさとして 9.5 MB のファイルを追加しています。ソフト制限の値の横にあるアスタリスクに注目してください。これは、ユーザーがクォータ制限を超えて使用していることを示します。また、猶予期間の列には、ユーザーが問題を修正するまでに残されている期間が示されていることにも注目してください。このリストの最後では 1 MB のファイルのコピーを作成しようとしていますが、この操作は失敗します。1 MB のファイルのコピーを作成すると、ユーザー ian のハード制限を超えてしまうためです。

リスト 16. ブロック・クォータを超える
[ian@attic4-cent ~]$ dd if=/dev/zero of=/quotatest/ext4/ianfile2 bs=1024 count=9500
9500+0 records in
9500+0 records out
9728000 bytes (9.7 MB) copied, 0.0503342 s, 193 MB/s
[ian@attic4-cent ~]$ quota
Disk quotas for user ian (uid 1000): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdc6   10524   11264       0               2      50      55        
[ian@attic4-cent ~]$ cp /quotatest/ext4/ianfile1 /quotatest/ext4/ianfile3
sdc6: warning, user block quota exceeded.
[ian@attic4-cent ~]$ quota
Disk quotas for user ian (uid 1000): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdc6   11548*  11264       0   6days       3      50      55

i ノード (ファイル) クォータを超えた場合に何が起きるかを説明するために、ユーザー jenni に切り替えて /quotatest/ext4 に空のファイルを 52 個作ります。リスト 17 にその結果を示します。

リスト 17. jenni のファイル・クォータを超える
[jenni@attic4-cent ~]$ for n in $(seq 1 52); do touch /quotatest/ext4/jenni$n;done
sdc6: warning, user file quota exceeded.
[jenni@attic4-cent ~]$ quota
Disk quotas for user jenni (uid 1004): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdc6       0   11264       0              52*     50      55   7days

クォータ・レポート

ユーザーのクォータを一度に 1 人ずつチェックするのはあまり有効な方法ではありません。そこで、repquota コマンドを使用してクォータ・レポートを生成するという方法があります。リスト 18 に、/quotatest/ext4/ でのすべてのユーザーおよびグループのクォータを調べる方法を示します。

リスト 18. クォータ・レポートを生成する
[root@attic4-cent ~]# repquota -ug /quotatest/ext4
*** Report for user quotas on device /dev/sdc6
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      16       0       0              1     0     0       
ian       +-   11548   11264       0  6days      22    50    55       
development --       4       0       0              1     0     0       
jenni     -+       0   11264       0             52    50    55  6days
mary      --    1024   11264       0             35    50    55       


*** Report for group quotas on device /dev/sdc6
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
Group           used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      16       0       0              1     0     0       
development -+   12576   25600   28160            110   100   110  7days

リスト 18 のユーザー ian と jenni、そして development グループに示されているプラス記号は、それぞれがクォータを超過していることを示します。具体的には、ユーザー ian はデータ量の制限を超えていて、ユーザー jenni はファイル数の制限を超えています。development グループも、ファイル数の制限を超えています。

他のクォータ関連のコマンドと同じく、-a オプションを指定すると、クォータが有効に設定されているすべてのマウント済みファイルシステムを対象としたレポートが生成されます。さらに詳細な出力を生成するには、-v オプションを使用します。-n オプションは、ユーザー番号を名前に解決せずに、数値によるユーザー番号を基準としたリストを生成するので、レポートが大規模な場合にはパフォーマンスが向上することになりますが、通常は人間にとって読みにくいレポートとなります。

XFS ファイルシステムでのプロジェクト・クォータ

xfs クォータ・システムは、プロジェクト・クォータもサポートします。プロジェクト・クォータはグループ・クォータの代わりとなる手段なので、1 つの XFS ファイルシステムでグループ・クォータとプロジェクト・クォータを同時に使用することはできません。プロジェクト・クォータを有効にするには、prjquota (または pquota) を /etc/fstab に追加する必要があります。

プロジェクト・クォータは数値の ID とより説明的なプロジェクト名の概念を使用します。数値によるプロジェクト ID をディレクトリー・ツリーにマッピングするには /etc/projects ファイル、数値によるプロジェクト ID をプロジェクト名にマッピングするには /etc/projid ファイルが使用されます。/etc にあるこの 2 つのファイルを使わずに操作することも可能ですが、そうなるとやや面倒なことになります。詳細については man ページを参照してください。

プロジェクト・クォータを設定するには、xfs_quota コマンドをエキスパート・モード (-x オプション) で使用してください。まず、-s オプションを指定した project サブコマンドを使用して、影響を受けるすべての i ノードをプロジェクトの一部としてマークすることにより、プロジェクト・クォータをセットアップします。次に、limit サブコマンドを使用してハード制限またはソフト制限を設定します。リスト 19 に示しているのは、/quotatest/xfs/proj-dir1 の下にプロジェクト・ツリーをセットアップし、プロジェクト・クォータのハード制限を 15 M に設定する例です。この例では説明のために、proj-dir1 と並列の位置に制限なしの /quotatest/xfs/proj-dir2 もセットアップしています。

リスト 19. xfs プロジェクト・クォータをセットアップする
[root@attic4-cent ~]# mkdir -m ag+w /quotatest/xfs/proj-dir{1,2}
[root@attic4-cent ~]# chown development:development /quotatest/xfs/proj-dir*
[root@attic4-cent ~]# echo "50:/quotatest/xfs/proj-dir1" >> /etc/projects
[root@attic4-cent ~]# echo "dev-projects:50" >> /etc/projid
[root@attic4-cent ~]# xfs_quota -x
xfs_quota> path
      Filesystem          Pathname
 000  /quotatest/xfs      /dev/sdc3 (uquota, gquota)
[001] /quotatest/xfs/proj-dir1 /dev/sdc3 (project 50, dev-projects)
xfs_quota> project -s dev-projects
Setting up project dev-projects (path /quotatest/xfs/proj-dir1)...
Processed 1 (/etc/projects and cmdline) paths for project dev-projects with 
recursion depth infinite (-1).
xfs_quota> limit -p bhard=15m dev-projects
xfs_quota> q

プロジェクト・クォータの動作を説明するため、ユーザー chris にいくつかのファイルを作成させます。ユーザー chris は development グループのメンバーではなく、その ID やグループに対するクォータの設定はありません。リスト 20 に示されているように、chris は /quotatest/xfs/proj-dir1 に 15 MB を超えるデータを作成することはできませんが、/quotatest/xfs/proj-dir2 では制限なくデータを作成することができます。

リスト 20. プロジェクト・クォータの動作
[chris@attic4-cent ~]$ id chris
uid=1006(chris) gid=1006(chris) groups=1006(chris)
[chris@attic4-cent ~]$ cd /quotatest/xfs/
[chris@attic4-cent xfs]$ dir
proj-dir1  proj-dir2
[chris@attic4-cent xfs]$ dd if=/dev/zero of=proj-dir1/chris1 bs=1024 count=10000
10000+0 records in
10000+0 records out
10240000 bytes (10 MB) copied, 0.0386164 s, 265 MB/s
[chris@attic4-cent xfs]$ cp proj-dir1/chris1 proj-dir1/chris2
cp: writing `proj-dir1/chris2': No space left on device
[chris@attic4-cent xfs]$ ls -l proj-dir1
total 15356
-rw-rw-r--. 1 chris chris 10240000 Aug  8 18:01 chris1
-rw-rw-r--. 1 chris chris  5484544 Aug  8 18:01 chris2
[chris@attic4-cent xfs]$ # Note: second copy was truncated at hard limit
[chris@attic4-cent xfs]$ cp proj-dir1/chris1 proj-dir2/chris1
[chris@attic4-cent xfs]$ cp proj-dir1/chris1 proj-dir2/chris2
[chris@attic4-cent xfs]$ cp proj-dir1/chris1 proj-dir2/chris3
[chris@attic4-cent xfs]$ du -sh *
15M	proj-dir1
30M	proj-dir2
[chris@attic4-cent xfs]$ du -sh $(find /quotatest/xfs/proj-dir1 -user chris)
9.8M	/quotatest/xfs/proj-dir1/chris1
5.3M	/quotatest/xfs/proj-dir1/chris2
[chris@attic4-cent xfs]$ du -sh $(find /quotatest/xfs/proj-dir2 -user chris)
9.8M	/quotatest/xfs/proj-dir2/chris1
9.8M	/quotatest/xfs/proj-dir2/chris2
9.8M	/quotatest/xfs/proj-dir2/chris3

ユーザーへの警告

クォータ制限を超えて使用しているユーザーに e-メールで警告を送信するために使用されるのは、warnquota コマンドです。グループがクォータ制限を超えて使用すると、そのグループの /etc/quotagrpadmins に指定されているユーザーに e-メールが送信されます。e-メールのフォーマットを制御するファイルは /etc/warnquota.conf です。/dev/sdc6 のような名前を「Shared EXT3 filesystem」のようなユーザーにわかりやすい説明にマッピングするためには、/etc/quotatab ファイルが使用されます。一般に、warnquota コマンドは cron ジョブとして定期的に実行されます。詳細については、cron および warnquota の man ページを参照してください。

これで、Linux におけるクォータについての概要の説明は終わりです。


ダウンロード可能なリソース


関連トピック

  • developerWorks Premium のメンバーになると、強力なツールや Safari Books Online から集めて管理する技術ライブラリーをすべて自由に利用できるほか、カンファレンスの割引を受けることや、カンファレンスの記録を閲覧することができ、さらには SoftLayer や Bluemix を利用できるクレジットが提供されるなど、さまざまな特典があります。
  • 2015年 4月時点での LPI のバージョン 4.0 の試験項目に基づく LPIC-1 認定に備えて勉強するのに役立つ developerWorks のチュートリアルを見つけるには、developerWorks の LPIC-1 ロードマップを利用してください。
  • Linux Professional Institute の Web サイトで、LPIC の詳細な試験項目、課題のリスト、例題を調べてください。特に以下のページを参照してください。 必ず Linux Professional Institute の Web サイトで最新の項目を参照してください。
  • クォータに関する疑問の答えを見つけるには、「Quota mini-HOWTO」が役立ちます。
  • Security Enhanced Linux (SELinux) について、SELinux Project Wiki で詳しく調べてください。
  • The Linux Documentation Project には、HOWTO 文書をはじめ、各種の有益な文書が豊富に揃っています。
  • さまざまな IBM 製品や IT 業界のトピックに焦点を絞った developerWorks テクニカル・イベントで最新の技術情報を入手してください。
  • Twitter で developerWorks をフォローしてください。

コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=1030370
ArticleTitle=Linux の 101 試験対策: ディスク・クォータの管理
publish-date=04282016