経緯
常時起動しているRaspberryPiのメモリswapを無効化してSDカード寿命を延ばしたい。
使用機器
・RaspberryPi 4B (4GB)
・microSD 64GB
・Raspberry Pi OS Bookworm
swapを無効化する
事前確認
現在のswap状況は以下のコマンドで確認できます。
# 確認方法1
pi@rp:~ $ free -h
total used free shared buff/cache available
Mem: 3.7Gi 476Mi 2.3Gi 42Mi 1.0Gi 3.2Gi
Swap: 511Mi 0B 511Mi
# 確認方法2
pi@rp:~ $ swapon
NAME TYPE SIZE USED PRIO
/var/swap file 512M 0B -2
swap停止手順
1.サービスの停止
sudo systemctl stop dphys-swapfile.service
2.サービス自動起動の無効化
sudo systemctl disable dphys-swapfile.service
3.設定ファイルを編集
念のため、設定ファイルでも swap サイズを 0 に設定しておきます。
sudo nano /etc/dphys-swapfile
CONF_SWAPSIZE=0
4.swapファイルの削除
sudo rm -f /var/swap
事後確認
swapが無効化されたことを確認します。
# 確認方法1
pi@rp:~ $ free -h
total used free shared buff/cache available
Mem: 3.7Gi 472Mi 2.4Gi 42Mi 1.0Gi 3.2Gi
Swap: 0B 0B 0B
# 確認方法2
pi@rp:~ $ swapon
※無効化されているためswaponの出力は返ってきません
zramを導入する
swapを無効化したことで、メモリ不足時にシステムが不安定になる可能性があるので、代わりに zram を導入します。
zramはRAM上に圧縮領域を作ってswapとして利用するため、SDカードへの書き込みが発生せず高速に動作するのが利点です。
インストール
sudo apt install zram-tools
確認
# 確認方法1
pi@rp:~ $ free -h
total used free shared buff/cache available
Mem: 3.7Gi 481Mi 2.3Gi 42Mi 1.0Gi 3.2Gi
Swap: 255Mi 0B 255Mi
# 確認方法2
pi@rp:~ $ swapon
NAME TYPE SIZE USED PRIO
/dev/zram0 partition 256M 0B 100
# 確認方法3
pi@rp:~ $ zramctl
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4 256M 4K 63B 20K 4 [SWAP]
※ 256MiBの zram swap が作成されました。
割当サイズ変更
zram swapが追加できましたが、256MiBでは小さいので拡張します。
割当サイズは下記の設定ファイルを編集することで変更することができます。
sudo nano /etc/default/zramswap
# 物理メモリの50%を zram swap に割り当てる
PERCENT=50
# 圧縮アルゴリズム
ALGO=lz4
編集後、サービスを再起動します。
sudo systemctl restart zramswap.service
# 確認方法1
pi@rp:~ $ free -h
total used free shared buff/cache available
Mem: 3.7Gi 484Mi 2.3Gi 42Mi 1.0Gi 3.2Gi
Swap: 1.9Gi 0B 1.9Gi
# 確認方法2
pi@rp:~ $ swapon
NAME TYPE SIZE USED PRIO
/dev/zram0 partition 1.9G 0B 100
# 確認方法3
pi@rp:~ $ zramctl
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4 1.9G 4K 64B 20K 4 [SWAP]
割当サイズを物理メモリの50%に変更することができました。
これで負荷が掛かっても安心して使用できそうです。