NVIDIA Jetson NanoのUSB接続のHDD/SSDルート構成
NVIDIA Jetson NanoのルートディスクをUSB接続したHDDやSSD構成にする方法の最新版です。/dev/sda1を/(ルート)ディレクトリ構成にします。
以前に、同様の記事を投稿しましたが、よりスマートな導入方法が公開されていましたので、今回は、そちらの方法で、USBブート構成を作成しました。
根本原因となっていたブートシーケンスの変更により、USBブートが可能になっております。
※ ブート時にSDカードへアクセスします。
よって、SDカードの利用も必要となります。
以前の記事: Jetson Nano DeveloperをUSB 接続HDD/SSDルート構成
- 通常のブート用SDカード作成
- USBルートディスク構成作成ツールをダウンロード
- USB接続HDD/SSDにデータコピー
- ブートシーケンス変更
通常のブート用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を準備
- fdisk -l で状況を確かめます。% sudo fdisk -l
- パーティションを削除します(ここでは、/dev/sda1とします)。% sudo fdisk /dev/sda
.....
コマンド (mでヘルプ): d (削除コマンド)
選択した領域 1 (/dev/sda1を削除指定)コマンド (m でヘルプ): w (書き込み) - 新たにパーティションを作成します。% sudo fdisk /dev/sda
...
コマンド (mでヘルプ): n (作成コマンド)
コマンドアクション
e 拡張
p 基本パーティション (1-4)
p
パーティション番号 (1-4): 1
....... コマンド (m でヘルプ): w (書き込み)ここでは、基本パーティションを選んで、 パーティション番号1(つまり/dev/sda1)を作りました。
- フォーマットする。
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に変更します。
- ブート時にUSBをロードするイメージファイルを登録します
- ブートする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になっていることを確認します。
以下のサイトが情報源となります。詳細に書かれています。