ファイルシステム機能：スワップ、クォータ、 使用量

はじめに

第19章はじめに

Linuxは堅牢なスワップ空間を実装しており、仮想メモリ システムを介して、物理的に利用可能なメモリよりも多くのメモリを使用できます。ファイルシステムのクォータを使用して、ユーザー アカウントごとのディスク領域を管理できます。dfやduなどのユーティリティを使用すると、ファイルシステムの使用状況と容量を簡単に監視できます。


学習目標
この章の終わりまでに、次のことができるようになります。

スワップとクォータの概念を説明できます。
クォータの管理に役立つユーティリティ、quotacheck、quotaon、quotaoff、edquota、quotaを使用できます。
ユーティリティdfとduを使用できます。


ファイルシステム機能：スワップ、クォータ、 使用量

スワップの使用
Linuxは仮想メモリ システムを採用しており、オペレーティング システムは実際よりも多くのメモリがあるかのように機能します。この種のメモリ オーバーコミッションは、2つの方法で機能します。

多くのプログラムは、使用できるメモリすべてを実際に使用するわけではありません。それは、子プロセスがCOW（Copy On Write）手法を使用して親のメモリ領域のコピーを継承するためです。子プロセスは、変更があった場合にのみ（ページごとに）固有のコピーを取得します。
メモリの負荷が重くなってくると、アクティブでないメモリ領域はディスクにスワップアウトされ、再び必要になったときにのみ読み戻されます。

このようなスワッピングは、通常、1つ以上の専用パーティションまたはファイルに対して行われます。Linuxでは複数のスワップ領域が認められているため、スワップの要求を動的に調整できます。各スワップ領域には優先順位があり、優先順位の高い領域がいっぱいになるまで、優先順位の低い領域は使用されません。

多くの場合、推奨されるスワップ サイズはシステム上のRAMの合計サイズです。freeコマンドで/proc/swapsを見て基本的なメモリ統計情報を取得すれば、システムが現在使用しているスワップの量を確認できます。

$ cat /proc/swaps
Filename      種類       Size     Used  Priority
/dev/sda6     partition  8290300  0     -1
/tmp/swpfile  file       102396   0     -2

$ free -m

スワップに関係するコマンドは次のとおりです。

mkswap：スワップ パーティションまたはファイルをフォーマットします。
swapon：パーティションまたはファイルへのスワップを有効にします。
swapoff：パーティションまたはファイルへのスワップを無効にします。

いつでも、ほとんどのメモリはファイルの内容をキャッシュするために使用され、必要以上に実際にディスクへアクセスするのを防いでいます。もしくは最適な順序やタイミングでディスクにアクセスします。そのようなメモリのページはバッキングストアがファイルそのものであることから、決してスワップアウトされず、スワップへ書き出すことは無意味ということになります。その代わり、ダーティ ページ（格納データに反映することがもはや無いファイルの内容を含むメモリ）がディスクにフラッシュされます。

Linuxでは、アプリケーション メモリとは対照的に、カーネル自体が使用するメモリは決してスワップアウトされません。これは他のオペレーティング システムとは違います。


ファイルシステム クォータ
Linuxでは、ファイルシステムにおいて、クォータを使用したり強制したりすることができます。ディスク クォータの機能により、管理者は特定のユーザー（またはグループ）に許可する最大領域を制御できます。かなりの柔軟性が許されており、クォータはファイルシステムごとに割り当てることができます。共有リソースを使い果たす一部のユーザーに対して、保護が提供されます。

クリックしてカードを裏返し、クォータの管理に役立つユーティリティについて学習します。

quotacheck
quotacheck は、クォータ アカウンティング ファイルを生成および更新します。

quotaon
quotaon は、クォータ アカウンティングを有効にします。

quotaoff
quotaoff は、クォータ アカウンティングを無効にします。

edquota
edquota は、ユーザーまたはグループのクォータの編集を行います。

quota
quota は、使用量と使用限度を表示するユーティリティです。

クォータの操作には、クォータを使用するファイルシステムのルート ディレクトリに、aquota.userとaquota.groupのファイルが必要です。

クォータは、ファイルシステムごとに有効または無効にできます。さらに、LinuxはユーザーIDとグループIDに基づくクォータの使用をサポートしています。

別の種類のファイルシステムには、xfs_quotaなどの追加のクォータ関連ユーティリティが含まれている場合があります。


クォータの設定
ファイルシステムのクォータを作成するには、まずユーザー、グループ、またはその両方のクォータ マウント オプションで、ファイルシステムをマウントしたことを確認する必要があります。これらができていなければ、何も機能しません。基本的な手順は次のとおりです。

