Ubuntu 18.04でファイルシステムクォータを設定する方法

前書き

クォータは、ユーザーまたはグループがファイルシステムで使用できるディスク容量を制限するために使用されます。 このような制限がないと、ユーザーはマシンのディスクをいっぱいにして、他のユーザーやサービスに問題を引き起こす可能性があります。

このチュートリアルでは、コマンドラインツールをインストールしてディスククォータを作成および検査し、サンプルユーザーのクォータを設定します。

前提条件

このチュートリアルでは、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu- 18-04 [Ubuntu 18.04での初期サーバー設定]。

このチュートリアルのテクニックは、一般的にUbuntu以外のLinuxディストリビューションで機能しますが、多少の適応が必要になる場合があります。

ステップ1 –クォータツールのインストール

クォータを設定および確認するには、最初に `+ apt +`を使用してクォータコマンドラインツールをインストールする必要があります。 パッケージリストを更新してから、パッケージをインストールしましょう。

sudo apt update
sudo apt install quota

ツールがインストールされていることを確認するには、 `+ quota +`コマンドを実行し、バージョン情報を要求します:

quota --version
OutputQuota utilities version .
. . .

出力にわずかに異なるバージョン番号が表示されていれば問題ありません。

次に、クォータを監視するための適切なカーネルモジュールがあることを確認します。

ステップ2 –クォータカーネルモジュールのインストール

クラウドベースの仮想サーバーを使用している場合、デフォルトのUbuntu Linuxインストールには、クォータ管理をサポートするために必要なカーネルモジュールがない場合があります。 チェックするには、 `+ find `を使用して、 ` / lib / modules /…​`ディレクトリ内の ` quota_v1 `および ` quota_v2 +`モジュールを検索します。

find /lib/modules/`uname -r` -type f -name '*quota_v*.ko*'
Output/lib/modules//kernel/fs/quota/quota_v1.ko
/lib/modules//kernel/fs/quota/quota_v2.ko

上記のファイルパスで強調表示されているカーネルバージョンは異なる可能性がありますが、2つのモジュールがリストされている限り、設定はすべて完了し、残りのステップはスキップできます。

上記のコマンドから出力が得られない場合、 `+ linux-image-extra-virtual`パッケージをインストールしてください:

sudo apt install linux-image-extra-virtual

これにより、クォータの実装に必要なカーネルモジュールが提供されます。 前の `+ find +`コマンドを再度実行して、インストールが成功したことを確認します。

次に、ファイルシステムの `+ mount +`オプションを更新して、* root *ファイルシステムでクォータを有効にします。

ステップ3 –ファイルシステムのマウントオプションの更新

特定のファイルシステムでクォータを有効にするには、いくつかのクォータ関連オプションを指定してマウントする必要があります。 これを行うには、 `+ / etc / fstab +`設定ファイルのファイルシステムのエントリを更新します。 今すぐお気に入りのテキストエディタでそのファイルを開きます。

sudo nano /etc/fstab

このファイルの内容は次のようになります。

/ etc / fstab

LABEL=UEFI      /boot/efi       vfat    defaults        0 0

この `+ fstab `ファイルは仮想サーバーのものです。 デスクトップまたはラップトップコンピューターはおそらくわずかに異なる ` fstab `を持っていますが、ほとんどの場合、すべてのディスク領域を表す ` / +`または* root *ファイルシステムがあります。

`+ defaults +`オプションを次の強調表示されたオプションに置き換えることにより、ルートファイルシステムを指す行を更新します。

/ etc / fstab

LABEL=cloudimg-rootfs   /        ext4           0 0
. . .

この変更により、ファイルシステムでユーザーベース( + usrquota +)とグループベース( + grpquota +)の両方のクォータを有効にできます。 どちらか一方のみが必要な場合は、未使用のオプションを省略できます。 `+ fstab `の行に ` defaults +`の代わりにいくつかのオプションが既にリストされている場合、すべてのオプションをスペースなしでコンマで区切って、既にあるものの最後に新しいオプションを追加する必要があります。

ファイルシステムを再マウントして、新しいオプションを有効にします。

sudo mount -o remount /

`+ / proc / mounts `ファイルを見ることで、新しいオプションがファイルシステムのマウントに使用されたことを確認できます。 ここでは、 ` grep +`を使用して、そのファイルのルートファイルシステムエントリのみを表示します。

cat /proc/mounts | grep ' / '
Output/dev/vda1 / ext4 rw,relatime,quota,,,data=ordered 0 0

指定した2つのオプションに注意してください。 ツールをインストールし、ファイルシステムオプションを更新したので、クォータシステムを有効にできます。

ステップ4 –クォータを有効にする

最終的にクォータシステムを有効にする前に、手動で `+ quotacheck +`コマンドを1回実行する必要があります。

sudo quotacheck -ugm /

