Linux の 101 試験対策: ディスク・クォータの管理

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

個々のユーザーが許容されている容量以上のスペースを使用したり、ファイルシステム全体が想定外にもフルになったりしないように、Linux® ファイルシステムにディスク・クォータを設定してチェックする方法を学んでください。この記事の内容は、Linux のシステム管理者として認定するための LPI 101 試験に備えるためにも、クォータについて学ぶ上でも役立ちます。

Ian Shields, Senior Programmer, IBM

Ian ShieldsIan Shields は、developerWorks Linux ゾーンの様々な Linux プロジェクトに関わっています。彼はノースキャロライナ州 Research Triangle Park にある IBM のシニア・プログラマーです。1973年にオーストラリアのキャンベラでシステム・エンジニアとして IBM に入社して以来、カナダのモントリオールやノースキャロライナ州 Research Triangle Park で、コミュニケーション・システムやパーベイシブ・コンピューティングに携わってきました。彼はいくつかの特許を保持しています。Australian National University にて純粋数学および哲学で学位を取得し、また North Carolina State University にてコンピューター・サイエンスで修士号と博士号を取得しています。Ian について詳しく知るには、My developerWorks で彼のプロフィールを見てください。


developerWorks 貢献著者レベル

2010年 11月 30日

このシリーズについて

この連載は Linux システム管理タスクの学習に役立つだけでなく、LPIC-1 (Linux Professional Institute Certification レベル 1) 試験に備えるための教材にもなります。

連載の各記事についての説明とリンクについては、developerWorks の LPIC-1 ロードマップを参照してください。現在進行中のこのロードマップは、LPIC-1 試験の最新の目標 (2009年 4月) を反映しています。完成した記事はその都度ロードマップに追加されていきますが、当面は developerWorks の LPI 認定試験対策チュートリアルで同様の教材の以前のバージョンを調べてください。これらのバージョンは、2009年 4月より前の LPIC-1 目標に対応しています。

概要

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

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

特に断りのない限り、記事に記載する例では、カーネル 2.6.34 を搭載した Fedora 13 を使用しています。他のシステムでは、結果が異なる場合もあります。

この記事は、Linux Professional Institute の Junior Level Administration (LPIC-1) 101 試験の主題 104 の目標 104.4 の試験対策となります。この目標の重要度は 1 です。

前提条件

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

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


クォータについて

Ian とつながるには

Ian は developerWorks で人気の高いお馴染みの著者の 1 人です。Ian が書いたすべての developerWorks 記事を閲覧してみてください。また、My developerWorks では、Ian のプロフィールを調べることや、彼やその他の著者、そして他の読者とつながることができます。

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

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

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

  1. vfsold (バージョン 1 のクォータ)
  2. vfsv0 (バージョン 2 のクォータ)
  3. xfs (XFS ファイルシステムでのクォータ)

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

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

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


テストのセットアップ

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

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

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

リスト 1. パーティションのセットアップ
[root@echidna ~]# mkfs -t ext4 /dev/sda7
mke2fs 1.41.10 (10-Feb-2009)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
7159808 inodes, 28637862 blocks
1431893 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
874 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 28 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@echidna ~]# mkfs -t xfs /dev/sda8
meta-data=/dev/sda8              isize=256    agcount=4, agsize=2622108 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=10488429, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=5121, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@echidna ~]# mkdir -p /quotatest/ext4
[root@echidna ~]# mkdir -p /quotatest/xfs
[root@echidna ~]# mount /dev/sda7 /quotatest/ext4
[root@echidna ~]# mount /dev/sda8 /quotatest/xfs

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

