自動マウントする際に、swaponコマンドのように優先度をつけたいと思い調べてみたら簡単に出来ました。
目次
準備
スワップ用にフォーマットする
追加したいパーティションをSwap用にフォーマットします。
CUIベース
以前の記事「SDカード上にスワップ領域を作成」をご参照ください。
GUIベース
GUIツール"gnome-disk-utility"の場合は、以下で設定可能です。
事前準備
フォーマット済みの場合は「ディスクを初期化」した後に、パーティションを作成することをお勧めします。
未フォーマットの場合は、そのままパーティションを作成します。
パーティション作成
[+]ボタン(パーティションを作成)ボタンをクリックし、
- タイプを「カスタム」
- ファイルシステムを「swap」
に設定した後、[作成]ボタンを押して完了です。
指定するパーティションを確認
デバイス名の確認
パーティションテーブルの一覧から、デバイス名を確認します。
$ sudo fdisk -l
Disk /dev/sda: 74.5 GiB, 80026361856 bytes, 156301488 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x09c11832
デバイス 起動 Start 最後から セクタ Size Id タイプ
/dev/sda1 * 2048 139704319 139702272 66.6G 83 Linux
/dev/sda2 139706366 156301311 16594946 7.9G 5 拡張領域
/dev/sda5 139706368 156301311 16594944 7.9G 82 Linux スワップ / Solaris
Disk /dev/sdb: 960 MiB, 1006632960 bytes, 1966080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xf39d6cf5
デバイス 起動 Start 最後から セクタ Size Id タイプ
/dev/sdb1 2048 1966079 1964032 959M 82 Linux スワップ / Solaris
Disk /dev/sdc: 960 MiB, 1006632960 bytes, 1966080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6f00a6f8
デバイス 起動 Start 最後から セクタ Size Id タイプ
/dev/sdc1 2048 1966079 1964032 959M 82 Linux スワップ / Solaris
内蔵HDD(80GB)から、メインメモリと同容量(8GB, /dev/sda5)のスワップが割り当てられています。
今回、追加で割り当てるのはUSBメモリ(1GB × 2本, /dev/sdb1, /dev/sdc1)です。
UUIDを確認
blkidコマンドで、スワップパーティションのUUIDの一覧を取得します。
その後、fdiskコマンドで確認したデバイス名に対応するUUIDを確認します。
$ sudo blkid
/dev/sda1: UUID="e24c61cc-77a9-4380-b7c5-68b2a9f13089" TYPE="ext4" PARTUUID="09c11832-01"
/dev/sda5: UUID="2cf484e8-5a3b-4b4b-a10d-b88d2abc10c7" TYPE="swap" PARTUUID="09c11832-05"
/dev/sdb1: LABEL="USB1GB" UUID="489f037a-3dad-49c0-bc61-68f0685c62a6" TYPE="swap" PARTUUID="f39d6cf5-01"
/dev/sdc1: LABEL="USB1GB" UUID="0978b50c-ddab-42cb-8210-2fada3e50d58" TYPE="swap" PARTUUID="6f00a6f8-01"
UUIDとは
UUID(Universally Unique Identifier)は、ソフトウェア上でオブジェクトを一意に識別するためのIDを指します。
さらに、当記事でのUUIDは狭義(パーティションを識別するためのID文字列)として用いられています。
従来からあるデバイス名(ex. /dev/sdb1)が使われていましたが、デバイス名は"a"から順番に割り当てられるため再起動によりデバイス名が変わってしまうことがあります。
そのため、UUIDという一意の識別子を割り当てて、固定IDで利用できるようにしたわけです。
また、パーティション識別子としてのUUIDは32bitの16進数で表されるため、単純計算で"340,282,366,920,938,000,000,000,000,000,000,000,000"という莫大なパターンから乱数生成されます。
これが、重複を意識せずに使用することができる秘密です。
設定
設定ファイルの編集
OSの起動時に読み込まれるマウント情報ファイルを編集します。
これにより、ディスクパーティションやブロックデバイス、リモートディレクトリなどを起動時に自動マウントします。
$ file /etc/fstab
/etc/fstab: ASCII text
変更前にバックアップを取得
念の為、コピーします。
※不要であれば、後で削除します。
$ sudo cp /etc/fstab /etc/fstab_org
fstabを編集
編集例
マウント時オプションに「defaults,pri={9}」を指定することで、優先度を指定できます。
base on スワップ - ArchWiki
複数のスワップファイルやスワップパーティションを使っている場合、priority 値 (0 から 32767) をそれぞれのスワップ領域に割り当てることを考えて下さい。
システムは優先度が低いスワップ領域を使う前に高い優先度が付けられたスワップ領域を使います。
priority は fstab で pri パラメータを使って設定できます:もし2つ以上の領域が同じ priority を持ち、それが一番高い priority の場合、その領域間ではラウンド・ロビン方式でページが配分されます。
$ diff -u /etc/fstab_bk20180611 /etc/fstab
--- /etc/fstab_bk20180611 2018-06-11 21:00:15.448806400 +0900
+++ /etc/fstab 2018-06-11 21:16:04.812333219 +0900
@@ -9,3 +9,6 @@
UUID=e24c61cc-77a9-4380-b7c5-68b2a9f13089 / ext4 errors=remount-ro 0 1
# swap was on /dev/sda5 during installation
UUID=2cf484e8-5a3b-4b4b-a10d-b88d2abc10c7 none swap sw 0 0
+# swap was on USB-Memory during installation
+UUID=0978b50c-ddab-42cb-8210-2fada3e50d58 none swap defaults,pri=0 0 0
+UUID=489f037a-3dad-49c0-bc61-68f0685c62a6 none swap defaults,pri=0 0 0
fstab記述について
1列目:デバイス名・スワップファイル名
2列目:マウントポイント(スワップにはマウントポイントが無い)
3列目:ファイルシステム
4列目:マウント時のオプション
5列目:dumpの有無(0:不要)
6列目:fsckチェックの有無(0:無し)
※diffコマンドについては、過去記事「diff コマンド」をご参照ください
※swaponコマンドで優先度を指定する場合は「Fedora でスワップを設定する:CUI編」をご参照ください。
再起動
設定後、再起動すると起動時にマウントされます。
確認
$ swapon -s
Filename Type Size Used Priority
/dev/sdc1 partition 982012 0 0
/dev/sdb1 partition 982012 0 0
/dev/sda5 partition 8297468 0 -1
割り当てルール
スワップは優先度の高いもの(数値の大きい方)から消費されていきます。
以下は、2本のUSBメモリの優先度が同じなので、ラウンドロビンで均等に割り当てられます。
なお、数値の高いものから消費されていきます。
例1
USBメモリを均等に消費(0 > -1)。
$ free -h
total used free shared buff/cache available
Mem: 7.7G 6.2G 201M 595M 1.3G 653M
Swap: 9.8G 7.3M 9.8G
$ swapon -s
Filename Type Size Used Priority
/dev/sdc1 partition 982012 3852 0
/dev/sdb1 partition 982012 3596 0
/dev/sda5 partition 8297468 0 -1
例2
優先度の高いUSBメモリから消費(1 > 0 > -1)。
$ swapon -s
Filename Type Size Used Priority
/dev/sdc1 partition 982012 284168 0
/dev/sdb1 partition 982012 978896 1
/dev/sda5 partition 8297468 0 -1
$ free -h
total used free shared buff/cache available
Mem: 7.7G 5.8G 756M 526M 1.2G 1.1G
Swap: 9.8G 1.2G 8.6G