Raspberry Pi Zero 2 W(メモリ512MB)でUbuntu Serverを運用する場合、標準のシステム要件(1GB以上推奨)を下回るため、不要なサービスの停止は非常に効果的です。
以下のサービスを停止・無効化することでメモリ使用量を削減できます。
1. 優先的に停止すべきサービス
- snapd: パッケージ管理システムですが、常駐メモリを多く消費します。使用していない場合は削除を推奨します。
- コマンド:
sudo apt purge snapd
- コマンド:
- cloud-init: 初回起動時の設定用ツールで、起動後もメモリを消費し続けることがあります。
- コマンド:
sudo touch /etc/cloud/cloud-init.disabled(無効化)
- コマンド:
- ModemManager: モデム接続用ですが、Wi-Fi/有線のみであれば不要です。
- コマンド:
sudo systemctl disable --now ModemManager
- コマンド:
- unattended-upgrades: 自動更新サービス。手動更新にするなら停止可能です。
- コマンド:
sudo systemctl disable --now unattended-upgrades
- コマンド:
- avahi-daemon: ネットワーク上の機器発見用。ホスト名でのアクセスが不要なら停止できます。
- コマンド:
sudo systemctl disable --now avahi-daemon
- コマンド:
2. メモリ節約のための設定
- GPUメモリの削減: 映像出力を使わない場合、GPUへの割り当てを最小限にします。
/boot/firmware/config.txt(または/boot/config.txt)にgpu_mem=16を追記。
- Swapファイルの作成: メモリ不足によるフリーズを防ぐため、1GB程度のスワップ領域を確保してください。
- システムの状態確認: 以下のコマンドで、現在メモリを消費しているサービスを特定できます。
systemctl list-units --type=service --state=runningsystemd-analyze blame(起動に時間がかかっているサービスの確認)
SSH以外の不要なサービスを一つずつ sudo systemctl disable --now [サービス名] で止めていくのが安全です。
さらに軽量化を進めるために、現在どのような用途でこのサーバーを使用されていますか?用途に合わせて削れるものを追加で提案できます。
fbiを使った画像表示を専門に行うサイネージシステムに使います。
FBI (linux Framebuffer Imageviewer) を使用したサイネージ用途であれば、ネットワーク、物理コンソール、バックグラウンド更新に関連するサービスをさらに削ることが可能です。
1. FBI専用機として削れる追加サービス
FBIはフレームバッファに直接描画するため、通常の対話型ログインや多機能なネットワーク管理は最小限にできます。
- getty (Ttyの制限): 複数の仮想コンソールが起動していますが、サイネージなら1つ(FBI実行用)以外は不要です。
- コマンド:
sudo systemctl disable getty@tty2.service(tty3以降も同様に停止可能)
- コマンド:
- wpa_supplicant / NetworkManager: 画像をローカルから再生するだけであれば、Wi-Fi自体を無効化できます。
- コマンド:
sudo systemctl disable wpa_supplicant
- コマンド:
- Multipathd: サーバー向けストレージ管理用で、ラズパイのSDカード運用には不要です。
- コマンド:
sudo systemctl disable --now multipathd
- コマンド:
- packagekit: ソフトウェア情報の更新用。手動で行うなら不要です。
- コマンド:
sudo systemctl disable --now packagekit
- コマンド:
2. サイネージを安定させるためのFBI最適化
メモリが少ない環境では、FBIの実行オプションも重要です。
- 自動終了の回避とループ設定: FBIがメモリ不足で落ちないよう、キャッシュを溜め込まない設定にします。bash
fbi -d /dev/fb0 -T 1 -a -noverbose -t 10 --cachemem 0 /path/to/images/*--cachemem 0: メモリキャッシュを無効にし、その都度ファイルを読み込みます(512MB環境では必須級)。-a: 画面サイズに自動追従させます。
3. ZRAMの導入(強く推奨)
物理メモリが限界に近い場合、スワップをSDカードに書くのではなく、ZRAM(メモリ内の圧縮領域)を使用すると、パフォーマンスの低下を抑えつつ実質的なメモリ容量を増やせます。
zram-toolsなどを導入し、メモリの1/2程度をZRAMに割り当てると、512MBでも動作が安定します。
4. GPUメモリの最小化
サイネージですが、FBIはフレームバッファ(CPU描画)を利用するため、GPU専用メモリは最小で問題ありません。
/boot/firmware/config.txtにgpu_mem=16(または32)を記述して再起動してください。
現在は画像の更新(ネットワーク経由か、USB等か)はどのように行っていますか?更新方法によっては、さらにネットワーク関連のサービスを整理できます。
ネットワークドライブをマウントしています。
ネットワークドライブ(SMB/CIFSやNFS)をマウントして画像を読み込む運用であれば、
ファイル共有プロトコルに関連するメモリ消費と、マウント維持のためのオーバーヘッドを最小化するのが鍵です。
512MBの制限下で、以下の追加アクションを推奨します。
1. ネットワークマウントの効率化
マウント方法を工夫することで、常時接続によるリソース消費を抑えます。
- AutoFS(自動マウント)の利用: 常時接続(fstab)ではなく、アクセスがあった時だけマウントし、一定時間使わなければアンマウントするようにします。これにより、接続維持のためのメモリやネットワーク待機のリソースを節約できます。
- マウントオプションの最適化:
- SMB (CIFS) の場合、
cache=noneオプションを検討してください。メモリ上でのキャッシュを無効にし、FBIが画像を読み込む際に直接サーバーから取得するようにします。 vers=3.0など、最新かつ軽量なプロトコルバージョンを明示的に指定して、古い互換モードの動作を避けます。
- SMB (CIFS) の場合、
2. 不要な「ファイル探索・待機」サービスの停止
ネットワーク経由でファイルを扱う際、Ubuntu Serverが裏で動かしている「お節介」なサービスを止めます。
- gvfs: デスクトップ環境用の仮想ファイルシステムですが、サーバー版でも依存関係で動いている場合があります。サイネージには不要です。
- コマンド:
sudo apt purge gvfs*
- コマンド:
- cups (印刷サービス): ネットワーク上のプリンターを探し続けるため、メモリを消費します。
- コマンド:
sudo systemctl disable --now cups
- コマンド:
3. FBI実行時のメモリ管理(再掲・重要)
マウント先がネットワークドライブの場合、FBIが「全画像を一度にスキャン」しようとするとメモリが枯渇します。
- キャッシュの無効化: 前述の
--cachemem 0オプションを必ず使用してください。 - リストからの読み込み: 大量の画像がある場合、
fbi /mnt/network_drive/*とするとファイルリストの展開だけでメモリを食います。テキストファイルに画像パスを書き出し、-lオプションで読み込む方が軽量です。
4. その他、サイネージ専用機で削れるサービス
- man-db: 毎日深夜にマニュアルのインデックスを更新し、CPUとメモリを占有します。
- コマンド:
sudo systemctl disable --now man-db.timer
- コマンド:
- polkit: 権限管理用ですが、GUIを使わない単一用途のサイネージなら停止を検討できます(システムの安定性と相談)。
ZRAMの設定は済んでいますか?512MB環境では、物理メモリの半分程度をZRAMに割り当てるだけで、ネットワーク越しの画像展開時に発生する瞬間的なメモリ不足(OOM Killerによる強制終了)を劇的に防げます。
画像の枚数や1枚あたりの解像度はどの程度でしょうか?それにより、さらに踏み込んだメモリ制限設定が必要か判断できます。
