コンテンツへスキップ

NVIDIA Jetson Nano USB ディスクをルート構成

NVIDIA Jetson NanoのUSB接続のHDD/SSDルート構成

NVIDIA Jetson NanoのルートディスクをUSB接続したHDDやSSD構成にする方法の最新版です。/dev/sda1を/(ルート)ディレクトリ構成にします。

以前に、同様の記事を投稿しましたが、よりスマートな導入方法が公開されていましたので、今回は、そちらの方法で、USBブート構成を作成しました。
根本原因となっていたブートシーケンスの変更により、USBブートが可能になっております。

※ ブート時にSDカードへアクセスします。
よって、SDカードの利用も必要となります。

以前の記事: Jetson Nano DeveloperをUSB 接続HDD/SSDルート構成

  1. 通常のブート用SDカード作成
  2. USBルートディスク構成作成ツールをダウンロード
  3. USB接続HDD/SSDにデータコピー
  4. ブートシーケンス変更

通常のブート用SDカード作成

SDカードイメージダウンロード

以下のURLに従い、利用するOSの手順でSDカードを準備しJetson Nano Developer Kit SD Card Imageを作成すれば、SDカードを用いてJetson Nanoの起動は可能となります。Write Image to the microSD Card

(Windows)SDカードフォーマット

SDカードをフォーマットします。SD Memory Card Formatter for Windows Download

SDカードへOSイメージを焼き付け

EtcherでダウンロードしたSDカードイメージをSDカードにコピーします。

最新のSDカードイメージと同様のバージョンで、SDカード用とUSB接続のHDD/SSD用のイメージが公開されています。

USBルートディスク構成作成ツールをダウンロード

利用する外部接続のHDDやSSDを準備

  1. fdisk -l で状況を確かめます。
    % sudo fdisk -l
  2. パーティションを削除します(ここでは、/dev/sda1とします)。
    % sudo fdisk /dev/sda
    .....
    コマンド (mでヘルプ): d (削除コマンド)
    選択した領域 1 (/dev/sda1を削除指定)コマンド (m でヘルプ): w (書き込み)
  3. 新たにパーティションを作成します。
    % sudo fdisk /dev/sda
    ...
    コマンド (mでヘルプ): n (作成コマンド)
    コマンドアクション
    e 拡張
    p 基本パーティション (1-4)
    p
    パーティション番号 (1-4): 1
    ....... コマンド (m でヘルプ): w (書き込み)

    ここでは、基本パーティションを選んで、 パーティション番号1(つまり/dev/sda1)を作りました。

  4. フォーマットする。
    sudo mkfs.ext4 /dev/sda1

最後に、適当なマウントポイントにマウントしておきます。

Githubより必要ツールを導入

Githubに、rootOnUSBプロジェクトとして公開されております。

作成したSDカードで、Jetson Nanoを起動させ、Githubレポジトリをダウンロード(クローン)します。

$ git clone https://github.com/JetsonHacksNano/rootOnUSB
Cloning into 'rootOnUSB'...
remote: Enumerating objects: 87, done.
remote: Total 87 (delta 0), reused 0 (delta 0), pack-reused 87
Unpacking objects: 100% (87/87), done.
$ cd rootOnUSB/
$ ls
LICENSE    addUSBToInitramfs.sh  data         sample-extlinux.conf
README.md  copyRootToUSB.sh      diskUUID.sh  scripts

USB接続HDD/SSDにデータコピー

ブートシーケンスにUSB接続を追加するツールを実行します。

~/rootOnUSB$ ./addUSBToInitramfs.sh
Adding USB to initramfs
[sudo] password :
Warning: couldn't identify filesystem type for fsck hook, ignoring.
I: The initramfs will attempt to resume from /dev/zram3
I: (UUID=bfeedab2-3ada-4cb1-924c-bf1df42d9e3e)
I: Set the RESUME variable to override this.
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/aarch64-linux-gnu_EGL.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/aarch64-linux-gnu_GL.conf: No such file or directory

次に、SDカードのルートディレクトリの内容を、利用するUSB接続のHDDやSSDにコピーを実施します。copyRootToUSB.sh というコマンドが準備されております。

copyRootToUSBコマンドリファレンス:

usage: ./copyRootToUSB.sh [OPTIONS]

  -d | --directory     Directory path to parent of kernel

  -v | --volume_label  Label of Volume to lookup

  -p | --path          Device Path to USB drive (e.g. /dev/sda1)

  -h | --help  This message

外部接続した、HDD/SSDのパーティションをオプションしてして、コマンド実行を実施しました。

このコマンドを実行する前に、/dev/sda1を適当な場所にマウントしておく必要があります。マウントしていないと、コマンドは失敗します。

$ ./copyRootToUSB.sh -p /dev/sda1

ブートシーケンス変更

/boot/extlinux/extlinux.confファイルを変更し、ルート領域を外部USB接続のHDD/SSDに変更します。

  1. ブート時にUSBをロードするイメージファイルを登録します
  2. ブートするDiskパスをUUIDを用いて指定します

DiskのUUIDを調べるツールも、rootOnUSBより提供されています。

~/rootOnUSB$ ./diskUUID.sh
UUID of Disk: /dev/sda1
0c378dce-319c-46cc-827b-06a990231f48

Sample for /boot/extlinux/extlinux.conf entry:
APPEND ${cbootargs} root=UUID=0c378dce-319c-46cc-827b-06a990231f48 rootwait rootfstype=ext4

また、extlinux.confファイルのサンプルも、sample-extlinux.confとして、提供されています。

もとのextlinux.confファイルのバックアップを準備し、以下の変更を加えます。

INITRD /boot/initrd-xusb.img

USBファームウェアを読み込んだイメージがロードされます。

UUIDでルートディスクを指定します。

APPEND ${cbootargs} root=UUID=0c378dce-319c-46cc-827b-06a990231f48 rootwait rootfstype=ext4

最後に再起動して、ルートフォルダーが、指定した外部接続のHDDやSSDになっていることを確認します。

created by Rinker
NVIDIA
¥19,000 (2021/08/19 16:46:56時点 Amazon調べ-詳細)

以下のサイトが情報源となります。詳細に書かれています。

Jetson Nano – Run From USB Drive

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA