AlmaLinuxのswapについて
前回、「第10回 Raspberry Pi用のAlmaLinuxをSSDにコピーする」では、boot
パーティションを512MB
で設定してみました。ところが、swap
については配布されているrawイメージのままでしたから100MB
のswapファイル
が使用されています。このswap
についても、AlmaLinuxの2023年6月15日より前のバージョンではファイルではなくパーティションとして100MBが使用されていたので、ちょっと不便だったのですがファイルになりましたので好みに合わせて変更することが容易になりました。
このswap
は、AlmaLinuxのようなLinuxシステムで仮想記憶装置として働くもので、アプリケーションを実行していて物理的なメモリーが不足するようになった場合には、仮想的にメモリーの代替として利用される仕組みとなっています。
Raspberry Pi 4では、搭載しているメモリーも2GB、4GB、8GBと種類があり、最大で8GBを使用することができます。また、AlmaLinuxでは最初から64-bit
のカーネルになっているために搭載している大きなメモリー空間を有効に利用することができます。そのため、以前のRaspberry Pi 3Bまでの頃のようにメモリーが不足することも少なくなってきているかとは思います。
それでも最近のようにアプリケーションが大きなメモリーを使用する場合に備えて、ここではswapを拡張する方法を見ていくことにします。
またswap
については、その仕組みとしてメモリーのページ単位でディスクなどの仮想記憶装置に読み書きするようになったことから従来使われていたswapping
からpaging
と呼ばれるようもになって来ています。
なお、Kubernetesを使う場合には、逆に前提条件として「swapを無効化」する必要がある点にも注意が必要です。
注:Raspberry Pi OSの32-bit版の場合では、ポインターでアドレスできるメモリーは4GBまでで、1つのプロセスで使用できるメモリーはカーネルが1GB使うために3GBまでに制限されてしまいます。
swapの状態を確認
free
コマンドを実行して、メモリーの使用状況を見ることができます。
$ free -h
total used free shared buff/cache available
Mem: 7.6Gi 1.0Gi 6.0Gi 21Mi 786Mi 6.6Gi
Swap: 99Mi 0B 99Mi
オプションとして-h
を使用することで、わかりやすい単位の表示としています。最初の行がMem
で物理メモリーの様子を表示しています。ここでは、Raspberry Pi 4の8GB
モデルで実行していますからメモリ合計が7.6GB
として表示されています。
次の行がSwap
としてswapの状態を表示しています。合計が99MB
ですが、まだ使われていない状態になっています。
次に、swapon
コマンドを実行してみます。
$ swapon -s
Filename Type Size Used Priority
/swapfile file 102396 0 -2
ここで、swapon
コマンドはswap領域としてのディスクパーティション、またはファイルを有効化したり無効化することのできるコマンドです。ここではオプションとして-s
を使用して現在の使用状況を表示しています。
この表示を見てもわかるようにswap
の実際の領域としては、/swapfile
というファイルが使用されています。
AlmaLinuxの場合には、/etc/fstab
でswapが設定されています。
$ cat /etc/fstab
UUID=0f355284-0ba7-4cd4-92d4-69025db053b0 / ext4 defaults,noatime 0 0
UUID=6E74-BA51 /boot vfat defaults,noatime 0 0
/swapfile none swap defaults 0 0
上記の例のように、/etc/fstab
にswap
を設定している行があります。
注:Raspberry Pi OSの場合には、dphys-swapfile
というサービスが実行されています。この場合には、/etc/fstab
ではなく/etc/dphys-swapfile
という設定ファイルが使用されています。
swapの無効化
次のコマンドを実行して、swapを停止して無効化することができます。
$ systemctl status swapfile.swap
まず、状態がActive: active
となっていることを確認します。
$ sudo systemctl stop swapfile.swap
swapを停止しています。
$ systemctl status swapfile.swap
停止後の状態を確認しています。状態が、Active: inactive (dead)
となりました。
現在のswapを確認してみます。
$ free -h
total used free shared buff/cache available
Mem: 7.6Gi 640Mi 6.7Gi 15Mi 421Mi 7.0Gi
Swap: 0B 0B 0B
free
コマンドの実行でSwap
が0B
になりました。
$ swapon -s
swapon
コマンドでは何も表示されなくなっています。
swap領域の拡張
それでは、swap領域を拡張していきます。ここでは例として/swapfile
を4GB用意して設定していくことにします。
swapを停止している状態で、次のコマンドを実行します。
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
$ sudo mkswap -L swap /swapfile
dd
コマンドでゼロを1MB
ずつのブロックで4096
回書き込むことで4GB
の/swapfile
を作成しています。出来上がった/swapfile
を、mkswap
コマンドでswapとしての設定をしています。また、その際に-L
オプションでラベルをswap
として設定しています。
ここでは、元々あったフィルを拡張していますが、新しいファイルを作成する場合には、次のようなオーナーとパーミッションに設定するようにします。
$ ls -ld /swapfile
-rw-------. 1 root root 4294967296 8月 17 09:27 /swapfile
準備ができたら、停止していたswapを再開します。
$ sudo systemctl start swapfile.swap
再開後の状態を確認してみます。
$ systemctl status swapfile.swap
状態が、Actieve: active
となりました。
拡張後のswapの状態を確認
再開後に、拡張したswapの状態を確認してみます。
まずfree
コマンドを実行します。
$ free -h
total used free shared buff/cache available
Mem: 7.6Gi 929Mi 6.3Gi 18Mi 557Mi 6.7Gi
Swap: 4.0Gi 0B 4.0Gi
Swap
が4GB
で設定されています。
同様にswapon
コマンドで確認してみます。
$ swapon -s
Filename Type Size Used Priority
/swapfile file 4194300 0 -2
Swap
が4GB
に拡張されてることが確認できました。
恒久的なswapの無効化
AlmaLinuxの場合には、/etc/fstab
でswapが設定されていますから、/etc/fstab
にあるswapの行を削除するかコメントアウトしてから再起動することで恒久的に無効化することができます。
$ cat /etc/fstab
UUID=0f355284-0ba7-4cd4-92d4-69025db053b0 / ext4 defaults,noatime 0 0
UUID=6E74-BA51 /boot vfat defaults,noatime 0 0
## /swapfile none swap defaults 0 0
Kubernetesを使用する場合のように、swapを無効化したい場合には、このようにする必要があります。
まとめ
最近では、使用できるメモリーが大きくなって来ていることもあり、swap
に頼る頻度も少なくなりつつあるかとは思います。
その一方でアプリケーションが要求するメモリーが増大化しつつあることもあり、このようにswap
を操作することが出来ることでRaspberry Piで動かすAlmaLinuxも応用する幅が広がってくるのではないでしょうか。