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

提供:Dev Guides
移動先:案内検索

序章

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

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

前提条件

このチュートリアルでは、 Ubuntu 18.04 でのサーバーの初期設定で説明されているように、root以外のsudo対応ユーザーでUbuntu18.04サーバーにログインしていることを前提としています。

このチュートリアルの手法は、通常、Ubuntu以外のLinuxディストリビューションで機能するはずですが、ある程度の調整が必要になる場合があります。

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

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

sudo apt update
sudo apt install quota

quotaコマンドを実行し、そのバージョン情報を要求することで、ツールがインストールされていることを確認できます。

quota --version
OutputQuota utilities version 4.04.
. . .

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

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

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

クラウドベースの仮想サーバーを使用している場合、デフォルトのUbuntu Linuxインストールには、クォータ管理をサポートするために必要なカーネルモジュールが含まれていない可能性があります。 確認するには、findを使用して、/lib/modules/...ディレクトリでquota_v1およびquota_v2モジュールを検索します。

find /lib/modules/`uname -r` -type f -name '*quota_v*.ko*'
Output/lib/modules/4.15.0-45-generic/kernel/fs/quota/quota_v1.ko
/lib/modules/4.15.0-45-generic/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=cloudimg-rootfs   /        ext4   defaults        0 0
LABEL=UEFI      /boot/efi       vfat    defaults        0 0

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

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

/ etc / fstab

LABEL=cloudimg-rootfs   /        ext4   usrquota,grpquota        0 0
. . .

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

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

sudo mount -o remount /

注:/etc/fstabファイルにリストされているオプションの間にスペースがないことを確認してください。 ,カンマの後にスペースを入れると、次のようなエラーが表示されます。

Outputmount: /etc/fstab: parse error

前のmountコマンドを実行した後にこのメッセージが表示された場合は、fstabファイルを再度開き、エラーを修正して、mountコマンドを繰り返してから続行してください。


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

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

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

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

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

sudo quotacheck -ugm /

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

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

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

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

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

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

sudo quotaon -v /

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

ステップ5–ユーザーのクォータを構成する

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

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

edquotaコマンドを使用してed it quoteを実行します。 この例のsammyユーザーのクォータを編集してみましょう。

sudo edquota -u sammy

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

注: ブロックの概念は十分に指定されておらず、どのコマンドラインツールがそれらを報告しているかなど、多くの要因に応じて変更される可能性があります。 Ubuntuでクォータを設定する場合、1ブロックが1キロバイトのディスクスペースに等しいと想定するのはかなり安全です。

上記のリストでは、ユーザー sammy は40ブロック、つまり/dev/vda1ドライブで40KBのスペースを使用しています。 softhardの制限は、どちらも0の値で無効になります。


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

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

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

ファイルを保存して閉じます。 新しい割り当てを確認するには、quotaコマンドを使用できます。

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

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

注:ユーザーがsudoアクセス権を持たずに自分のクォータを確認できるようにするには、手順4で作成したクォータファイルを読み取る権限をユーザーに付与する必要があります。 これを行う1つの方法は、usersグループを作成し、それらのファイルをusersグループで読み取り可能にしてから、すべてのユーザーもグループに配置されるようにすることです。

ユーザーとグループの所有権を含むLinuxのアクセス許可の詳細については、Linuxのアクセス許可の概要をお読みください。


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

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

sudo setquota -u sammy 200M 220M 0 0 /

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

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

sudo quota -vs sammy
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
sammy     --     40K    100M    110M             13     0     0

この例では、/ rootファイルシステムのレポートを生成しています。 -sコマンドは、repquotaに、可能な場合は人間が読める形式の数字を使用するように指示します。 リストされているシステムユーザーは数人いますが、デフォルトでは割り当てが設定されていない可能性があります。 ユーザーsammyが下部に表示され、使用量とソフトおよびハードの制限が示されています。

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

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

ステップ7–超過分の猶予期間を設定する

ユーザーがソフト制限を超えてフロートできる期間を構成できます。 これを行うには、setquotaコマンドを使用します。

sudo setquota -t 864000 864000 /

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

値は秒単位で指定する必要があることに注意してください。

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

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

変更は、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ファイルを作成します。 詳細については、ステップ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_v1quota_v2の両方のバージョンがあります)。 これは、必要なカーネルモジュールがインストールされていないか、正しくロードされていないことを意味します。 Ubuntuサーバーでは、これの最も可能性の高い原因は、クラウドベースの仮想サーバーで簡素化されたインストールイメージを使用していることです。

この場合、linux-image-extra-virtualパッケージをaptと一緒にインストールすることで修正できます。 詳細については、ステップ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のアクセス許可の詳細については、Linuxのアクセス許可の概要をお読みください。