見出し画像

Raspberry Pi 5でSSDを使う上でのtips

先日、Raspberry Pi 5をSSDで高速化するための記事を作成しましたが、SSDを使う上でのちょっとしたtipsを追加します。


作業が必要なもの

dphys-swapfile

物理メモリが足りない場合に、ファイルシステム上に仮想メモリファイルを作成して物理メモリの代わりに使うことができます。この仮想メモリファイル、つまりスワップファイルを動的に確保してくれるのがdphys-swapfileサービスです。

Raspberry Pi OSでは標準インストール状態でこのdphys-swapfileが有効になっており、100MBの動的スワップが作成されるようです。

$ sudo systemctl status dphys-swapfile
● dphys-swapfile.service - dphys-swapfile - set up, mount/unmount, and delete a swap file
     Loaded: loaded (/lib/systemd/system/dphys-swapfile.service; enabled; preset: enabled)
     Active: active (exited) since Fri 2024-02-23 19:50:03 JST; 1 day 3h ago
       Docs: man:dphys-swapfile(8)
    Process: 724 ExecStart=/sbin/dphys-swapfile setup (code=exited, status=0/SUCCESS)
    Process: 815 ExecStart=/sbin/dphys-swapfile swapon (code=exited, status=0/SUCCESS)
   Main PID: 815 (code=exited, status=0/SUCCESS)
        CPU: 35ms

 223 19:50:03 raspberrypi systemd[1]: Starting dphys-swapfile.service - dphys-swapfile - set up, mount/unmount, and >
 223 19:50:03 raspberrypi dphys-swapfile[724]: want /var/swap=100MByte, checking existing: keeping it
 223 19:50:03 raspberrypi systemd[1]: Finished dphys-swapfile.service - dphys-swapfile - set up, mount/unmount, and >

$ cat /proc/swaps
Filename                                Type            Size            Used            Priority
/var/swap                               file            102384          0               -2

しかしスワップファイルは頻繁なファイルI/Oが発生するため、SSDの寿命に影響します。メモリが豊富にある8GBモデルの場合は、このサービスを止めてしまってよいでしょう。ただし自己責任でお願いします。

$ sudo swapoff -a
$ sudo systemctl stop dphys-swapfile
$ sudo systemctl disable dphys-swapfile

4GBモデルの場合は悩ましいです。SSDの寿命とのトレードオフになりますが、重いアプリをガシガシと実行する場合はdphys-swapfileサービスは有効にしておいた方がよいかも知れません。

作業が不要なもの (設定済み)

fstrim

SSD上のデータを削除した後に同じ領域に再度書き込みができるようするためには完全にデータを削除する必要があります。このTRIM処理を行うのがfstrimコマンドです (かなり端折った説明です)。

fstrimを実行することで書き込み速度の改善が見込めます。このコマンドは手動で実行することもできますが、一般的には定期的に実行することが望ましいです。Raspberry Pi OSではそのためのfstrim.timerサービスが用意されており、標準インストールしていればenabledになっているはずです。systemctl statusで確認しましょう。

$ sudo systemctl status fstrim.timer
● fstrim.timer - Discard unused blocks once a week
     Loaded: loaded (/lib/systemd/system/fstrim.timer; enabled; preset: enabled)
     Active: active (waiting) since Fri 2024-02-23 19:50:03 JST; 1 day 4h ago
    Trigger: Mon 2024-02-26 00:39:17 JST; 24h left
   Triggers: ● fstrim.service
       Docs: man:fstrim

 223 19:50:03 raspberrypi systemd[1]: Started fstrim.timer - Discard unused blocks once a week.

もしdisabledになっているようであれば、以下のように実行して有効にしましょう。

$ sudo systemctl start fstrim.timer
$ sudo systemctl enable fstrimtimer

ちなみに、fstrimを実行するにはSSDとファイルシステムがTRIMに対応している必要があります。Raspberry Pi OS標準のext4ファイルシステムはTRIMに対応しています。今時のSSDならTRIMに対応していると思いますが、念の為に確認してみましょう。lsblkコマンドを使います。

$ lsblk --discard
NAME        DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
nvme0n1            0      512B       2T         0
├─nvme0n1p1        0      512B       2T         0
└─nvme0n1p2        0      512B       2T         0

DISC-GRANとDISC-MAXの列が0でなければTRIMに対応しています。

なお、TRIM対応を確認するためにhdparmコマンドを使うよう記述しているウェブサイトもありますが、hdparmコマンドはNVMe SSDには対応しておらず、実行しても以下のように空の結果しか返されません。

$ sudo hdparm -I /dev/nvme0n1p2

/dev/nvme0n1p2:

USB SSDなら以下のような結果が得られると思います。

$ sudo hdparm -I /dev/sda | grep TRIM
	   *	Data Set Management TRIM supported (limit 8 blocks)

noatime

ファイルを参照すると、参照タイムスタンプ (atime) が書き換えられます。通常は一日一回だけ更新される (relatime) ようになっていますが、一般的な用途ではこのタイムスタンプを更新する必要性はありません。

Raspberry Pi OSの標準インストール状態ではnoatimeが設定されるようです。/etc/fstabファイルを開いて確認しましょう。

$ cat /etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=${UUID1} /boot/firmware  vfat    defaults          0       2
PARTUUID=${UUID2} /               ext4    defaults,noatime  0       1

ルートファイルシステム ( / ) の4列目が defaults,noatime になっていればOKです。もしnoatimeが設定されていない場合はnoatimeを追記して、再起動しましょう。

※/etc/fstabの編集時は充分に注意して下さい。最悪、OSが起動しなくなります。USB SSDの場合またはNVMe -> SSBアダプタがある場合は

  1. 一度電源を落としてSSDを取り出し

  2. 別のRasPiやPCにUSBアダプタ等で接続し

  3. マウントしてfstabファイルを修正し

  4. SSDを接続して電源を入れ直す

のような対応、あるいはRasPiしかない場合は

  1. 一度電源を落としてSSDを取り出し

  2. RasPi OSの焼いてあるmicroSDを挿して起動し

  3. 起動順をmicroSD優先に変更してから電源を落とし

  4. microSDは挿したままSSDを接続し直して再起動し

  5. マウントしてfstabファイルを編集し

  6. 起動順をSSD優先に戻して電源を落とし

  7. microSDを外してから電源を入れ直す

等の対応が必要になります。


いいなと思ったら応援しよう!