Raspberry Pi 4をopenmediavaultでNAS化したら、SeagateのHDDのSMARTが取得できず、悪戦苦闘して解決した

openmediavaultを使えば、Raspberry Pi 4を高機能NASに、簡単に仕立て上げることができます。ところが、SeagateのUSB HDDを接続したところ、このHDDについては、障害予測機能であるSMART(Self-Monitoring, Analysis and Reporting Technology)の情報がうまく取得できません。NASなのに、HDDの状態を把握できないのは問題です。そこで、色々と調べてみました。

Raspberry Piに外付けUSB HDDを接続してNASにする


インストール

Raspberry Pi 4へのopenmediavaultのインストールは、次のような方法で行いました。

  1. Raspberry Pi Imagerを使って、micro SDにRaspberry Pi OS Liteを書き込む
  2. bootパーティションにsshという名前の空のファイルを作成
  3. sshで”(ホスト名).local”(初期状態では”raspberrypi.local”)に接続(ID/パスワードはpi/raspberry)
  4. 次のコマンドで設定メニューを起動し、パスワードの変更(1)、ホスト名(2-N1)やタイムゾーン(4-I2)の設定などを行う
1
$ sudo raspi-config
  1. 次のコマンドでOSを最新にする
1
2
$ sudo apt update
$ sudo apt -y upgrade
  1. 次のコマンドでopenmediavaultをインストールする
1
2
$ wget https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install 
$ sudo bash install
  1. ブラウザで”http://(ホスト名).local”に接続(ID/パスワードはadmin/openmediavault)。Web管理画面が現れる

以上で、NASの一丁上がりです。簡単です。
Raspberry Pi 4は、USB 3.0/Gigabit Ethernet対応のため、それなりの性能が期待できます。

Seagate HDDのSMART情報が取得できない

openmediavaultのWeb管理画面で、「ストレージ」→「SMART」→「デバイス」とクリックし、デバイス(HDDやSSD)を選択して「情報」ボタンをクリックすると、そのデバイスのSMART情報が表示されるはずですが、Seagate Expansion Portable HDD 2TB STEA2000304を接続した場合、正しく表示されませんでした。

デバイス一覧で、シリアルナンバーや温度が表示されていない

デバイスごとのSMART情報で「属性」も表示されない

sshで接続して、smartctlコマンドを実行してもエラーになります。

1
2
3
4
5
$ sudo smartctl -i /dev/sda 
smartctl 6.6 2017-11-05 r4594 [armv7l-linux-5.4.51-v7l+] (local build)
Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org
Read Device Identity failed: scsi error unsupported field in scsi command
A mandatory SMART command failed: exiting. To continue, add one or more '-T permissive' options.

色々と調べたところ、USB→Serial ATA変換チップに原因があり、カーネルパラメーターを調整することで、解決できることがわかりました。

◎参考にしたページ
smartmontools / wiki / SAT with UAS under Linux
https://www.smartmontools.org/wiki/SAT-with-UAS-Linux

解決方法は

  1. 次のコマンドで、対象のSeagate HDDのデバイスIDを調べる
1
2
3
4
5
$ lsusb 
Bus 002 Device 002: ID 0bc2:2322 Seagate RSS LLC SRD0NF1 Expansion Portable (STEA)
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

※出力結果の先頭行「Bus 002 Device 002: ID 0bc2:2322 Seagate RSS LLC SRD0NF1 Expansion Portable (STEA) 」の太字部分がデバイスIDです。

  1. 下記のように /boot/cmdline.txt の最後に usb-storage.quirks=0x0bc2:0x2322: を追加して、再起動する
1
console=serial0,115200 console=tty1 root=PARTUUID=9170dd17-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait usb-storage.quirks=0x0bc2:0x2322:

※デバイスIDは各自の環境にあわせて変更してください。2つの16進数の前に0xをつけて 0x0bc2:0x2322 のように記述します。最後はコロン( : )で終わりです。

以上で、Seagate HDDでもSMARTが取得できるようになりました。

デバイス一覧で、シリアルナンバーや温度が表示されるようになった

デバイスごとのSMART情報で「属性」も表示された

smartctlコマンドを実行しても正しく情報を取得できました。

1
2
3
4
5
6
7
8
$ sudo smartctl -i /dev/sda
smartctl 6.6 2017-11-05 r4594 [armv7l-linux-5.4.51-v7l+] (local build)
Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family: Seagate Mobile HDD
Device Model: ST2000LM007-1R8174
(後略)

もう1つのトラブル:ルーターでIPアドレスを固定しても、IPアドレスが変化する

IPアドレスを固定する必要はありませんが、私の場合、ルーターのDHCPサーバーで、IPアドレスとMACアドレスを紐づける機能を使って、IPアドレスを固定化していたにも関わらず、openmediavaultをインストールした途端、IPアドレスが変わってしまいました。
openmediavaultではネットワークの設定にnetplanを使うため、初期設定が変わってしまい、DHCP取得時に識別子としてMACアドレスを使わなくなってしまったのが原因です。

/etc/netplan/20-openmediavault-eth0.yaml に、下記のように dhcp-identifier: mac を追加したところ、解決しました。

1
2
3
4
5
6
7
8
9
network:
ethernets:
eth0:
match:
macaddress: dc:a6:32:xx:xx:xx
accept-ra: true
dhcp4: true
dhcp-identifier: mac
dhcp6: true

設定反映は、以下のコマンドです。なお、反映後、IPアドレスが変わって、sshが切断する場合がありますが、TeraTermの場合、”(ホスト名).local”で接続しておくと自動再接続するようで、IPアドレスが変わっても切断しませんでした。

1
$ sudo netplan apply

今後の目標は画像検索機能

openmediavaultは、dockerを使って機能を追加することも可能で、拡張性にも優れています。今回、画像保存用のNASとして用意したので、今後、画像検索の機能を追加したいと考えています。