リスト 2. テスト用パーティションのための所有権およびアクセス権の変更
[root@echidna ~]# # Show default ownership and permissions
[root@echidna ~]# ls -l /quotatest/
total 4
drwxr-xr-x. 3 root root 4096 Nov 18 22:43 ext4
drwxr-xr-x. 2 root root    6 Nov 18 22:43 xfs
[root@echidna ~]# # Change user and group ownership to development
[root@echidna ~]# chown development:development /quotatest/*
[root@echidna ~]# # Allow group members to create files and directories
[root@echidna ~]# chmod g+w /quotatest/*
[root@echidna ~]# ls -l /quotatest/
total 4
drwxrwxr-x. 3 development development 4096 Nov 18 22:43 ext4
drwxrwxr-x. 2 development development    6 Nov 18 22:43 xfs
[root@echidna ~]# # Set default group of new files and directories
[root@echidna ~]# # to development
[root@echidna ~]# chmod g+s /quotatest/ext4/
[root@echidna ~]# ls -l /quotatest/
total 4
drwxrwsr-x. 3 development development 4096 Nov 19 11:39 ext4
drwxrwxr-x. 2 development development    6 Nov 18 22:43 xfs

記事の例では、それぞれのユーザー名と同じ名前の専用グループを持つ ian、gretchen、tom という 3 人のユーザーも使用します。この 3 人のユーザーはいずれも development グループのメンバーです。

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

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

リスト 3. クォータ・パッケージのチェック
# On Debian-based systems
ian@pinguino:~$ 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        Description
+++-==============-==============-============================================
ii  quota          4.00~pre1-3    implementation of the disk quota system

# On systems that use RPM
[ian@echidna ~]$ rpm -q quota
quota-3.17-11.fc13.x86_64

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


クォータの有効化

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

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

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

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

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

リスト 4. /etc/fstab でのクォータ・サポートの有効化
/dev/sda7  /quotatest/ext4  ext4    defaults,usrquota,grpquota          1 2
/dev/sda8  /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
詳細を出力します。

リスト 5 に、再マウントしたばかりのファイルシステムで quotacheck コマンドを実行した結果を記載します。-a オプションを使用しない場合は、チェック対象のファイルシステムを指定する必要があります。

リスト 5. vfsold および vfsv0 のクォータ・データベース・ファイルの作成
[root@echidna ~]# quotacheck -augvc
quotacheck: Skipping /dev/sda8 [/quotatest/xfs]
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/sda7 [/quotatest/ext4] done
quotacheck: Cannot stat old user quota file: No such file or directory
quotacheck: Cannot stat old group quota file: No such file or directory
quotacheck: Cannot stat old user quota file: No such file or directory
quotacheck: Cannot stat old group quota file: No such file or directory
quotacheck: Checked 2 directories and 1 files
quotacheck: Old file not found.
quotacheck: Old file not found.

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

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

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

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

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

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

リスト 7. xfs クォータに対するクォータ・チェックの起動
[root@echidna ~]# xfs_quota -x
xfs_quota> state
User quota state on /quotatest/xfs (/dev/sda8)
  Accounting: ON
  Enforcement: ON
  Inode: #131 (3 blocks, 3 extents)
Group quota state on /quotatest/xfs (/dev/sda8)
  Accounting: ON
  Enforcement: ON
  Inode: #132 (3 blocks, 3 extents)
Project quota state on /quotatest/xfs (/dev/sda8)
  Accounting: OFF
  Enforcement: OFF
  Inode: #132 (3 blocks, 3 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@echidna ~]# xfs_quota -x  -c "enable -gu -v"  /quotatest/xfs
User quota state on /quotatest/xfs (/dev/sda8)
  Accounting: ON
  Enforcement: ON
  Inode: #131 (3 blocks, 3 extents)
Group quota state on /quotatest/xfs (/dev/sda8)
  Accounting: ON
  Enforcement: ON
  Inode: #132 (3 blocks, 3 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]

ブート時に vfsold および vfsv0 クォータをチェックする

この記事の範囲ではありませんが、一般に quotacheck コマンドと quotaon コマンドは初期化スクリプトに組み込まれているので、クォータはシステムをリブートすると常に有効になります。詳細については、「Quota Mini HOWTO」(「参考文献」にリンクを記載) を参照してください。ジャーナリングされたクォータを使用している場合には、ブート時に quotacheck を実行する必要はありません。


