LoginSignup
1
0

More than 1 year has passed since last update.

RaspberryPi4にUSB3.0でHDDを接続した際にはまった件

Last updated at Posted at 2022-04-02

はじめに

RaspberryPi4にUSB3.0でHDDを接続してNAS運用をする際に遭遇したトラブルのメモ

システム構成

  • RaspberryPi4(RAM:4GB/OS:bullseye/SSD-boot)
  • HDD(3.5inch-1TB+Logitec HDD case(USB3.0))
  • MacBook Air M1(クライアントマシン)

設定内容

  • NAS用のsambaのインストール。MacのTimeMachine保存領域に使いたかったので、そのための設定も追加(この部分の詳細は割愛)
  • fdisk /dev/sdb で/dev/sdb1を作成(全領域を割り当て)
  • mkfs.ext4 /dev/sdb1 でext4ファイルシステムを構築
  • mkdir /extdisk ; mount /dev/sdb1 /extdisk で作成したディレクトリにディスクをマウント
  • /etc/samba/smb.confを編集して、/extdiskを外部に公開する設定を追加した後、sambaサービスを開始
pi@raspi-4b:~ $ sudo fdisk /dev/sdb                # /dev/sdb1を作成
pi@raspi-4b:~ $ sudo mkfs.ext4 /dev/sdb1           # ファイルシステムを作成
pi@raspi-4b:~ $ sudo mount /dev/sdb1 /extdisk      # ディスクをマウント
pi@raspi-4b:~ $ sudo systemctl start smb.service   # sambaを開始

発生したトラブル

Macで当該共有ディスクをTimeMachine保存先に設定して、フルバックアップを実行。差分バックアップが繰り返されると以下のようなエラーがRaspberryPi4のdmesgに出力された。

[ 2022.840268] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100485: comm smbd: corrupted xattr block 224403491
[ 2022.857107] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100485: comm smbd: corrupted xattr block 224403491
[ 3026.947811] EXT4-fs warning (device sdb1): ext4_dirblock_csum_verify:377: inode #16252929: comm smbd: No space for directory leaf checksum. Please run e2fsck -D.
[ 3026.947837] EXT4-fs error (device sdb1): __ext4_find_entry:1547: inode #16252929: comm smbd: checksumming directory block 0
[ 3026.964442] EXT4-fs warning (device sdb1): ext4_dirblock_csum_verify:377: inode #16252929: comm smbd: No space for directory leaf checksum. Please run e2fsck -D.
[ 3026.964466] EXT4-fs error (device sdb1): __ext4_find_entry:1547: inode #16252929: comm smbd: checksumming directory block 0
[ 4073.068013] EXT4-fs warning (device sdb1): ext4_dirblock_csum_verify:377: inode #16252929: comm smbd: No space for directory leaf checksum. Please run e2fsck -D.
[ 4073.068033] EXT4-fs error (device sdb1): __ext4_find_entry:1547: inode #16252929: comm smbd: checksumming directory block 0
[ 4073.092040] EXT4-fs warning (device sdb1): ext4_dirblock_csum_verify:377: inode #16252929: comm smbd: No space for directory leaf checksum. Please run e2fsck -D.
[ 4073.092060] EXT4-fs error (device sdb1): __ext4_find_entry:1547: inode #16252929: comm smbd: checksumming directory block 0
[ 4073.281768] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100504: comm smbd: corrupted xattr block 224403491
[ 4073.317069] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100504: comm smbd: corrupted xattr block 224403491
[ 4073.334214] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100504: comm smbd: corrupted xattr block 224403491
[ 4073.350330] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100504: comm smbd: corrupted xattr block 224403491
[ 4073.366856] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100504: comm smbd: corrupted xattr block 224403491
[ 4073.389492] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100504: comm smbd: corrupted xattr block 224403491
[ 4073.408522] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100504: comm smbd: corrupted xattr block 224403491
[ 4073.425726] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100504: comm smbd: corrupted xattr block 224403491
[ 4089.514959] EXT4-fs error: 180 callbacks suppressed
[ 4089.514966] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4089.543181] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4089.559852] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4089.576411] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4089.593039] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4089.619488] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4089.634792] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4089.651505] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4089.668032] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4089.684677] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4262.459607] EXT4-fs warning (device sdb1): ext4_dirblock_csum_verify:377: inode #16252929: comm smbd: No space for directory leaf checksum. Please run e2fsck -D.
[ 4262.459617] EXT4-fs error: 22 callbacks suppressed
[ 4262.459622] EXT4-fs error (device sdb1): __ext4_find_entry:1547: inode #16252929: comm smbd: checksumming directory block 0
[ 4262.493161] EXT4-fs warning (device sdb1): ext4_dirblock_csum_verify:377: inode #16252929: comm smbd: No space for directory leaf checksum. Please run e2fsck -D.
[ 4262.493173] EXT4-fs error (device sdb1): __ext4_find_entry:1547: inode #16252929: comm smbd: checksumming directory block 0
[ 4272.816057] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4272.839033] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4272.864005] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4272.888639] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4272.913591] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4272.947218] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4272.997094] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4273.030619] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4273.063597] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491
[ 4273.088525] EXT4-fs error (device sdb1): ext4_xattr_block_get:536: inode #56100497: comm smbd: corrupted xattr block 224403491

