SSDの特性から、定期的に最適化(以下 trim)をかけないと、SSDの寿命なり、パフォーマンスがいちじるしく落ちていきます。そのため、trixie(Debian13)では、fstrim.timerというサービスが、一週間に一回trimを実行しています。
現在Raspberry Pi3,Pi4,Pi5を運用していますが、きちんと最適化が実行されているか確認します。
- Pi3 USB2.0でIDE SSDを接続
- Pi4 USB3.0でIDE SSDを接続
- Pi5 PCIe Gen 2.0でNVME SSDを接続
USBで接続しているとtrimできない場合があります。今回Pi3でtrimができなかったので、その対処法も説明します。
SSDにtrimが必要な理由
そもそもSSDは、ページ単位で書き換えを行い、ブロック単位で初期化します。
更新を行うと、更新対象のページを読み込み=>内容を更新=>未使用のページに書き込み=>元ページを無効化します。
ブロックに未使用のページが無い時は、新しいブロックの空きページに書き込みを行います。
ブロックの中のページが全て無効になったら、一定のタイミングでGC(ガーベージコレクション)が走り、ブロックが破棄(初期化)され次の利用に備えます。(SSDの内部で機能的にGC(ガーベージコレクション)を行う製品もあります。
従って、SSDの空き容量が少なくなったり、負荷が高い状態が継続すると、更新が発生した時点で、ページの読み込み=>内容の更新=>無効ブロックの初期化=>空きページに更新=>元ページの無効化 と冗長な処理が都度発生し、パフォーマンスが低下していきます。
trixie(Debian13)では、無効ブロックを定期的に削除するサービスが動いています。下記のコマンドで、trimが実行されているか確認できます。赤字の通りactiveであれば一週間ごとにtrimが実行されています。
$ systemctl status fstrim.timer
● fstrim.timer - Discard unused filesystem blocks once a week
Loaded: loaded (/usr/lib/systemd/system/fstrim.timer; enabled; preset: ena>
Active: active (waiting) since Sun 2026-01-04 22:01:26 JST; 6min ago
Invocation: 8331925cc8034400ab7a7c44dd95c621
Trigger: Mon 2026-01-05 01:18:31 JST; 3h 10min left
Triggers: ● fstrim.service
Docs: man:fstrim
trimの実行間隔の確認は、下記のコマンドで可能です。結果からすると毎週月曜日に稼働しているようです。
$ systemctl list-timers fstrim.timer
NEXT LEFT LAST PASSED UNIT ACTIVATES
Mon 2026-01-12 00:52:00 JST 6 days Mon 2026-01-05 01:11:47 JST 9h ago fstrim.timer fstrim.service
1 timers listed.
Pass --all to see loaded but inactive timers, too.
設定内容の確認は、下記のコマンドで可能です。
$ systemctl cat fstrim.timer
# /usr/lib/systemd/system/fstrim.timer
[Unit]
Description=Discard unused filesystem blocks once a week
Documentation=man:fstrim
ConditionVirtualization=!container
ConditionPathExists=!/etc/initrd-release
[Timer]
OnCalendar=weekly
AccuracySec=1h
Persistent=true
RandomizedDelaySec=100min
[Install]
WantedBy=timers.target
Raspberry Pi3でtrimの確認
IDE SSDをUSBのケースに入れて、USB2.0でRaspberry Pi3と接続しています。
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub
Bus 001 Device 003: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub
Bus 001 Device 004: ID 0424:7800 Microchip Technology, Inc. (formerly SMSC)
Bus 001 Device 005: ID 14cd:6116 Super Top M6116 SATA Bridge
赤字の通り、ベンダーIDが14cd、プロダクトIDが6116 Super Top M6116 SATA Bridgeを経由してUSBに接続されています。
trimがサポートされているか下記のコマンドで確認します。
$ lsblk --discard
NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
loop0 0 4K 4G 0
sda 0 0B 0B 0
∟sda1 0 0B 0B 0
∟sda2 0 0B 0B 0
zram0 0 4K 2T 0
赤字の通り、DISC-GRAN 0B およびDISC-MAX 0Bと表示されています。この状態は、trimがサポートされていないということです。
実際にコマンドでtrimをかけてみると
$ sudo fstrim -v /
fstrim: /: the discard operation is not supported
赤字の通り、残念ながらtrimがサポートされていないようです。
そこで、UDEVルールに、接続のSSDを追加します。フォーマットは「ACTION==”add|change”, ATTRS{idVendor}==”ベンダーID”, ATTRS{idProduct}==”プロダクトID”, SUBSYSTEM==”scsi_disk”, ATTR{provisioning_mode}=”unmap”」です。
下記の通り新しくファイルを作成し
$ sudo vi /etc/udev/rules.d/ssd-trim.rules
ACTION=="add|change", ATTRS{idVendor}=="14cd", ATTRS{idProduct}=="6116", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap"
を追加します。
赤字の部分は、lsusbコマンドで出力したベンダーIDとプロダクトIDです。設定が完了したらraspberry pi3を再起動して確認します。
trim可能か下記のコマンドで確認します。
$ lsblk --discard
NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
loop0 0 4K 4G 0
sda 0 512B 4G 0
∟sda1 0 512B 4G 0
∟sda2 0 512B 4G 0
zram0 0 4K 2T 0
赤字の通りDISC-GRANおよびDISC-MAXに0B以外が表示されているので、trimが可能となりました。ここで再度trimを実行すると
$ sudo fstrim -v /
/: 104.3 GiB (111971782656 bytes) trimmed
とこれで、trimできました。
後は、fstrim.timerのサービスにより定期的にtrimが実行され、SSDの最適化が継続されます。
Raspberry Pi4でtrimの確認
IDE SSD(JMS583Gen 2 to PCIe Gen3x2 Bridge)をUSBのケースに入れて、USB3.0でRaspberry Pi4と接続しています。
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 002: ID 152d:0583 JMicron Technology Corp. / JMicron USA Technology Corp. JMS583Gen 2 to PCIe Gen3x2 Bridge
赤字の通りJMS583でUSB3.0に接続されています。
trimがサポートされているかは、下記のコマンドで確認します。
$ lsblk --discard
NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sda 0 4K 4G 0
∟sda1 0 4K 4G 0
∟sda2 0 4K 4G 0
zram0 0 4K 2T 0
赤字の通り、DISC-GRAN 4K DISC-MAX 4Gで、trimがサポートされています。試しにtrimをかけてみると
$ sudo fstrim -v /
/: 226.1 GiB (242746011648 bytes) trimmed
赤字の通り、trimが実行されました。
後は、fstrim.timerのサービスにより定期的にtrimが実行され、SSDの最適化が継続されます。
Raspberry Pi5でtrimの確認
PCIe Gen 2.0でNVME SSDが、Raspberry Pi5と接続されています。下記のコマンドでPCIeに接続されているNVMEのSSDを確認します。
$ lspci
0001:00:00.0 PCI bridge: Broadcom Inc. and subsidiaries BCM2712 PCIe Bridge (rev 21)
0001:01:00.0 Non-Volatile memory controller: Realtek Semiconductor Co., Ltd. RTS5765DL NVMe SSD Controller (DRAM-less) (rev 01)
0002:00:00.0 PCI bridge: Broadcom Inc. and subsidiaries BCM2712 PCIe Bridge (rev 21)
0002:01:00.0 Ethernet controller: Raspberry Pi Ltd RP1 PCIe 2.0 South Bridge
trimがサポートされているかは、下記のコマンドで確認します。
$ lsblk --discard
NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
loop0 0 4K 4G 0
zram0 0 16K 2T 0
nvme0n1 0 512B 2T 0
∟nvme0n1p1 0 512B 2T 0
∟nvme0n1p2 0 512B 2T 0
赤字の通り、DISC-GRAN 512B DISC-MAX 2Tで、trimがサポートされています。試しにtrimをかけてみると
$ sudo fstrim -v /
/: 226.9 GiB (243657654272 bytes) trimmed
赤字の通り、trimが実行されました。
後は、fstrim.timerのサービスにより定期的にtrimが実行され、SSDの最適化が継続されます。