ユーザー、グループ、またはその両方のクォータ オプションでファイルシステムをマウントします。
- usrquota 、grpquota、またはその両方のオプションを/etc/fstabのファイルシステム エントリに追加します。
- ファイルシステムを再マウントします（または、新しい場合はマウントします）。
ファイルシステムでquotacheckを実行して、クォータを設定します。
ファイルシステムでクォータを有効にします。
edquotaプログラムでクォータを設定します。

最初に、次のように/etc/fstabに正しいオプションを設定する必要があります。

/dev/sda5 /home ext4 defaults,usrquota 1 2

上記では、/homeは専用パーティション上にあると想定しています。

次に、次のコマンドでテストします。

$ sudo mount -o remount /home
$ sudo quotacheck -vu /home
$ sudo quotaon -vu /home
$ sudo edquota someusername

edquotaを使用してソフト リミットの猶予期間を設定することもできます。/etc/fstabファイルで使用するマウント オプションは、ユーザー クォータの場合はusrquota、グループ クォータの場合はgrpquotaです。


quotacheck
quotacheckユーティリティは、ファイルシステムのクォータ アカウンティング ファイル（aquota.userとaquota.group）を作成および更新します。

/etc/fstab内のすべてのファイルシステムのユーザー ファイルを、ユーザー クォータ オプションで更新する場合：

$ sudo quotacheck -ua

/etc/fstab内のすべてのファイルシステムのグループ ファイルを、グループ クォータ オプションで更新する場合：

$ sudo quotacheck -ga

特定のファイルシステムのユーザー ファイルを更新する場合：

$ sudo quotacheck -u [somefilesystem]

特定のファイルシステムのグループ ファイルを更新する場合：

$ sudo quotacheck -g [somefilesystem]

-vオプションを使用して、より詳細な出力を取得します。

quotacheckは通常、クォータが最初にオン（有効）になった（または更新する必要がある）場合にのみ実行されます。このプログラムは、システムの起動時にfsckがファイルシステムのエラーを報告したときにも実行されることがあります。


クォータのオン（有効化）とオフ（無効化）
quotaonは、ファイルシステムのクォータをオンにします。quotaoffはそれらをオフにします。次のように使用されます。

$ sudo quotaon [flags] [filesystem]
$ sudo quotaoff [flags] [filesystem]

flagsは次のとおりです。

-a、--all　　　すべてのファイルシステムのクォータをオフにします
-f、--off　　　クォータをオフにします
-u、--user　　ユーザー クォータを操作します
-g、--group　　グループ クォータを操作します
-p、--print-state　　クォータがオンかオフかを表示します
-x、--xfs-command = cmd　　XFSクォータ コマンドを実行します
-F、--format = formatname　　特定のクォータ フォーマットで動作します
-v、--verbose　　　より詳細なメッセージを出力します
-h、--help　　ヘルプ テキストを表示して終了します
-V、--version　　バージョン情報を表示して終了します

💡
quotaonプログラムとquotaoffプログラムは実際にはまったく同じであり、それらが呼び出される名前に従って動作することに注意してください。

例えば、

$ sudo quotaon -av
/dev/sda6 [/]: group quotas turned on
/dev/sda5 [/home]: user quotas turned on

$ sudo quotaoff -av
/dev/sda6 [/]: group quotas turned off
/dev/sda5 [/home]: user quotas turned off

$ sudo quotaon -avu
/dev/sda5 [/home]: user quotas turned on

$ sudo quotaoff -avu
/dev/sda5 [/home]: user quotas turned off

$ sudo quotaon -avg
/dev/sda6 [/]: group quotas turned on

$ sudo quotaoff -avg
/dev/sda6 [/]: group quotas turned off

🚩
ファイルaquota.userまたはaquota.groupが存在しない場合、クォータ操作は失敗します。


クォータの調査
quotaユーティリティは、クォータに関する情報を表示するために使用されます。

quota（またはquota -u）は、現在のユーザー クォータの情報が表示されます。
quota -gは、現在のグループ クォータの情報を表示します。
スーパーユーザーは、ユーザー名またはグループ名を指定することにより、任意のユーザーまたはグループのquotaを調べることができます。

例えば、

$ sudo quota george
Disk quotas for user george (uid 1000):
  Filesystem blocks quota limit grace files quota limit grace
   /dev/sda5 837572   500  1000        5804     0     0

$ sudo quota gracie
Disk quotas for user gracie (uid 1001):
  Filesystem blocks quota limit grace files quota limit grace
   /dev/sda5  83757  5000 10000        5804     0     0


