mkswapコマンドとは?Linuxでスワップ領域を作成する方法

Linux

Linuxでスワップ領域を作成したいときは、mkswapコマンドを使用します。

スワップ領域とは、物理メモリが不足したときに、ディスクの一部を一時的なメモリのように使うための領域です。

前回までに、fdiskpartedでパーティションを作成する方法、mkfsでファイルシステムを作成する方法を解説しました。

通常のデータ保存用パーティションではmkfs.ext4mkfs.xfsを使いますが、スワップ用の領域を作る場合はmkswapを使います。

この記事では、Linux初心者でも理解できるように、mkswapコマンドの基本、スワップパーティションの作成方法、スワップファイルの作成方法、swaponswapoffとの違い、/etc/fstabで自動有効化する方法、よくあるエラーまで実例付きで解説します。

  1. mkswapコマンドとは
  2. スワップ領域とは
  3. mkswapを使う場面
  4. mkswapを実行する前の重要な注意点
  5. 現在のスワップ状況を確認する方法
  6. スワップパーティションとスワップファイルの違い
  7. mkswapコマンドの基本構文
  8. スワップパーティションを作成する流れ
  9. 対象パーティションを確認する方法
  10. スワップパーティションを初期化する方法
  11. スワップを有効化する方法
  12. スワップを無効化する方法
  13. /etc/fstabに登録して自動有効化する方法
  14. スワップファイルを作成する流れ
  15. fallocateでスワップファイルを作成する方法
  16. スワップファイルの権限を設定する方法
  17. スワップファイルを初期化する方法
  18. スワップファイルを有効化する方法
  19. スワップファイルをfstabに登録する方法
  20. ddでスワップファイルを作成する方法
  21. mkswapとmkfsの違い
  22. mkswapとswapon・swapoffの違い
  23. mkswapコマンドの主なオプション
  24. ラベルを付けてスワップを作成する方法
  25. スワップの優先度を指定する方法
  26. vm.swappinessとは
  27. スワップを削除する方法
  28. mkswapコマンドでよくある注意点
    1. 対象デバイスを間違えない
    2. mkswapだけでは有効化されない
    3. スワップファイルは権限600にする
    4. fstab設定ミスに注意する
  29. mkswapコマンドでよくあるエラー
    1. Permission denied
    2. No such file or directory
    3. insecure permissions
    4. read swap header failed
    5. swapfile has holes
  30. よくある質問
    1. mkswapコマンドは何に使いますか?
    2. mkswapだけでスワップは有効になりますか?
    3. 現在のスワップ状況を確認するには?
    4. スワップファイルを作るには?
    5. スワップパーティションを作るには?
    6. mkswapとmkfsの違いは何ですか?
    7. スワップを再起動後も有効にするには?
    8. mkswapを実行するとデータは消えますか?
    9. UbuntuやCentOS Streamでも使えますか?
  31. まとめ

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が必要です。

スワップパーティションを作成する流れ

スワップパーティションを作成する全体の流れは次のとおりです。

  1. ディスク構成を確認する
  2. fdiskやpartedでスワップ用パーティションを作成する
  3. mkswapでスワップ領域として初期化する
  4. swaponで有効化する
  5. swapon –showやfree -hで確認する
  6. 必要なら/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に書かれているスワップ設定を有効化します。

スワップファイルを作成する流れ

次に、スワップファイルを作成する方法を見ていきます。

スワップファイルは、既存のファイルシステム上に作る通常のファイルを、スワップ領域として使う方法です。

基本の流れは次のとおりです。

  1. スワップ用ファイルを作成する
  2. 権限を600にする
  3. mkswapで初期化する
  4. swaponで有効化する
  5. 確認する
  6. 必要なら/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

TYPEfileになっていれば、スワップファイルとして有効化されています。

スワップファイルを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の違い

mkswapmkfsは名前が似ていますが、用途が違います。

コマンド 用途
mkfs 通常のファイル保存用ファイルシステムを作成する mkfs.ext4 /dev/sdb1
mkswap スワップ領域を作成する mkswap /dev/sdb1

通常のデータ保存用にしたい場合はmkfsを使います。

メモリ不足時の退避領域として使いたい場合はmkswapを使います。

mkswapとswapon・swapoffの違い

mkswapswaponswapoffはセットで使うことが多いです。

コマンド 役割
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 -fblkidで対象を確認し、必要なデータはバックアップしてから作業しましょう。

コメント

タイトルとURLをコピーしました