【NVIDIA Jetson トラブルシューティング】NVMe SSDインストール後にOSが起動しない時の対処方法

# はじめに
　NVIDIA JetsonにNVMe SSDインストールして、OSが起動しなくなった時の対象方法をまとめる。

# 動作確認環境
* Jetson
  * JetPack 5.1.2 (Ubuntu 20.04)
  * AGX Orin (キャリアボード: [CTI AGX202](https://connecttech.com/product/rogue-carrier-for-nvidia-jetson-agx-orin/))
* ホストPC
  * Ubuntu20.04 

# 方法
## エラー内容の確認
　起動できない場合、モニタには情報が表示されない。nvidiaのロゴまでは出てくるが、そこから先に進まない。この状態では、詳細なエラー内容の確認ができないので、Jetsonに備わっているUARTを使ってホストPCと接続し、シリアルからログを見る必要がある。
 
 　Jetson Orin Nano開発者キットでは、UARTピンはあるがケーブルの作成が必要。詳細は以下を[こちら](https://zenn.dev/hidenori3/articles/42125662f4b28e#%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%EF%BC%88uart%EF%BC%89%E3%82%92%E4%BD%BF%E3%81%86)を参照。
 　Jetson Orin開発者キットでは、マイクロUSBポートがUARTデバッグ用ポートになっている。詳細は[こちら](https://qiita.com/nonbiri15/items/94685032a2983042d98a)を参照。

1. ホストPCとJetsonのUARTデバッグポートに接続する
1. Jetsonを起動する
1. Teratermなどで、Jetsonとシリアル接続してログを確認する
1. 必要に応じて、Jetsonを再起動してログを確認する 

　各エラー内容の対処方法を以下に記載する。

:::note info
UARTシリアルが使えない場合
下記のエラー対処方法を1つずつ試すことで解決する可能性があるので、エラー内容を見ずに試しても良い。ただし、他のエラーの可能性もあるので、UARTからエラー内容を見ることをお勧めする。
:::

## エラー対処方法
### EXT4-fs (nvme0n1p1): bad geometry: block count xxxx exceeds size of device (yyyy blocks)

　SSDのサイズがおかしくなっている場合のエラー。下記のようなエラーメッセージが出て起動しない。
```bash
[    8.569067] Root device found: nvme0n1p1
[    8.575250] Found dev node: /dev/nvme0n1p1
[    8.582367] EXT4-fs (nvme0n1p1): bad geometry: block count 244190385 exceeds size of device (244190208 blocks)
[    8.584196] ERROR: nvme0n1p1 mount fail...
[    9.280861] mmc1: SDHCI controller on 3400000.sdhci [3400000.sdhci] using ADMA 64-bit
[   10.270416] tegra-xusb 3610000.xhci: entering ELPG done
```

#### 対処方法

1. SSDをJetsonから取り外し、ホストPC(Ubuntu)に接続する
1. Diskアプリなどで、マウント先を確認する (例： ```/dev/sda1```)
1. e2fsckコマンドでファイルチェック

    /dev/sda1の場合  
    ```bash
    sudo e2fsck -f /dev/sda1
    ```
    原因と同じ内容が表示されればOK。
    ```bash
    e2fsck 1.45.5 (07-Jan-2020)
    The ファイルシステム size (according to the superblock) is 244190385 blocks
    The physical size of the device is 244190208 blocks
    Either the superblock or the partition table is likely to be corrupt!
    中止<y>? yes
    ```

1. resize2fsコマンドで修正  

    /dev/sda1の場合  
    ```bash
    sudo resize2fs /dev/sda1
    ```
    以下のような結果となればOK。
    ```bash
    resize2fs 1.45.5 (07-Jan-2020)
    Resizing the filesystem on /dev/sda1 to 244190208 (4k) blocks.
    The filesystem on /dev/sda1 is now 244190208 (4k) blocks long.
    ```
4. e2fsckコマンドで再度ファイルチェック
    /dev/sda1の場合
    ```bash
    sudo e2fsck -f /dev/sda1
    ```
    エラーがでなければOK。
    ```
    e2fsck 1.45.5 (07-Jan-2020)
    Pass 1: Checking iノードs, blocks, and sizes
    Pass 2: Checking ディレクトリ structure
    Pass 3: Checking ディレクトリ connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking グループ summary information
    /dev/sda1: 175579/61054976 files (0.1% non-contiguous), 8903443/244190208 blocks
    ```

https://unix.stackexchange.com/questions/115698/fix-ext4-fs-bad-geometry-block-count-exceeds-size-of-device

### L4TLauncher: Attempting Recovery Boot

　リカバリブートになっており起動しない。

#### 対策

　UEFIの設定変更する（OS chain A stauts: 「Normal」に変更する）。

1. Jetson起動
1. 起動画面で、「Esc」キーを押して、UEFIの設定画面に入る
1. Device Manager → NVIDIA Configuration → L4T Configuration → OS chain A status　に進む
1. 「Unbootable」を「Normal」に変更
1. 「Save and exit」で保存して再起動
1. 正常に起動すれば成功

![668b302d9426e50056fe1737.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638977/1bff3bf3-f09e-9cda-af4b-7d4a55325f76.png)

https://forums.developer.nvidia.com/t/orin-nano-wont-boot-lt4launcher-attempting-recovery-boot/255302/2

# まとめ
　UARTデバッグポートを利用して、NVMe SSDにインストールしたJetsonが起動しない際のトラブルシューティングをまとめた。正常に起動しない場合は、ディスプレイに情報が表示されないので、UARTデバッグポートを活用して何が原因で起動していないかを確認することをお勧めする。

# 参考

https://tech.zms.co.jp/setup-jetson-nano-b1-by-headless-mode/

https://qiita.com/nonbiri15/items/94685032a2983042d98a

https://unix.stackexchange.com/questions/115698/fix-ext4-fs-bad-geometry-block-count-exceeds-size-of-device

https://forums.developer.nvidia.com/t/orin-nano-wont-boot-lt4launcher-attempting-recovery-boot/255302/2