LoginSignup
1
0

More than 1 year has passed since last update.

NanoPi NEO / NanoPi NEO2 NASキットでSSD TRIMを有効にする

Last updated at Posted at 2022-12-22

一見TRIMの設定ができたように見えていたが後日問題(後述)が発覚した。
原因等が分かるまでは重要な環境では実行しないでほしい。(2023/1/10 追加)

はじめに

NanoPi NEO / NanoPi NEO2 NASキットに搭載したSATA SSDがfstrimコマンドを使用してTRIM操作できないので対処した。

環境

状況

SATA SSDに移動してある/パーティションに対してfstrimコマンドを実行するとエラーメッセージが出る。

# fstrim -v /
fstrim: /: the discard operation is not supported

NanoPi NEO / NanoPi NEO2 NASキットでは、SATA SSDは内部的にUSB接続されている。USB接続されたSSDは環境や設定によってTRIMできないらしい。

対処手順

1. root/etc/udev/rules.d/にルールファイルを作成する。ファイル名は例えば99-usap-trim.rules にする(ファイル名の拡張子がrulesならよい)

ACTION=="add|change", ATTRS{idVendor}=="152d", ATTRS{idProduct}=="0578", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap"

152d0578は、lsusbコマンドの出力結果を元にしている。

2. システムを再起動

3.trim出来るようになった。

# fstrim -v /
/: 461.5 MiB (483868672 bytes) trimmed

発覚した問題

dmesgコマンドで確認すると以前は出ていなかったセクターエラーがたくさん出ていることに気が付いた。(sdaはTRIM対象のSSD)なお、この時点で破損したファイル等は確認できていない。

[294720.241259] sd 0:0:0:0: [sda] tag#18 UNKNOWN(0x2003) Result: hostbyte=0x00 driverbyte=DRIVER_OK cmd_age=0s
[294720.241332] sd 0:0:0:0: [sda] tag#18 Sense Key : 0x5 [current]
[294720.241347] sd 0:0:0:0: [sda] tag#18 ASC=0x26 ASCQ=0x0
[294720.241369] sd 0:0:0:0: [sda] tag#18 CDB: opcode=0x42 42 00 00 00 00 00 00 00 18 00
[294720.241384] blk_update_request: critical target error, dev sda, sector 16853776 op 0x3:(DISCARD) flags 0x800 phys_seg 1 prio class 0

操作するにしたがってセクターエラーのメッセージが増えているようだったのでSDカードで一度リブートしてからSSDのファイルシステムをfsckコマンドで修復した。その後はセクターエラーがいったん出なくなった。

当初fstrimコマンド発行後にセクターエラーが出ているかとも思ったが、しばらく起動しておくとfstrimコマンドを発行しなくてもセクターエラーが出ることがあった。

状況としては、

  • 対象のSSD(Intel 525s)はTRIM対応
  • OS(Armbian、Debian bullseyeベース )、ファイルシステム(ext4)もTRIM対応
  • 対象のSSDはdiscardオプションなしでマウントされている(discardオプションで自動的にTIRMが実行される)

で、いろいろ調べてみるとOSインストール時点でfstrim.timerサービスが有効になっていて、週1回TRIMが自動実行される設定になっていた。そのためセクターエラーが出ている可能性が濃厚と判断。別のNanoPi NEO+NASキットでもfstrim.timer実行直後にセクターエラーが多発していることも確認。

残るポイントはUSB→eSATA変換の周り(JMicronチップ、ファームウェア、ドライバ)周りだが、そもそもTRIMできなくて問題が発生しているわけではないので、また時間がある時に追加調査しようと考えている。(NASキットに使われているJMicronチップはファームウェアの問題も報告されているので、JMicronチップのファームウェアを無理矢理バージョンアップすればいいかもしれない)

補足情報

当初JMicronチップはOS(armbian)が認識しているJMS578と記載していた。しかし、チップのシルク印刷がJMS567であり、メーカーの仕様上もJMS567であることからJMS567に記事の記載を変更した。いろいろ調べてみるとJMS578のIDを返すファームウェアが乗っているJMS567である可能性が高そう。

NanoPi NEO / NanoPi NEO2とSATA SSDはNASキット基板上のUSB-SATA変換チップ(JMicron JMS567)を経由してUSB(USB2.0=480Mbps、遅い)接続されている。そしてJMicron JMS567とSATA SSDの間はSATA3(6Gbps)で接続されている。

plantUMLで図にするとこんな感じ。

lsusbコマンドの出力結果でBus 004 Device 002と認識されているのがJMicron JMS567。ベンダーIDが152d、プロダクトIDが0578になっている。(ネットを検索すると、JMS567JMS578について複数のプロダクトIDが見つかる12lsusbコマンドの結果はJMS567/JMS578に関してはあまりあてにできないのかもしれない)

# lsusb
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 152d:0578 JMicron Technology Corp. / JMicron USA Technology Corp. JMS578 SATA 6Gb/s
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 009 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

SATA SSDはUSB2.0(480Mbps)接続だが、ちゃんとUASP対応になっている(Bus 04.Port 1につながっているDev 2Driver=uasになっている)

# lsusb -t
/:  Bus 09.Port 1: Dev 1, Class=root_hub, Driver=musb-hdrc/1p, 480M
/:  Bus 08.Port 1: Dev 1, Class=root_hub, Driver=ohci-platform/1p, 12M
/:  Bus 07.Port 1: Dev 1, Class=root_hub, Driver=ohci-platform/1p, 12M
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=ohci-platform/1p, 12M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=uas, 480M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ohci-platform/1p, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M

参考情報

  1. https://devicehunt.com/view/type/usb/vendor/152D/device/0567

  2. https://devicehunt.com/view/type/usb/vendor/152D/device/0578

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0