クォータ制限の設定

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

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

リスト 8. edquota の実行
Disk quotas for user ian (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda7                         0          0          0          0        0        0
  /dev/sda8                         0          0          0          0        0        0
~
~

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

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

クォータ制限を変更する

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

リスト 9. 制限の設定
Disk quotas for user ian (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda7                         0      10240      11264          0       50       55
  /dev/sda8                         0      10240      11264          0       50       55

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

クォータをコピーする

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

リスト 10. プロトタイプによるクォータの設定
root@pinguino:~# edquota -p ian gretchen tom

グループ制限

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

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

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

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

猶予期間

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

リスト 13. 猶予期間の設定
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/sda7                     7days                  7days
  /dev/sda8                     7days                  7days

クォータのチェック

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

リスト 14. クォータの表示
[ian@echidna ~]$ 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.00793796 s, 132 MB/s
[ian@echidna ~]$ quota
Disk quotas for user ian (uid 1000):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda7    1024   10240   11264               1      50      55
[ian@echidna ~]$ quota -v
Disk quotas for user ian (uid 1000):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda7    1024   10240   11264               1      50      55
      /dev/sda8       0   10240   11264               0      50      55

現在の使用量に関する統計と併せて、クォータのソフト制限とハード制限も表示されます。ファイルを作成した直後に quota コマンドを実行すると、値がわずかに大きいブロック・カウントが短時間、表示されるはずです。リスト 15 に、ソフト制限を超えた場合に何が起こるのか、続いてハード制限を超える容量を使用しようとした場合に何が起こるのかを示します。この例では、前に作成した 1MB のファイルの他、ソフト制限を超えるのに十分な大きさとして 9.5MB のファイルを追加しています。ソフト制限の値の横にあるアスタリスクに注目してください。これは、ユーザーがクォータ制限を超えて使用していることを示します。また、猶予期間の列には、ユーザーが問題を修正するまでに残されている期間が示されていることにも注目してください。このリストの最後では 1MB のファイルのコピーを作成しようとしていますが、この操作は失敗します。1MB のファイルのコピーを作成すると、ユーザー ian のハード制限を超えてしまうためです。

リスト 15. クォータ制限の超過
[ian@echidna ~]$ 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.0754223 s, 129 MB/s
[ian@echidna ~]$ quota
Disk quotas for user ian (uid 1000):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda7   10552*  10240   11264   7days       2      50      55
[ian@echidna ~]$ cp /quotatest/ext4/ianfile1 /quotatest/ext4/ianfile3
cp: writing `/quotatest/ext4/ianfile3': Disk quota exceeded

クォータ・レポート

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

リスト 16. クォータ・レポートの生成
[root@echidna ~]# repquota -ug /quotatest/ext4/
*** Report for user quotas on device /dev/sda7
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      24       0       0              2     0     0
ian       +-   11260   10240   11264  6days       3    50    55
gretchen  --    2080   10240   11264             44    50    55
tom       -+     660   10240   11264             55    50    55  6days
development --       4       0       0              1     0     0


*** Report for group quotas on device /dev/sda7
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
Group           used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      24       0       0              2     0     0
development -+   14004   25600   28160            103   100   110  7days

リスト 16 のユーザー ian と tom、そして development グループに示されているプラス記号は、それぞれがクォータを超過していることを示します。具体的には、ユーザー ian はデータ量の制限を超えていて、ユーザー tom はファイル数の制限を超えています。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 サブコマンドを使用してハード制限またはソフト制限を設定します。リスト 17 に示しているのは、/quotatest/xfs/proj-dir1 の下にプロジェクト・ツリーをセットアップし、プロジェクト・クォータのハード制限を 15M に設定する例です。この例では説明のために、proj-dir1 と並列の位置に制限なしの /quotatest/xfs/proj-dir2 もセットアップしています。

リスト 17. xfs プロジェクト・クォータのセットアップ
[root@echidna ~]# mkdir -m ag+w /quotatest/xfs/proj-dir{1,2}
[root@echidna ~]# chown development:development /quotatest/xfs/proj-dir*
[root@echidna ~]# echo "50:/quotatest/xfs/proj-dir1" >> /etc/projects
[root@echidna ~]# echo "dev-projects:50" >> /etc/projid
[root@echidna ~]# xfs_quota -x
xfs_quota> path
      Filesystem          Pathname
 000  /quotatest/xfs      /dev/sda8 (uquota, pquota)
[001] /quotatest/xfs/proj-dir1 /dev/sda8 (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 やグループに対するクォータの設定はありません。リスト 18 に示されているように、chris は /quotatest/xfs/proj-dir1 に 15MB を超えるデータを作成することはできませんが、/quotatest/xfs/proj-dir2 では制限なくデータを作成することができます。

リスト 18. プロジェクト・クォータの動作
[chris@echidna xfs]$ id chris
uid=1010(chris) gid=1010(chris) groups=1010(chris)
[chris@echidna 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.0379557 s, 270 MB/s
[chris@echidna xfs]$ cp proj-dir1/chris1 proj-dir1/chris2
cp: writing `proj-dir1/chris2': No space left on device
[chris@echidna xfs]$ ls -l proj-dir1
total 15356
-rw-rw-r--. 1 chris chris 10240000 Nov 23 13:16 chris1
-rw-rw-r--. 1 chris chris  5484544 Nov 23 13:16 chris2
[chris@echidna xfs]$ # Note: second copy was truncated at hard limit
[chris@echidna xfs]$ cp proj-dir1/chris1 proj-dir2/chris1
[chris@echidna xfs]$ cp proj-dir1/chris1 proj-dir2/chris2
[chris@echidna xfs]$ cp proj-dir1/chris1 proj-dir2/chris3
[chris@echidna xfs]$ du -sh *
15M     proj-dir1
30M     proj-dir2

ユーザーへの警告

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

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

参考文献

学ぶために

  • 2009年4月時点での目標に基づく LPIC-1 認定に備えるために必要な developerWorks の記事を見つけるには、developerWorks の LPIC-1 ロードマップを利用してください。
  • LPIC Program サイトで、Linux Professional Institute の 3 つの Linux システム管理資格認定レベルについて、詳しい目標、タスクのリスト、そして出題例を調べてください。特に、2009年4月時点での LPI 101 試験および LPI 102 試験の目標は要チェックです。最新の目標については、必ず LPIC Program サイトを参照してください。
  • developerWorks の連載「LPI exam prep」をすべて読んで、Linux の基礎を学び、2009年 4月以前の LPI 試験の目標に基づくシステム管理者認定試験に備えてください。
  • クォータに関する疑問の答えを見つけるには、「Quota mini-HOWTO」が役立ちます。
  • The Linux Documentation Project には、HOWTO 文書をはじめ、各種の有益な文書が豊富に揃っています。
  • developerWorks Linux ゾーンで、Linux 開発者および管理者向けのハウツー記事とチュートリアル、そしてダウンロード、ディスカッション、フォーラムなど、豊富に揃った資料を探してください。
  • さまざまな IBM 製品および IT 業界についての話題に絞った developerWorks の Technical events and webcasts で時代の流れをキャッチしてください。
  • 無料の developerWorks Live! briefing に参加して、IBM の製品およびツール、そして IT 業界の傾向を素早く学んでください。
  • developerWorks の on-demand demos で、初心者向けの製品のインストールとセットアップから、熟練開発者向けの高度な機能に至るまで、さまざまに揃ったデモを見てください。
  • Twitter で developerWorks をフォローするか、developerWorks で Linux に関するツイートのフィードに登録してください。

製品や技術を入手するために

  • ご自分に最適な方法で IBM 製品を評価してください。評価の方法としては、製品の試用版をダウンロードすることも、オンラインで製品を試してみることも、クラウド環境で製品を使用することもできます。また、SOA Sandbox では、数時間でサービス指向アーキテクチャーの実装方法を効率的に学ぶことができます。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


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