クォータの設定
edquotaと入力すると、クォータ エディタが表示されます。指定されたユーザーまたはグループに対して、そのユーザーまたはグループの現在のディスク クォータの一時ファイルがテキスト形式で作成されます。

次に、エディタがそのファイルを開き、その中でクォータを変更します。エディタを終了すると、一時ファイルが読み取られ、バイナリ クォータ ファイルに変更が反映されます。

quotaで編集できるフィールドは、ソフトとハードの制限のみです。他のフィールドは情報提供のみです。

以下は、edquotaの使用方法の例です。

edquota -u [username]は、指定されたusernameのユーザーの制限を編集します。
$ sudo edquota -u [username]
edquota -g [groupname]は、指定されたgroupnameのグループの制限を編集します。
$ sudo edquota -g [groupname]
edquota -u -p [userproto] [username]は、userprotoのユーザー クォータ値を、指定されたusernameのクォータ値にコピーします。
$ sudo edquota -u -p [userproto] [username]
edquota -g -p [groupproto] [groupname]は、groupprotoのグループ クォータ値を、指定されたgroupnameのクォータ値にコピーします。
$ sudo edquota -g -p [groupproto] [groupname]
edquota -tは、猶予期間を設定します。
$ sudo edquota -t

3番目と4番目のコマンドは、新しいアカウントを作成してそれらのクォータを設定するスクリプトに含めると便利です。

ユーザーとグループのクォータは、ディスク ブロック、inode、またはその両方に設定できます。さらに、猶予期間と同様に、ソフト制限とハード制限を設定できます。猶予期間中、ソフト制限を超えることがあります。しかし、ハード制限を超えることはできません。

猶予期間はファイルシステムごとに設定されます。

$ sudo edquota gracie
$ sudo edquota -t


df：ファイルシステムの使用量
df（disk free）ユーティリティは、ファイルシステムの容量と使用状況を調べます。以下の例では、-hオプションは「人が読みやすい単位」で表すことを意味し（すなわち、バイト単位ではなくKB、MB、GB単位）、-Tはファイルシステムの種類を示します。-iオプションを使用すると、バイト単位での使用量ではなく inode情報が表示されます。

dfの使用


du：ディスクの使用量
du（disk usage）は、ディスク容量と使用量の両方を調べるために使用します。

現在のディレクトリのディスク使用量を表示する場合：

$ du

ディレクトリだけでなく、すべてのファイルをリストする場合：

$ du -a

人が読みやすい単位でリストする場合： 

$ du -h

特定のディレクトリのディスク使用量を表示する場合：

$ du -h somedir

duの使用例


デモ：swap（スワップ）とOOM killer

このビデオは、システムがスワップを使用する方法と、どのようにOOM-killer が呼び出されるかを示しています。 


演習

演習 19.1: スワップ領域の管理

🚩
以下のPDFドキュメントに埋め込まれた外部URLにアクセスする場合は、常に右クリックして新しいタブまたはウィンドウで開いてください。直接クリックしてURLを開こうとすると、コース ウィンドウ／タブが閉じます。

Exercise 19.1: Managing Swap Space

Examine your current swap 領域 by doing:

$ cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/sda11                              partition       4193776 0       -1

We will now add more swap space by adding either a new partition or a file. To use a file we can do:

$ dd if=/dev/zero of=swpfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.30576 s, 822 MB/s

$ mkswap swpfile
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=85bb62e5-84b0-4fdd-848b-4f8a289f0c4c
(For a real partition just feed mkswap the partition name, but be aware all data on it will be erased!)

Activate the new swap space:

$ sudo swapon swpfiles
wapon: /tmp/swpfile: insecure permissions 0664, 0600 suggested.s
wapon: /tmp/swpfile: insecure file owner 500, 0 (root) suggested.

On RedHat, Centos, or Fedora

Notice RHEL warns us we are being insecure, we really should fix with:
$ sudo chown root:root swpfile
$ sudo chmod 600 swpfile

We ensure swpfile is being used:

$ cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/sda11                              partition       4193776 0       -1
/tmp/swpfile                            file            1048572 0       -2

Note the Priority field; swap partitions or files of lower priority will not be used until higher priority ones are filled.Remove the swap file from use and delete it to save space:

$ sudo swapoff swpfile
$ sudo rm swpfile


演習 19.2: ファイルシステム クォータ

🚩
以下のPDFドキュメントに埋め込まれた外部URLにアクセスする場合は、常に右クリックして新しいタブまたはウィンドウで開いてください。直接クリックしてURLを開こうとすると、コース ウィンドウ／タブが閉じます。

Exercise 19.2: Filesystem Quotas

Please Note