今回使ったHDDが使い古しのものなので壊れているのか?とも思ったが、経験的にディスクが壊れている時のエラーとは違うように見える。が、念のため、以下の確認を実行。

pi@raspi-4b:~ $ sudo systemctl stop smb.service  # sambaを止める。止めないとdiskをアンマウントできない
pi@raspi-4b:~ $ sudo umount /extdisk             # ディスクをアンマウント
pi@raspi-4b:~ $ sudo smartctl -A -d sat /dev/sdb # smartctlでディスクの状態を確認
smartctl 7.2 2020-12-30 r5155 [armv7l-linux-5.10.103-v7l+] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   082   063   ---    Pre-fail  Always       -       197236923
  3 Spin_Up_Time            0x0003   095   094   ---    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   099   099   ---    Old_age   Always       -       1050
  5 Reallocated_Sector_Ct   0x0033   100   100   ---    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   086   060   ---    Pre-fail  Always       -       425312895
  9 Power_On_Hours          0x0032   068   068   ---    Old_age   Always       -       28606
 10 Spin_Retry_Count        0x0013   100   100   ---    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   ---    Old_age   Always       -       487
184 End-to-End_Error        0x0032   100   100   ---    Old_age   Always       -       0
187 Reported_Uncorrect      0x0032   100   100   ---    Old_age   Always       -       0
188 Command_Timeout         0x0032   100   099   ---    Old_age   Always       -       8590065666
189 High_Fly_Writes         0x003a   100   100   ---    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   066   051   ---    Old_age   Always       -       34 (Min/Max 8/36)
191 G-Sense_Error_Rate      0x0032   100   100   ---    Old_age   Always       -       0
192 Power-Off_Retract_Count 0x0032   100   100   ---    Old_age   Always       -       64
193 Load_Cycle_Count        0x0032   087   087   ---    Old_age   Always       -       26408
194 Temperature_Celsius     0x0022   034   049   ---    Old_age   Always       -       34 (0 8 0 0 0)
195 Hardware_ECC_Recovered  0x001a   118   099   ---    Old_age   Always       -       197236923
197 Current_Pending_Sector  0x0012   100   100   ---    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   ---    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   200   ---    Old_age   Always       -       0
240 Head_Flying_Hours       0x0000   100   253   ---    Old_age   Offline      -       27101 (233 149 0)
241 Total_LBAs_Written      0x0000   100   253   ---    Old_age   Offline      -       4276778520
242 Total_LBAs_Read         0x0000   100   253   ---    Old_age   Offline      -       2794321819

pi@raspi-4b:~ $ sudo smartctl -l selftest -d sat /dev/sdb # smartctlでディスクテストを実行
smartctl 7.2 2020-12-30 r5155 [armv7l-linux-5.10.103-v7l+] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%         4         -
# 2  Extended offline    Completed without error       00%         4         -
# 3  Short offline       Completed without error       00%         1         -

pi@raspi-4b:~ $ sudo smartctl -l error -d sat /dev/sdb # smartctlでディスクのエラーを確認
smartctl 7.2 2020-12-30 r5155 [armv7l-linux-5.10.103-v7l+] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Error Log Version: 1
No Errors Logged

HDD自体には問題がないようだった。これはどうしたものか…。とりあえず、以下を実行して、sambaのサービスを再開したところ、Macからは問題なくアクセスできている模様。

pi@raspi-4b:~ $sudo fsck.ext4 -D /dev/sdb1
pi@raspi-4b:~ $sudo fsck.ext4 -a /dev/sdb1
pi@raspi-4b:~ $sudo mount /dev/sdb1 /extdisk
pi@raspi-4b:~ $sudo systemctl start smbd.service

エラーなしで差分バックアップが取れることもあるので、エラーがでたらfsckで修復する、という方法で対応していたが、やっぱり釈然としない。使いながら対応方法を探すことにした。

対策1

こちらの情報によると、RaspberryPiはusb接続のSSDがドライバとの相性で不安定になることがあるらしい。こちらの情報を参考にして当該HDDのusbドライバをuasからusb-storageに切り替えてみたが、これは効果なし。

