Jetson AGX Xavierの安心バックアップ術
はじめに
こんにちは。Yoshimuraです。
Jetson AGX Xavierを使っていて動作が不安定な場合にクリーンインストールからやり直すことがありますが、クリーンインストール、追加パッケージインストール、各種設定まで行うとなるとかなり大変になります。さらに同じ環境構築を複数台やる場合は単純に考えても台数分だけ時間が掛かります。そのような背景から、この環境構築の手間を軽減させる解決手段の一つとして、Jetson AGX Xavierの内蔵ストレージの内容をバックアップし、そこからリストアする方法を紹介します。
動作確認環境
今回、以下の環境で動作確認を行いました。
母艦PC
- Ubuntu 18.04 64bit
Jetson AGX Xavier
- JetPack 4.5.1をインストールしたJetson AGX Xavier
- L4T 32.5.1
- L4T Driver Package :
Tegra186_Linux_R32.5.1_aarch64.tbz2 - Sample Root Filesystem :
Tegra_Linux_Sample-Root-Filesystem_R32.5.1_aarch64.tbz2
- L4T Driver Package :
前準備
依存パッケージインストール
母艦PC上で以下のコマンドを実行し、依存パッケージをインストールします。
$ sudo apt-get install qemu-user-static
L4T Driver Package展開
クローンに用いるスクリプトを実行するため、母艦PC上でL4T Driver Packageを入手し、展開します。
-
https://developer.nvidia.com/embedded/jetpack-archiveで対象JetPackバージョンに紐づくL4Tバージョンを調べます
- 今回クローン元のJetson AGX XavierにはJetPack 4.5.1がインストールされているので、対応するL4Tバージョンは32.5.1になります
- クローン元と異なるJetPackバージョン、L4Tバージョンでの動作確認は今回未実施です
-
https://developer.nvidia.com/embedded/downloads#?search=Driverから対象L4Tバージョンの「
L4T Driver Package (BSP)」を入手します- 今回の動作確認ではhttps://developer.nvidia.com/embedded/linux-tegra-r3251の「
L4T Driver Package (BSP)」というリンクからTegra186_Linux_R32.5.1_aarch64.tbz2をダウンロードします
- 今回の動作確認ではhttps://developer.nvidia.com/embedded/linux-tegra-r3251の「
-
Tegra186_Linux_R32.5.1_aarch64.tbz2を$HOME以下に展開します
Sample Root Filesystem展開
クローンに用いるスクリプトを実行するため、母艦PC上でSample Root Filesystemを入手し、展開します。
-
https://developer.nvidia.com/embedded/jetpack-archiveで対象JetPackバージョンに紐づくL4Tバージョンを調べます
- 今回クローン元のJetson AGX XavierにはJetPack 4.5.1がインストールされているので、対応するL4Tバージョンは32.5.1になります
- クローン元と異なるJetPackバージョン、L4Tバージョンでの動作確認は今回未実施です
-
https://developer.nvidia.com/embedded/downloads#?search=Driverから対象L4Tバージョンの「
Sample Root Filesystem」を入手します- 今回の動作確認ではhttps://developer.nvidia.com/embedded/linux-tegra-r3251の「
Sample Root Filesystem」というリンクからTegra_Linux_Sample-Root-Filesystem_R32.5.1_aarch64.tbz2をダウンロードします
- 今回の動作確認ではhttps://developer.nvidia.com/embedded/linux-tegra-r3251の「
-
Tegra_Linux_Sample-Root-Filesystem_R32.5.1_aarch64.tbz2を$HOME以下に展開します
その後、以下のコマンドを実行してRoot File Systemを格納し、バイナリを生成します。
$ cd $HOME/Tegra186_Linux_R32.5.1_aarch64/Linux_for_Tegra/rootfs
$ sudo tar -jxpf ../../../Tegra_Linux_Sample-Root-Filesystem_R32.5.1_aarch64.tbz2
$ cd ..
$ sudo ./apply_binaries.sh
バックアップ
ここまでで準備ができたのでバックアップを行います。https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/flashing.htmlの「To clone a Jetson device and flash」に以下のコマンド例が書いてあります。
$ sudo ./flash.sh -r -k APP -G <clone> <board> mmcblk0p1
今回はJetson AGX Xavierがターゲットのため、母艦PCにForce Recovery ModeにしたJetson AGX Xavierを接続し、母艦PC上で下記コマンドを実行し、Jetson内蔵ストレージ内容を母艦PCにバックアップします。
$ cd $HOME/Tegra186_Linux_R32.5.1_aarch64/Linux_for_Tegra
$ sudo ./flash.sh -r -k APP -G backup.img jetson-xavier mmcblk0p1
バックアップが終わると$HOME/Tegra186_Linux_R32.5.1_aarch64/Linux_for_Tegra以下にbackup.imgが生成されます。
リストア
ここでは、前節で生成したバックアップデータを使ってリストアを行います。https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/flashing.htmlの「To clone a Jetson device and flash」に以下のコマンド例が書いてあります。
$ sudo cp <clone>.img bootloader/system.img
$ sudo ./flash.sh -r <board> mmcblk0p1
今回はJetson AGX Xavierがターゲットのため、母艦PCにForce Recovery ModeにしたJetson AGX Xavierを接続し、母艦PC上で下記コマンドを実行します。
$ cd $HOME/Tegra186_Linux_R32.5.1_aarch64/Linux_for_Tegra
$ sudo cp backup.img bootloader/system.img
$ sudo ./flash.sh -r jetson-xavier mmcblk0p1
リストアが終わるとクローン作業は完了です。
おわりに
Jetson AGX Xavier内蔵ストレージ内容をバックアップし、バックアップデータからリストアできるようになったことで、ソフトウェア的に不安定な状態になってもバックアップ時点まですぐに復旧できるようになったり、同じ環境の複製も簡単に行えるようになりました。Jetson AGX Xavierを使っている方の作業効率改善につながれば幸いです。
Discussion