Linuxでスワップ領域を作成したいときは、mkswapコマンドを使用します。
スワップ領域とは、物理メモリが不足したときに、ディスクの一部を一時的なメモリのように使うための領域です。
前回までに、fdiskやpartedでパーティションを作成する方法、mkfsでファイルシステムを作成する方法を解説しました。
通常のデータ保存用パーティションではmkfs.ext4やmkfs.xfsを使いますが、スワップ用の領域を作る場合はmkswapを使います。
この記事では、Linux初心者でも理解できるように、mkswapコマンドの基本、スワップパーティションの作成方法、スワップファイルの作成方法、swapon・swapoffとの違い、/etc/fstabで自動有効化する方法、よくあるエラーまで実例付きで解説します。
- mkswapコマンドとは
- スワップ領域とは
- mkswapを使う場面
- mkswapを実行する前の重要な注意点
- 現在のスワップ状況を確認する方法
- スワップパーティションとスワップファイルの違い
- mkswapコマンドの基本構文
- スワップパーティションを作成する流れ
- 対象パーティションを確認する方法
- スワップパーティションを初期化する方法
- スワップを有効化する方法
- スワップを無効化する方法
- /etc/fstabに登録して自動有効化する方法
- スワップファイルを作成する流れ
- fallocateでスワップファイルを作成する方法
- スワップファイルの権限を設定する方法
- スワップファイルを初期化する方法
- スワップファイルを有効化する方法
- スワップファイルをfstabに登録する方法
- ddでスワップファイルを作成する方法
- mkswapとmkfsの違い
- mkswapとswapon・swapoffの違い
- mkswapコマンドの主なオプション
- ラベルを付けてスワップを作成する方法
- スワップの優先度を指定する方法
- vm.swappinessとは
- スワップを削除する方法
- mkswapコマンドでよくある注意点
- mkswapコマンドでよくあるエラー
- よくある質問
- まとめ
mkswapコマンドとは
mkswapは、Linuxでパーティションやファイルをスワップ領域として初期化するためのコマンドです。
たとえば、/dev/sdb1というパーティションをスワップ領域として使えるようにする場合は、次のように実行します。
sudo mkswap /dev/sdb1
また、スワップファイルを作成したあと、そのファイルをスワップ領域として初期化することもできます。
sudo mkswap /swapfile
ただし、mkswapを実行しただけでは、まだスワップとして使用開始されません。
実際に有効化するには、swaponコマンドを使います。
sudo swapon /dev/sdb1
スワップ領域とは
スワップ領域とは、物理メモリが不足したときに、ディスクの一部を一時的な退避領域として使う仕組みです。
Linuxでは、メモリに入りきらないデータの一部をスワップ領域へ移すことで、システムがすぐに停止することを防ぎやすくなります。
ただし、ディスクはメモリより遅いため、スワップを大量に使う状態が続くと、システム全体の動作が重くなります。
スワップは「メモリ不足を完全に解決するもの」ではなく、「一時的な逃げ場」と考えると分かりやすいです。
mkswapを使う場面
mkswapは、主に次のような場面で使用します。
- 新しいスワップパーティションを作成したいとき
- スワップファイルを作成したいとき
- VPSやLinuxサーバーでメモリ不足対策をしたいとき
- インストール後にスワップを追加したいとき
- 既存のスワップ領域を作り直したいとき
特にメモリが少ないVPSでは、スワップファイルを追加しておくことで、急なメモリ不足時の停止リスクを下げられる場合があります。
mkswapを実行する前の重要な注意点
mkswapは、対象のパーティションやファイルをスワップ用に初期化するコマンドです。
既存データが入っているパーティションに実行すると、そのデータへ通常アクセスできなくなる可能性があります。
実行前には、必ず次の点を確認してください。
- 対象が本当にスワップ用のパーティションまたはファイルか
- 必要なデータが入っていないか
- 対象がマウント中ではないか
- デバイス名を間違えていないか
- 必要ならバックアップを取っているか
特に/dev/sda1や/dev/nvme0n1p1など、システムで使われているパーティションを誤って指定しないように注意しましょう。
現在のスワップ状況を確認する方法
まず、現在のスワップ状況を確認します。
swapon --show
実行結果の例です。
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2
何も表示されない場合、現在有効なスワップがない可能性があります。
free -hでもメモリとスワップの状態を確認できます。
free -h
実行結果の例です。
total used free shared buff/cache available
Mem: 1.9Gi 800Mi 300Mi 20Mi 800Mi 900Mi
Swap: 2.0Gi 0B 2.0Gi
Swapの行を見ると、スワップの合計容量、使用量、空き容量が分かります。
スワップパーティションとスワップファイルの違い
Linuxのスワップ領域には、大きく分けてスワップパーティションとスワップファイルがあります。
| 種類 | 特徴 | 例 |
|---|---|---|
| スワップパーティション | 専用パーティションをスワップとして使う | /dev/sdb1 |
| スワップファイル | 通常のファイルをスワップとして使う | /swapfile |
スワップパーティションは専用領域として分かりやすい一方、あとからサイズ変更しにくい場合があります。
スワップファイルは既存のファイルシステム上に作れるため、あとから追加・削除しやすいのが特徴です。
現在のVPSやクラウド環境では、スワップファイルで追加する方法もよく使われます。
mkswapコマンドの基本構文
mkswapコマンドの基本構文は次のとおりです。
mkswap [オプション] デバイスまたはファイル
スワップパーティションを作成する場合です。
sudo mkswap /dev/sdb1
スワップファイルを作成する場合です。
sudo mkswap /swapfile
mkswapは、対象をスワップ領域として使える形式に初期化するだけです。
有効化にはswaponが必要です。
スワップパーティションを作成する流れ
スワップパーティションを作成する全体の流れは次のとおりです。
- ディスク構成を確認する
- fdiskやpartedでスワップ用パーティションを作成する
- mkswapでスワップ領域として初期化する
- swaponで有効化する
- swapon –showやfree -hで確認する
- 必要なら/etc/fstabに登録する
このうち、mkswapは「スワップ領域として初期化する」段階を担当します。
対象パーティションを確認する方法
まずlsblkでディスク構成を確認します。
lsblk
実行結果の例です。
NAME SIZE TYPE MOUNTPOINTS
sda 50G disk
├─sda1 1G part /boot
└─sda2 49G part /
sdb 4G disk
└─sdb1 4G part
この例では、/dev/sdb1をスワップ用に使う想定です。
ファイルシステム情報も確認します。
lsblk -f
実行結果の例です。
NAME FSTYPE LABEL UUID MOUNTPOINTS
sda
├─sda1 xfs 1111-2222 /boot
└─sda2 xfs 3333-4444 /
sdb
└─sdb1
/dev/sdb1に必要なデータがないことを確認してから作業してください。
スワップパーティションを初期化する方法
/dev/sdb1をスワップ領域として初期化するには、次のように実行します。
sudo mkswap /dev/sdb1
実行結果の例です。
Setting up swapspace version 1, size = 4 GiB
no label, UUID=9999-aaaa-bbbb-cccc
これで/dev/sdb1がスワップ領域として使える形式になりました。
ただし、この時点ではまだ有効化されていません。
スワップを有効化する方法
作成したスワップ領域を有効化するには、swaponを使います。
sudo swapon /dev/sdb1
有効になったか確認します。
swapon --show
実行結果の例です。
NAME TYPE SIZE USED PRIO
/dev/sdb1 partition 4G 0B -2
free -hでも確認できます。
free -h
スワップを無効化する方法
有効化したスワップを無効化するには、swapoffを使います。
sudo swapoff /dev/sdb1
確認します。
swapon --show
何も表示されなければ、スワップが無効化されています。
ただし、使用中のスワップを無効化すると、メモリへ戻す必要があるため、メモリ不足の環境では失敗したり、動作が重くなったりすることがあります。
/etc/fstabに登録して自動有効化する方法
swaponで有効化しただけでは、再起動後に自動で有効になるとは限りません。
再起動後もスワップを有効にしたい場合は、/etc/fstabに登録します。
まずUUIDを確認します。
sudo blkid /dev/sdb1
実行結果の例です。
/dev/sdb1: UUID="9999-aaaa-bbbb-cccc" TYPE="swap"
/etc/fstabを編集する前にバックアップします。
sudo cp /etc/fstab /etc/fstab.bak
次のような行を追加します。
UUID=9999-aaaa-bbbb-cccc none swap sw 0 0
設定後、次のコマンドで確認します。
sudo swapoff /dev/sdb1
sudo swapon -a
swapon --show
swapon -aは、/etc/fstabに書かれているスワップ設定を有効化します。
スワップファイルを作成する流れ
次に、スワップファイルを作成する方法を見ていきます。
スワップファイルは、既存のファイルシステム上に作る通常のファイルを、スワップ領域として使う方法です。
基本の流れは次のとおりです。
- スワップ用ファイルを作成する
- 権限を600にする
- mkswapで初期化する
- swaponで有効化する
- 確認する
- 必要なら/etc/fstabに登録する
fallocateでスワップファイルを作成する方法
2GBのスワップファイルを作成する例です。
sudo fallocate -l 2G /swapfile
作成できたか確認します。
ls -lh /swapfile
実行結果の例です。
-rw-r--r-- 1 root root 2.0G Jul 20 10:00 /swapfile
このままでは権限が広すぎるため、次に権限を変更します。
スワップファイルの権限を設定する方法
スワップファイルは、rootだけが読み書きできる権限にします。
sudo chmod 600 /swapfile
確認します。
ls -lh /swapfile
実行結果の例です。
-rw------- 1 root root 2.0G Jul 20 10:00 /swapfile
-rw-------になっていれば、所有者だけが読み書きできる状態です。
権限が広すぎると、swapon時に警告が出る場合があります。
スワップファイルを初期化する方法
作成したファイルをスワップ領域として初期化します。
sudo mkswap /swapfile
実行結果の例です。
Setting up swapspace version 1, size = 2 GiB
no label, UUID=aaaa-bbbb-cccc-dddd
これで/swapfileをスワップとして使う準備ができました。
スワップファイルを有効化する方法
swaponで有効化します。
sudo swapon /swapfile
確認します。
swapon --show
free -h
実行結果の例です。
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2
TYPEがfileになっていれば、スワップファイルとして有効化されています。
スワップファイルをfstabに登録する方法
再起動後もスワップファイルを有効にしたい場合は、/etc/fstabに登録します。
編集前にバックアップします。
sudo cp /etc/fstab /etc/fstab.bak
次の行を追加します。
/swapfile none swap sw 0 0
設定後、確認します。
sudo swapoff /swapfile
sudo swapon -a
swapon --show
エラーが出ないことを確認してから運用しましょう。
ddでスワップファイルを作成する方法
fallocateが使えない環境では、ddでスワップファイルを作成することもできます。
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
この例では、約2GBのファイルを作成します。
作成後の流れは同じです。
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
mkswapとmkfsの違い
mkswapとmkfsは名前が似ていますが、用途が違います。
| コマンド | 用途 | 例 |
|---|---|---|
mkfs |
通常のファイル保存用ファイルシステムを作成する | mkfs.ext4 /dev/sdb1 |
mkswap |
スワップ領域を作成する | mkswap /dev/sdb1 |
通常のデータ保存用にしたい場合はmkfsを使います。
メモリ不足時の退避領域として使いたい場合はmkswapを使います。
mkswapとswapon・swapoffの違い
mkswap、swapon、swapoffはセットで使うことが多いです。
| コマンド | 役割 |
|---|---|
mkswap |
対象をスワップ領域として初期化する |
swapon |
スワップ領域を有効化する |
swapoff |
スワップ領域を無効化する |
スワップを作るだけならmkswap、実際に使い始めるにはswapon、停止するにはswapoffと覚えると分かりやすいです。
mkswapコマンドの主なオプション
| オプション | 説明 |
|---|---|
-L ラベル |
スワップ領域にラベルを付ける |
-U UUID |
UUIDを指定する |
-f |
強制的に作成する |
-c |
不良ブロックを確認する |
--help |
ヘルプを表示する |
--version |
バージョン情報を表示する |
通常はオプションなしで使うことが多いです。
-fは強制実行のため、初心者が安易に使うべきではありません。
ラベルを付けてスワップを作成する方法
-Lオプションを使うと、スワップ領域にラベルを付けられます。
sudo mkswap -L swapdata /dev/sdb1
確認します。
sudo blkid /dev/sdb1
実行結果の例です。
/dev/sdb1: LABEL="swapdata" UUID="9999-aaaa-bbbb-cccc" TYPE="swap"
複数のスワップ領域を管理する場合に、ラベルがあると分かりやすくなります。
スワップの優先度を指定する方法
swaponでは、-pオプションで優先度を指定できます。
sudo swapon -p 10 /dev/sdb1
優先度が高いスワップ領域ほど、優先的に使われます。
通常の環境では、細かく指定しなくても問題ないことが多いです。
vm.swappinessとは
vm.swappinessは、Linuxがどの程度スワップを使いやすくするかを調整するカーネルパラメータです。
現在の値は次のコマンドで確認できます。
cat /proc/sys/vm/swappiness
値が高いほどスワップを使いやすく、低いほど物理メモリを優先しやすい傾向があります。
一時的に変更する例です。
sudo sysctl vm.swappiness=10
ただし、最適値は用途やメモリ容量によって変わります。
初心者は、まずスワップの作成・確認・有効化を理解してから調整を検討するとよいでしょう。
スワップを削除する方法
スワップファイルを削除する場合は、まず無効化します。
sudo swapoff /swapfile
/etc/fstabに登録している場合は、該当行を削除またはコメントアウトします。
sudo vi /etc/fstab
その後、ファイルを削除します。
sudo rm /swapfile
確認します。
swapon --show
free -h
パーティションの場合は、無効化後に必要に応じてパーティション削除や再利用を検討します。
mkswapコマンドでよくある注意点
対象デバイスを間違えない
mkswapで最も危険なのは、対象を間違えることです。
作業前に必ず確認します。
lsblk -f
sudo blkid
システムディスクやデータ入りパーティションを指定しないよう注意してください。
mkswapだけでは有効化されない
mkswapは、対象をスワップ形式にするだけです。
実際に使うにはswaponが必要です。
sudo mkswap /swapfile
sudo swapon /swapfile
スワップファイルは権限600にする
スワップファイルの権限が広すぎると、swapon時に警告が出る場合があります。
sudo chmod 600 /swapfile
fstab設定ミスに注意する
/etc/fstabに誤った設定を書くと、起動時のトラブルにつながる場合があります。
編集前にバックアップを取りましょう。
sudo cp /etc/fstab /etc/fstab.bak
設定後はswapon -aで確認します。
sudo swapon -a
swapon --show
mkswapコマンドでよくあるエラー
Permission denied
mkswap: error: /dev/sdb1 is mounted; will not make swapspace
対象がマウント中、または権限が不足している可能性があります。
マウント状態を確認します。
lsblk
findmnt
必要に応じてアンマウントします。
sudo umount /data
また、通常はsudoを付けて実行します。
sudo mkswap /dev/sdb1
No such file or directory
mkswap: cannot open /dev/sdb1: No such file or directory
指定したデバイスやファイルが存在しません。
デバイス名を確認します。
lsblk
スワップファイルの場合は、先にファイルを作成してください。
sudo fallocate -l 2G /swapfile
insecure permissions
swapon: /swapfile: insecure permissions 0644, 0600 suggested.
スワップファイルの権限が広すぎます。
chmod 600で修正します。
sudo chmod 600 /swapfile
sudo swapon /swapfile
read swap header failed
swapon: /swapfile: read swap header failed
mkswapを実行していない、またはスワップとして正しく初期化されていない可能性があります。
sudo mkswap /swapfile
sudo swapon /swapfile
swapfile has holes
swapon: /swapfile: skipping - it appears to have holes.
スワップファイルの作成方法やファイルシステムの仕様により、スワップとして使えない状態になっている可能性があります。
fallocateで問題が出る場合は、ddで作成する方法を試します。
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
よくある質問
mkswapコマンドは何に使いますか?
パーティションやファイルをスワップ領域として使えるように初期化するために使います。
mkswapだけでスワップは有効になりますか?
いいえ。mkswapはスワップ領域を作成するだけです。有効化するにはswaponを使います。
sudo mkswap /swapfile
sudo swapon /swapfile
現在のスワップ状況を確認するには?
swapon --showまたはfree -hを使います。
swapon --show
free -h
スワップファイルを作るには?
次の流れで作成できます。
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
スワップパーティションを作るには?
fdiskやpartedでスワップ用パーティションを作成し、mkswapで初期化してからswaponで有効化します。
sudo mkswap /dev/sdb1
sudo swapon /dev/sdb1
mkswapとmkfsの違いは何ですか?
mkfsは通常のファイル保存用ファイルシステムを作成するコマンドです。mkswapはスワップ領域を作成するコマンドです。
スワップを再起動後も有効にするには?
/etc/fstabに登録します。スワップファイルの場合は次のように書きます。
/swapfile none swap sw 0 0
mkswapを実行するとデータは消えますか?
対象をスワップ領域として初期化するため、既存データへ通常アクセスできなくなる可能性があります。実行前に必ず対象を確認し、必要なデータはバックアップしてください。
UbuntuやCentOS Streamでも使えますか?
はい。Ubuntu、Debian、CentOS Stream、Rocky Linux、AlmaLinuxなど、多くのLinuxディストリビューションで利用できます。
まとめ
mkswapコマンドは、Linuxでパーティションやファイルをスワップ領域として初期化するためのコマンドです。
スワップパーティションを作成する場合は、次のように実行します。
sudo mkswap /dev/sdb1
sudo swapon /dev/sdb1
スワップファイルを作成する場合は、次のような流れになります。
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
現在のスワップ状況は、次のコマンドで確認できます。
swapon --show
free -h
再起動後も有効にしたい場合は、/etc/fstabに登録します。
/swapfile none swap sw 0 0
mkswapはスワップ領域を作るコマンド、swaponはスワップを有効化するコマンド、swapoffはスワップを無効化するコマンドです。
また、mkfsは通常のファイル保存用ファイルシステムを作るコマンドであり、mkswapとは用途が違います。
mkswapは便利ですが、対象を間違えるとデータを失う危険があります。実行前には必ずlsblk -fやblkidで対象を確認し、必要なデータはバックアップしてから作業しましょう。




コメント