導入済みのLinuxにスワップを設定する(Oracle Cloud VPS)

最近Oracle Cloud VPSのFree Tier Always Free枠で遊んでいます.
今日はなんだかとても重くなりましたRAMが1GBあるのですが,9割以上利用していました.swapは未設定.swapを設定してみました.
Oracle Cloudですが大抵の環境でも同じように出来るはずです.

アドホックなswapファイル設定

まずは急場しのぎによく使う方法でスワップファイルを作成して利用する方法.

適当な場所に空ファイルを作成します. ここでは2GB分作成しました.

$ sudo dd if=/dev/zero of=/var/tmp/swap bs=1M count=2048

swapを設定します.

$ sudo chmod 600 /var/tmp/swap (1)
$ sudo mkswap /var/tmp/swap (2)
$ sudo swapon /var/tmp/swap (3)
$ free -h (4)
              total        used        free      shared  buff/cache   available
Mem:          966Mi       303Mi        62Mi        12Mi       600Mi       501Mi
Swap:         2.0Gi       0.0Ki       2.0Gi
$ sudo swapoff /var/tmp/swap (5)
$ sudo rm /var/tmp/swap (6)
  1. rootのみ読み書きに設定
  2. swapファイルを初期化
  3. swapに割当
  4. swapが設定されたのを確認
  5. 必要なくなったらswapから取り外し
  6. 必要なくなったswapファイルを削除

使い続けたい場合は/etx/fstabに設定することで永続化して再起動後も利用することができます.(下のswapパーティションを作る方法のほうが少し速いはず)

$ sudo vi /etc/fstab (1)
$ sudo git -C /etc diff HEAD~ /etc/fstab (2)
diff --git a/fstab b/fstab
index d1ac1c3..01c9c0e 100644
--- a/fstab
+++ b/fstab
@@ -1,5 +1,6 @@
 LABEL=cloudimg-rootfs  /        ext4   defaults        0 1
 LABEL=UEFI     /boot/efi       vfat    umask=0077      0 1
+/var/tmp/swap  none    swap    pri=-1  0 0

 # CLOUD_IMG: This file was created/modified by the Cloud Image build process
 ######################################
$ sudo swapon -av (3)
swapon: /var/tmp/swap: found signature [pagesize=4096, signature=swap]
swapon: /var/tmp/swap: pagesize=4096, swapsize=2147483648, devsize=2147483648
swapon /var/tmp/swap
$ free (4)
              total        used        free      shared  buff/cache   available
Mem:         989340      308556       71368       12880      609416      517280
Swap:       2097148           0     2097148
  1. /etc/fatab 修正
  2. /etc/fstab 修正内容
  3. swapを手動で反映(次回起動時からは自動的に反映される)
  4. swapが設定されたのを確認

ディスクを縮小してswapパーティションを作成

swapファイルを使う方法はお手軽ですが,レイヤーが増えるので少し遅くなるはずです.割当済のディスクを縮小してswapパーティションを作成してマウントします.

Warning

設定をミスするとシステムが壊れるので注意して操作してください.操作に不安がある場合は上のswapファイルを利用したほうが安全です.

Partedで処理を行います.GUIの場合はgPartedが解りやすくて便利です.
現在の状態を確認してみます.空きディスクはほとんどありませんが,パーティション1の /dev/dsa1 を縮小してswap用に貰うことにします.

$ sudo parted /dev/sda
  :
(parted) print free
Model: ORACLE BlockVolume (scsi)
Disk /dev/sda: 50.0GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
        17.4kB  1049kB  1031kB  Free Space
14      1049kB  5243kB  4194kB                     bios_grub
15      5243kB  116MB   111MB   fat32              boot, esp
 1      116MB   50.0GB  49.9GB  ext4

パーティション1を50GBから48GBにリサイズします.

(parted) resizepart
Partition number? 1
Warning: Partition /dev/sda1 is being used. Are you sure you want to continue?
Yes/No? yes
End?  [50.0GB]? 48GB
Warning: Shrinking a partition can cause data loss, are you sure you want to continue?
Yes/No? yes

パーティション1が小さくなりました.

(parted) print
Model: ORACLE BlockVolume (scsi)
Disk /dev/sda: 50.0GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
14      1049kB  5243kB  4194kB                     bios_grub
15      5243kB  116MB   111MB   fat32              boot, esp
 1      116MB   48.0GB  47.9GB  ext4

できた空き領域からswap用のパーティーションを作成します.

(parted) mkpart
Partition name?  []?
File system type?  [ext2]? linux-swap
Start? 48.0GB
End? 50GB
(parted) print
Model: ORACLE BlockVolume (scsi)
Disk /dev/sda: 50.0GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system     Name  Flags
14      1049kB  5243kB  4194kB                        bios_grub
15      5243kB  116MB   111MB   fat32                 boot, esp
 1      116MB   48.0GB  47.9GB  ext4
 2      48.0GB  50.0GB  2009MB  linux-swap(v1)

(parted) quit
Information: You may need to update /etc/fstab.

swapパーティションを初期化します.

$ sudo mkswap /dev/sda2
Setting up swapspace version 1, size = 1.9 GiB (2009067520 bytes)
no label, UUID=4e27ed83-3d75-4c3d-87ac-f16e618bba4a

アドホックに手動でswapを有効化してみます.

$ sudo swapon -v UUID=4e27ed83-3d75-4c3d-87ac-f16e618bba4a
swapon: /dev/sda2: found signature [pagesize=4096, signature=swap]
swapon: /dev/sda2: pagesize=4096, swapsize=2009071616, devsize=2009071616
swapon /dev/sda2
$ free
              total        used        free      shared  buff/cache   available
Mem:         989340      311428       83696       12884      594216      513164
Swap:       1961980           0     1961980

一旦swapをoffにして永続化のために/etc/fstabに登録してswaponしてみます.

$ sudo swapoff UUID=4e27ed83-3d75-4c3d-87ac-f16e618bba4a
$ sudo vi /etc/fstab
$ sudo git -C /etc diff /etc/fstab
diff --git a/fstab b/fstab
index e22bda5..72d64af 100644
--- a/fstab
+++ b/fstab
@@ -1,6 +1,6 @@
 LABEL=cloudimg-rootfs  /        ext4   defaults        0 1
 LABEL=UEFI     /boot/efi       vfat    umask=0077      0 1
-/var/tmp/swap  none    swap    pri=20  0 0
+UUID=4e27ed83-3d75-4c3d-87ac-f16e618bba4a      none    swap    pri=-1  0 0

 # CLOUD_IMG: This file was created/modified by the Cloud Image build process
 ######################################
ubuntu@instance-20220327-0134:~$ sudo swapon -a
ubuntu@instance-20220327-0134:~$ free
              total        used        free      shared  buff/cache   available
Mem:         989340      312360       80884       12884      596096      512232
Swap:       1961980           0     1961980

次回起動時から自動的に有効になるはずです.

環境

Oracle Cloud コンピュートインスタンス
イメージ
Canonical-Ubuntu-20.04-Minimal-2022.03.04-0
$ dpkg-query -W parted mount
mount   2.34-0.1ubuntu9.3
parted  3.3-4ubuntu0.20.04.1
$ lsb_release -dr
Description:    Ubuntu 20.04.4 LTS
Release:        20.04
$ uname -a
Linux instance-20220327-0134 5.13.0-1027-oracle #32~20.04.1-Ubuntu SMP Fri Apr 15 05:59:34 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)