このコマンドは、ファイル「+ / aquota.user n」と「+ / a quota.group」を作成します。 これらのファイルには、ファイルシステムの制限と使用に関する情報が含まれており、クォータの監視を有効にする前に存在する必要があります。 使用した `+ quotacheck +`パラメータは次のとおりです。

  • * + u +:*は、ユーザーベースのクォータファイルを作成することを指定します

  • * + g +:*は、グループベースのクォータファイルを作成することを示します

  • * + m +:*は、クォータの初期集計を実行している間、読み取り専用としてファイルシステムを再マウントすることを無効にします。 ファイルシステムを読み取り専用として再マウントすると、プロセス中にユーザーがアクティブにファイルを保存している場合に、より正確な結果が得られますが、この初期セットアップ中には必要ありません。

ユーザーベースまたはグループベースのクォータを有効にする必要がない場合は、対応する「+ quotacheck +」オプションをオフにすることができます。

ルートディレクトリをリストすることにより、適切なファイルが作成されたことを確認できます。

ls /
Output  bin   dev  home        initrd.img.old  lib64       media  opt   root  sbin  srv  tmp  var      vmlinuz.old
  boot  etc  initrd.img  lib             lost+found  mnt    proc  run   snap  sys  usr  vmlinuz

`+ quotacheck `コマンドに ` u `または ` g +`オプションを含めなかった場合、対応するファイルは失われます。 これで、クォータシステムを有効にする準備ができました。

sudo quotaon -v /

サーバーは現在、クォータを監視および実施していますが、まだ設定していません! 次に、単一ユーザーのディスククォータを設定します。

手順5-ユーザーのクォータを構成する

ユーザーまたはグループにクォータを設定する方法はいくつかあります。 ここでは、 `+ edquota `コマンドと ` setquota +`コマンドの両方を使用してクォータを設定する方法について説明します。

`+ edquota +`を使用してユーザークォータを設定する

`+ edquota +`コマンドを使用して quota sを ed itします。 サンプルの* sammy *ユーザーのクォータを編集してみましょう。

sudo edquota -u

`+ -u `オプションは、これが編集する ` user `クォータであることを指定します。 代わりにグループの割り当てを編集する場合は、代わりに「 -g +」オプションを使用します。

これにより、デフォルトのテキストエディタでファイルが開きます。これは、 `+ crontab -e +`が編集用の一時ファイルを開く方法と同様です。 ファイルは次のようになります。

Disk quotas for user sammy (uid 1000):
 Filesystem                   blocks       soft       hard     inodes     soft     hard
 /dev/vda1                        40          0          0         13        0        0

これには、ユーザー名と「+ uid +」、クォータが有効になっているファイルシステム、および_block_-および_inode_ベースの使用と制限が一覧表示されます。 iノードベースのクォータを設定すると、ユーザーが使用するディスク容量に関係なく、ユーザーが作成できるファイルとディレクトリの数が制限されます。 ほとんどの人は、ブロックベースのクォータが必要になります。これは、特にディスクスペースの使用を制限します。 これが設定されます。

クォータの各タイプでは、_soft limit_と_hard limit_の両方を設定できます。 ユーザーがソフト制限を超えると、クォータを超えますが、より多くのスペースやiノードを消費することはすぐには防止されません。 代わりに、ある程度の余裕が与えられます。ユーザーは、デフォルトで7日間、ディスクの使用をソフト制限の下に戻すことができます。 7日間の猶予期間の終わりに、ユーザーがまだソフト制限を超えている場合、ハード制限として扱われます。 ハード制限はそれほど寛容ではありません。指定されたハード制限に達すると、新しいブロックまたはiノードの作成はすべて直ちに停止されます。 これは、ディスクが完全にスペース不足であるかのように動作します。書き込みは失敗し、一時ファイルの作成は失敗し、ユーザーは一般的なタスクの実行中に警告とエラーを見始めます。

  • sammy *ユーザーを更新して、100 MBのソフト制限と110 MBのハード制限でブロッククォータを設定します。

Disk quotas for user sammy (uid 1000):
 Filesystem                   blocks       soft       hard     inodes     soft     hard
 /dev/vda1                        40                       13        0        0

ファイルを保存して閉じます。 新しいクォータを確認するには、 `+ quota +`コマンドを使用できます。

sudo quota -vs
OutputDisk quotas for user sammy (uid 1000):
    Filesystem   space   quota   limit   grace   files   quota   limit   grace
     /dev/vda1     40K                      13       0       0

このコマンドは、現在のクォータステータスを出力し、クォータが「+ 100M 」であるのに対し、制限が「​​ 110M +」であることを示します。 これは、それぞれソフト制限とハード制限に対応します。

`+ setquota +`を使用してユーザークォータを設定する

「+ edquota 」とは異なり、「 setquota +」はインタラクティブな編集手順なしで、単一のコマンドでユーザーのクォータ情報を更新します。 ユーザー名と、ブロックベースとiノードベースの両方のクォータにソフト制限とハード制限を指定し、最後にクォータを適用するファイルシステムを指定します。

sudo setquota -u  200M 220M 0 0 /

上記のコマンドは、* sammy *のブロックベースのクォータ制限を200メガバイトと220メガバイトに倍増します。 iノードベースのソフト制限とハード制限の「0 0」は、それらが未設定のままであることを示します。 これは、iノードベースのクォータを設定していない場合でも必要です。