対策2

こちらの情報によると、RaspberryPiにSSD/HDDを接続する際に使うUSB-Apapterには相性があるようで、実績のあるデバイスがリストアップされていた。これを見る限り、今回使っているLogitecのものはリストに上がっていない。そう言えば、現在起動に使っているUSB接続のSSDでは何もエラーもなく快適に使えている。改めてUSB-Adapterについて確認してみた。

pi@raspi-4b:~ $ lsusb
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 174c:55aa ASMedia Technology Inc. ASM1051E SATA 6Gb/s bridge, ASM1053E SATA 6Gb/s bridge, ASM1153 SATA 3Gb/s bridge, ASM1153E SATA 6Gb/s bridge
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

SSDの接続に使っているUSB-AdapterはASMediaのもののようだ。こちらは上のページのリストには載っていた。これを選んだのは単なる偶然(Amazonで安価だったので購入したもの)。やっぱり事前に調査して実績のあるものを使うべきだったのか…

対策3

ASM1153を使っているUSB-Adapterを購入した。Amazonでデバイス型番を指定して検索し、一番安価だったもの。安価な理由は、3.5インチHDDをつなぐ際におそらく絶対必要な12VのACアダプタが付属していないため。もちろん電源端子はついている。12VのACアダプタが手元にあったので個人的には困らなかったが、知らずに購入した人は慌てることになるので注意が必要かと。ただし、2.5インチHDDやSSDをつなぐ際は電源は不要ではないかと思う。HDDをLogitecのケースから取り出して、こちらのUSB-Adapterに接続してみる。以下のように正常に認識され、無事にマウントできた。

[96474.793154] usb 1-1.4: USB disconnect, device number 3
[96474.799809] sd 1:0:0:0: [sdb] Synchronizing SCSI cache
[96474.801235] sd 1:0:0:0: [sdb] Synchronize Cache(10) failed: Result: hostbyte=0x01 driverbyte=0x00
[96692.401600] usb 2-1: new SuperSpeed Gen 1 USB device number 3 using xhci_hcd
[96692.432734] usb 2-1: New USB device found, idVendor=174c, idProduct=1153, bcdDevice= 1.00
[96692.432757] usb 2-1: New USB device strings: Mfr=2, Product=3, SerialNumber=1
[96692.432775] usb 2-1: Product: Ugreen Storage Device
[96692.432792] usb 2-1: Manufacturer: Ugreen
[96692.432809] usb 2-1: SerialNumber: 26A1EE831A43
[96692.479050] scsi host1: uas
[96692.481977] scsi 1:0:0:0: Direct-Access     ST1000NM 0011             0    PQ: 0 ANSI: 6
[96692.484239] sd 1:0:0:0: [sdb] 1953525168 512-byte logical blocks: (1.00 TB/932 GiB)
[96692.484428] sd 1:0:0:0: [sdb] Write Protect is off
[96692.484449] sd 1:0:0:0: [sdb] Mode Sense: 43 00 00 00
[96692.484794] sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[96692.485525] sd 1:0:0:0: Attached scsi generic sg1 type 0
[96692.485687] sd 1:0:0:0: [sdb] Optimal transfer size 33553920 bytes
[96692.593639]  sdb: sdb1
[96692.595901] sd 1:0:0:0: [sdb] Attached SCSI disk
[96940.562922] EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: (null)

lsusbの結果はこちら。当然だが所望のデバイス(ASM1153)が正常に認識されている。

pi@raspi-4b:~ $ lsusb
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 174c:55aa ASMedia Technology Inc. ASM1051E SATA 6Gb/s bridge, ASM1053E SATA 6Gb/s bridge, ASM1153 SATA 3Gb/s bridge, ASM1153E SATA 6Gb/s bridge
Bus 002 Device 003: ID 174c:1153 ASMedia Technology Inc. ASM1153 SATA 3Gb/s bridge
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

まとめ

その後、数日かけて10回ほどMacからRaspberryPi4にsamba経由でつないで当該ディスクに差分バックアップを取っているが、今のところ以前のようなエラーは発生していない。ハードの相性問題というオチで悲しい。おそらく問題は解消されたのだと思うが、もうしばらく様子を見ていく。

追記(2022/04/10)

この文書を書いてからこれまで、MacのTimeMachineの保存先として運用を続けながら様子を見ているが、上記のようなエラーは今のところ一度も発生していない。やはりRaspberryPi4とUSB-Apapterのハード的な相性がよくなかったことが原因だったようだ。LogitecのHDDケースはTVの録画用にでも転用しようと思う。

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