The subsection describing this material was marked as optional, so you may not have covered the material necessaryto do this exercise.

1.  Change the entry in /etc/fstab for your new filesystem to use user quotas (change noexec to usrquota in the entry for /mnt/tempdir). Then remount the filesystem.
2.  Initialize quotas on the new filesystem, and then turn the quota checking system on.
3.  Now set some quota limits for the normal user account: a soft limit of 500 blocks and a hard limit of 1000 blocks.
4.  As the normal user, attempt to use dd to create some files to exceed the quota limits.  Create bigfile1(200 blocks) and bigfile2(400 blocks).
You should get a warning. Why?
5.  Create bigfile3(600 blocks).
You should get an error message. Why?Look closely at the file sizes.
6.  Eliminate the persistent mount line you inserted in /etc/fstab.

Solution 19.2

1.  Change /etc/fstab to have one of the following two lines according to whether you are using a real partition or a loopback file:

in /etc/fstab
/dev/sda11     /mnt/tempdir ext4 usrquota1 2
/imagefile     /mnt/tempdir ext4 loop,usrquota1 2

Then remount:
$ sudo mount -o remount /mnt/tempdir

2.$ sudo quotacheck -u /mnt/tempdir
$ sudo quotaon -u /mnt/tempdir
$ sudo chown student.student /mnt/tempdir
(You won’t normally do the line above, but we are doing it to make the next part easier).

3.  Substitute your user name for the student user account.

4.$ sudo edquota -u student

5.$ cd /mnt/tempdir
$ dd if=/dev/zero of=bigfile1 bs=1024 count=200
200+0 records in
200+0 records out
204800 bytes (205 kB) copied, 0.000349604 s, 586 MB/s
$ quota
Disk quotas for user student (uid 500):
Filesystem blocks quota lim grace files qu lim gr
/dev/sda11    200   500  1000   1   0   0
$ dd if=/dev/zero of=bigfile2 bs=1024 count=400
sda11: warning, user block quota exceeded.
400+0 records in
400+0 records out
4096600 bytes (410 kB) copied, 0.000654847 s, 625 MB/s
Create bigfile3(600 blocks).

6.$ quota
Disk quotas for user student (uid 500):
Filesystem blocks quota limit grace files qu lim gr
/dev/sda11    600*   500  1000 6days   2  0  0
$ dd if=/dev/zero of=bigfile3 bs=1024 count=600
sda11: write failed, user block limit reached.
dd: writing`bigfile3': Disk quota exceeded
401+0 records in
400+0 records out409600 bytes (410 kB) copied, 0.00177744 s, 230 MB/s
$ quota
Disk quotas for user student (uid 500):
Filesystem blocks  quota limit grace files quota limit grace
/dev/sda11   1000*   500  1000 6days     3     0     0
$ ls -l
total 1068
-rw------- 1 root    root      7168 Dec 10 18:56 aquota.user
-rw-rw-r-- 1 student student 204800 Dec 10 18:58 bigfile1
-rw-rw-r-- 1 student student 409600 Dec 10 18:58 bigfile2
-rw-rw-r-- 1 student student 409600 Dec 10 19:01 bigfile3
drwx------ 2 root    root     16384 Dec 10 18:47 lost+found
-rwxr-xr-x 1 root    root     41216 Dec 10 18:52 more
Look closely at the file sizes.

7.  Get rid of the line in/etc/fstab.


知識チェック

「第19章 - ファイルシステムの機能：スワップ、クォータ、使用量」を完遂しました。おめでとうございます。このクイズに答えて、これまでに学んだ概念の理解度をチェックしてください。

クイズ開始


問題 19.1
dfプログラムで人が読める(human-readable)形式でリストするよう指定するオプションはどれですか？

A. -hr
B. -h
C. -o
D. -T

問題 19.2
dfプログラムでブロック使用量の代わりに inode情報をリストするために指定するオプションはどれですか？

A. -i
B. -b
C. -h
D. -T

問題 19.3
既存のファイルシステムでクォータを有効にする手順について、以下を正しい順序で並べてください。

i. quotaonを実行してクォータを有効にします
ii. /etc/fstabを編集して、usrquotaマウントのオプションを追加します
iii. edquotaを使用して個々のユーザーまたはグループのクォータを編集します
iv. ファイルシステムを再マウントします

A. i, iv, ii, iii
B. ii, i, iv, iii
C. iii, iv, i, ii
D. ii, iv, i, iii

問題 19.4
この章では、スワップ パーティションを管理するための基本的なツールについて説明しました。スワップ パーティションをフォーマットするために使用されるツールはどれですか？

A. free
B. mkswap
C. swapon
D. swapoff