もう一度、 `+ quota`コマンドを使用して作業を確認します。

sudo quota -vs
OutputDisk quotas for user sammy (uid 1000):
    Filesystem   space   quota   limit   grace   files   quota   limit   grace
     /dev/vda1     40K    200M    220M              13       0       0

いくつかのクォータを設定したので、クォータレポートを生成する方法を見てみましょう。

ステップ6 –クォータレポートの生成

特定のファイルシステム上のすべてのユーザーの現在のクォータ使用量に関するレポートを生成するには、 `+ repquota +`コマンドを使用します:

sudo repquota -s /
Output*** Report for user quotas on device /dev/vda1
Block grace time: 7days; Inode grace time: 7days
                       Space limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --   1696M      0K      0K          75018     0     0
daemon    --     64K      0K      0K              4     0     0
man       --   1048K      0K      0K             81     0     0
nobody    --   7664K      0K      0K              3     0     0
syslog    --   2376K      0K      0K             12     0     0

この例では、 + / + * root ファイルシステムのレポートを生成しています。 `+ -s `コマンドは、可能であれば人間が読める数字を使用するように ` repquota +`に指示します。 おそらくデフォルトでクォータが設定されていないシステムユーザーがいくつか表示されます。 ユーザー sammy *が下部に表示され、使用量とソフト制限とハード制限が示されます。

また、「+ Block grace time:7days 」コールアウトと「 grace 」列にも注意してください。 ユーザーがソフト制限を超えていた場合、「 grace +」列には、制限の下に戻るまでの残り時間が表示されます。

次のステップでは、クォータシステムの猶予期間を更新します。

手順7 –超過分の猶予期間の構成

ユーザーがソフト制限を超えてフロートできる期間を構成できます。 そのためには、 `+ setquota +`コマンドを使用します。

sudo setquota -t 864000 864000 /

上記のコマンドは、ブロックとiノードの両方の猶予時間を864000秒(10日間)に設定します。 この設定はすべてのユーザーに適用されます。両方のタイプのクォータを使用しない場合でも(ブロックvs. iノード)。

値は秒単位で指定する必要があります。

`+ repquota +`を再度実行して、変更が有効になったことを確認します。

sudo repquota -s /
OutputBlock grace time: ; Inode grace time:
. . .

変更はすぐに `+ repquota +`の出力に反映されるはずです。

結論

このチュートリアルでは、 `+ quota +`コマンドラインツールをインストールし、Linuxカーネルが監視クォータを処理できることを確認し、1人のユーザーにブロックベースのクォータを設定し、ファイルシステムのクォータ使用量に関するレポートを生成しました。

付録:クォータ関連の一般的なエラーメッセージ

以下は、ファイルシステムのクォータを設定および操作するときに表示される一般的なエラーです。

quotaon Outputquotaon: cannot find //aquota.group on /dev/vda1 [/]
quotaon: cannot find //aquota.user on /dev/vda1 [/]

これは、最初の `+ quotacheck `コマンドを実行する前に( ` quotaon `を使用して)クォータを有効にしようとした場合に表示されるエラーです。 ` quotacheck `コマンドは、クォータシステムを有効にするために必要な ` aquota `または ` quota +`ファイルを作成します。 詳細については、リンク:#step-4-%E2%80%93-enabling-quotas [ステップ4]を参照してください。

quotaon Outputquotaon: using //aquota.group on /dev/vda1 [/]: No such process
quotaon: Quota format not supported in kernel.
quotaon: using //aquota.user on /dev/vda1 [/]: No such process
quotaon: Quota format not supported in kernel.

この「+ quotaon 」エラーは、カーネルがクォータをサポートしていないか、少なくとも正しいバージョンをサポートしていないことを示しています(「 quota_v1 」バージョンと「 quota_v2 +」バージョンの両方があります)。 これは、必要なカーネルモジュールがインストールされていないか、適切にロードされていないことを意味します。 Ubuntu Serverでは、この原因として最も可能性が高いのは、クラウドベースの仮想サーバー上で縮小されたインストールイメージを使用していることです。

この場合は、 + apt-`とともに + linux-image-extra-virtual + `パッケージをインストールすることで修正できます。 詳細については、リンク:#step-2-%E2%80%93-installing-the-quota-kernel-module [ステップ2]を参照してください。

quota Outputquota: Cannot open quotafile //aquota.user: Permission denied
quota: Cannot open quotafile //aquota.user: Permission denied
quota: Cannot open quotafile //quota.user: No such file or directory

これは、 `+ quota `を実行し、現在のユーザーにファイルシステムのクォータファイルを読み取る権限がない場合に表示されるエラーです。 あなた(またはシステム管理者)はファイルのパーミッションを適切に調整するか、クォータファイルへのアクセスを必要とするコマンドを実行するときに ` sudo +`を使用する必要があります。

ユーザーおよびグループの所有権など、Linuxのアクセス許可の詳細については、https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-permissions [Linuxのアクセス許可の概要]をご覧ください。