【2021年4月版】Raspberry Pi 4 に exFAT の SSD をつなぐ

# Raspberry Pi は初期状態では exFAT は対応してない

家に生の 2.５インチSSDドライブが転がっておりましたので、USBのアダプターをはめこんでラズパイにUSBで繋いでみました。
マウントしてみたところ、`unknown filesystem type 'exfat'.` というつれない返事をいただいてしまいました・・・
ということで、以下の手順にて exFAT 対応してみました。

https://www.raspberrypi.org/documentation/configuration/external-storage.md

## 1. ブロックデバイスの一覧表示

まず、`lsblk` コマンドでブロックデバイスをリスト表示します。

```
$ sudo lsblk -o UUID,NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL,MODEL
UUID                                 NAME    FSTYPE   SIZE MOUNTPOINT LABEL   MODEL
                                     loop0   squash    76M /snap/core         
                                     loop1   squash  25.4M /snap/hugo         
                                     loop3   squash  84.2M /snap/core         
                                     loop4   squash  28.9M /snap/hugo         
                                     sda            238.5G                    Gener
XXXX-XXXX                            ├─sda1  vfat     200M            EFI
XXXX-XXXX                            └─sda2  exfat  238.3G            XXXXXX
                                                                              
                                     mmcblk0        119.3G                    
XXXX-XXXX                            ├─mmcblk0p1
                                     │       vfat     256M /boot      boot    
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx └─mmcblk0p2
                                             ext4     119G /          rootfs  
```

はい、`sda2`は`exfat`と正しく認識されています。ただし、このドライバーはインストールされていないので以下の手順でインストールします。

## 2. exFAT をインストール

一旦、念のためリポジトリを更新しておきます。

```
sudo apt update
...
```
そして`exfat-fuse`をインストールします。

```
$ sudo apt install exfat-fuse
...
```
無事にインストールされました。

## 3. マウント

ではマウント先を作ってマウントしましょう。フォルダ名は適当です。

```
$ sudo mkdir /mnt/work
$ sudo mount /dev/sda2 /mnt/work
FUSE exfat 1.3.0
```
というわけで、`exfat` で無事にマウントされました。

## 4. 自動マウント

さて、次回にも自動でマウントされるように、`fstab` に設定を追加致しましょう。
上記の `lsblk` コマンドか `blkid` コマンドで取得されるUUIDをメモっておきましょう。

`nano` エディタで `fstab` ファイルに追記します。

```
UUID=XXXX-XXXX /mnt/work exfat defaults,auto,users,rw,nofail 0 0
```

上書き保存後、再起動してマウントされていれば成功です。
マウントのオプションについては fstab の書き方については色々、情報がありますので調べてみてください。

https://www.linuxmaster.jp/linux_skill/2013/06/etcfstab.html

# ついでに SMART で確認

SSD つながりましたので `smartmontools` パッケージを追加して SMART 情報を確認してみましょう。以下のコマンドで追加OKです。

```
$ sudo apt install smartmontools
Reading package lists... Done
...
```

コマンドのインストールが終了後、`smartctl` コマンドでSSDの状態をサクッと調べることができます。

```
$ sudo smartctl --scan
/dev/sda -d sat # /dev/sda [SAT], ATA device
```

もちろん認識できてます。で、SMART対応できているか情報をみてみます。

```
$ sudo smartctl -i /dev/sda
...

SMART support is: Available - device has SMART capability.
SMART support is: Enabled
```
ちゃんと`Enabled`と出ていますね。
それではSMART情報を取得してみましょう。

```
$ sudo smartctl -A /dev/sda
smartctl 6.6 2017-11-05 r4594 [armv7l-linux-4.19.88-v7l+] (local build)
Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   100   100   050    Pre-fail  Always       -       0
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0
  9 Power_On_Hours          0x0032   100   100   001    Old_age   Always       -       10
 12 Power_Cycle_Count       0x0032   100   100   001    Old_age   Always       -       2
170 Grown_Failing_Block_Ct  0x0033   100   100   010    Pre-fail  Always       -       0
171 Program_Fail_Count      0x0032   100   100   001    Old_age   Always       -       0
172 Erase_Fail_Count        0x0032   100   100   001    Old_age   Always       -       0
173 Wear_Leveling_Count     0x0033   100   100   010    Pre-fail  Always       -       0
174 Unexpect_Power_Loss_Ct  0x0032   100   100   001    Old_age   Always       -       0
181 Non4k_Aligned_Access    0x0022   100   100   001    Old_age   Always       -       0 0 0
183 SATA_Iface_Downshift    0x0032   100   100   001    Old_age   Always       -       0
184 End-to-End_Error        0x0033   100   100   050    Pre-fail  Always       -       0
187 Reported_Uncorrect      0x0032   100   100   001    Old_age   Always       -       0
188 Command_Timeout         0x0032   100   100   001    Old_age   Always       -       0
189 Factory_Bad_Block_Ct    0x000e   100   100   001    Old_age   Always       -       85
195 Hardware_ECC_Recovered  0x003c   100   100   001    Old_age   Offline      -       0
196 Reallocated_Event_Count 0x0032   100   100   001    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   100   100   001    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   100   100   001    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   100   100   001    Old_age   Always       -       1876
202 Perc_Rated_Life_Used    0x0018   100   100   001    Old_age   Offline      -       0
206 Write_Error_Rate        0x000e   100   100   001    Old_age   Always       -       0
```

`UDMA_CRC_Error_Count`が多いので歴戦の感はありますがまだまだ現役ですね。
ただSDカードの容量がもうテラ越えるの出てるので256GのSSDはもうお役御免だなぁ。。。

以上です。