swap – matoken's blog https://matoken.org/blog Is there no plan B? Fri, 22 Apr 2022 18:50:40 +0000 ja hourly 1 https://wordpress.org/?v=6.9.1 https://matoken.org/blog/wp-content/uploads/2025/03/cropped-1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9-32x32.jpeg swap – matoken's blog https://matoken.org/blog 32 32 導入済みのLinuxにスワップを設定する(Oracle Cloud VPS) https://matoken.org/blog/2022/04/23/set-up-swap-on-installed-linuxoracle-cloud-vps/ https://matoken.org/blog/2022/04/23/set-up-swap-on-installed-linuxoracle-cloud-vps/#respond Fri, 22 Apr 2022 22:49:44 +0000 http://matoken.org/blog/?p=3624

最近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
]]>
https://matoken.org/blog/2022/04/23/set-up-swap-on-installed-linuxoracle-cloud-vps/feed/ 0
スワップファイルを作ってお手軽にスワップを増やす https://matoken.org/blog/2018/05/30/create-swap-files-and-easily-increase-swap/ https://matoken.org/blog/2018/05/30/create-swap-files-and-easily-increase-swap/#respond Wed, 30 May 2018 12:05:56 +0000 http://matoken.org/blog/?p=1915 RAMを大量に必要とするプログラムがあって遅くてもいいから一時的にスワップを増やしてやり過ごすことがあります.また,RAMの少ないマシンでディスクの構成をいじるのが面倒なときにもスワップファイルが使えます.ということで今回RAMが2GBでそこそこあるけど偶に使い切ってしまう(主にchromium!)のでスワップファイルを用意してみました.

スワップファイルを作成します.今回は/var/tmp/swap.imgというファイルで2GB用意しました.

$ sudo install -o root -g root -m 0600 /dev/null /var/tmp/swap.img
$ sudo dd if=/dev/zero of=/var/tmp/swap.img bs=1M count=2048
$ sudo mkswap /var/tmp/swap.img

とりあえずスワップファイルをアドホックに有効にします.

$ sudo swapon /var/tmp/swap.img 

.スワップが増えています.

$ swapon -s
Filename                                Type            Size    Used    Priority
/dev/zram0                              partition       254688  80024   5
/dev/zram1                              partition       254688  80016   5
/dev/zram2                              partition       254688  79940   5
/dev/zram3                              partition       254688  79928   5
/var/tmp/swap.img                       file            2097148 0       -1

一時的に必要な場合はこれで良いのですが,恒久的に利用したい場合はこのままでは再起動後には有効になりません./etc/fstabに設定を書いて起動時に有効になるようにします.

$ sudo vi /etc/fstab
$ grep -i swap.img /etc/fstab 
/var/tmp/swap.img     none    swap    sw      0       0

一旦swapoffでスワップを無効にしてswapon -aでfatabの設定が有効か試します.swapon -afstabのスワップの設定を全て有効にします.

$ sudo swapoff /var/tmp/swap.img
$ sudo swapon -a
$ swapon -s
Filename                                Type            Size    Used    Priority
/dev/zram0                              partition       254688  80020   5
/dev/zram1                              partition       254688  80016   5
/dev/zram2                              partition       254688  79940   5
/dev/zram3                              partition       254688  79928   5
/var/tmp/swap.img                       file            2097148 0       -1

念のため再起動してスワップファイルが有効かも試せばOKです :)

スワップファイルの利用はお手軽ですが,スワップパーティーションに比べると性能は少し落ちるので可能ならスワップパーティーションを利用したほうが良いです.RAMが増設できるならそれが一番です.

環境

$ dpkg-query -W mount
mount   2.27.1-6ubuntu3.6
$ lsb_release -d
Description:    Ubuntu 16.04.4 LTS
$ uname -m
aarch64
]]>
https://matoken.org/blog/2018/05/30/create-swap-files-and-easily-increase-swap/feed/ 0
Btrfsでswap fileが作れないことを知らずに嵌まる https://matoken.org/blog/2016/10/03/without-knowing-that-swap-file-is-not-able-to-make-in-the-btrfs%ef%bf%bc%ef%bf%bc/ https://matoken.org/blog/2016/10/03/without-knowing-that-swap-file-is-not-able-to-make-in-the-btrfs%ef%bf%bc%ef%bf%bc/#respond Sun, 02 Oct 2016 23:39:05 +0000 http://matoken.org/blog/?p=1426 ファイルからswapを設定しようとして失敗しました.

$ fallocate -l 500M test
$ /sbin/mkswap test
mkswap: test: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 500 MiB (524283904 bytes)
no label, UUID=aaf26c11-4653-40d5-b279-faa7d8c8625d
$ sudo chmod 600 test
$ sudo chown 0.0 test
$ ls -l test
-rw------- 1 root root 524288000 10月  3 07:26 test
$ sudo swapon test
swapon: /home/mk/test: swapon failed: 無効な引数です
$ sudo swapon -v /home/mk/test
swapon: /home/mk/test: found signature [pagesize=4096, signature=swap]
swapon: /home/mk/test: pagesize=4096, swapsize=524288000, devsize=524288000
swapon /home/mk/test
swapon: /home/mk/test: swapon failed: 無効な引数です
$ LANG=C sudo swapon -v /home/mk/test
swapon: /home/mk/test: found signature [pagesize=4096, signature=swap]
swapon: /home/mk/test: pagesize=4096, swapsize=524288000, devsize=524288000
swapon /home/mk/test
swapon: /home/mk/test: swapon failed: Invalid argument

検索するとBtrfsでswap fileがサポートされていないとか.知らなかったorz

性能低下するけどloop deviceを使えばいけるよというワークアラウンドが.

A workaround, albeit with poor performance, is to mount a swap file via a loop device.

試してみます.

$ /sbin/losetup -l
$ sudo /sbin/losetup loop0 ./test
$ /sbin/losetup -l
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO
/dev/loop0 0 0 0 0 /home/mk/test 0
$ sudo swapon -v /dev/loop0
swapon: /dev/loop0: found signature [pagesize=4096, signature=swap]
swapon: /dev/loop0: pagesize=4096, swapsize=536870912, devsize=536870912
swapon /dev/loop0
$ /sbin/swapon -s
Filename Type Size Used Priority
/dev/dm-2 partition 16658428 0 -1
/dev/loop0 partition 524284 0 -2

うまく行きました. もとに戻しておきます.

$ sudo swapoff /dev/loop0
$ sudo /sbin/losetup -d /dev/loop0
$ sudo rm ./test

]]>
https://matoken.org/blog/2016/10/03/without-knowing-that-swap-file-is-not-able-to-make-in-the-btrfs%ef%bf%bc%ef%bf%bc/feed/ 0