ZFS ホストでの Initrd フラッシュ失敗(mount.nfs access denied)
はじめに
NVIDIA の initrd ワークフロー(l4t_initrd_flash.sh と --network usb0 の組み合わせ)で Seeed Jetson デバイスをフラッシュする際、Ubuntu の ホスト PC は一時的にフラッシュ用ファイルを NFS(Network File System)経由で Jetson と共有します。ホストが ZFS ルートファイルシステム(Ubuntu インストーラの Erase disk and use ZFS オプション)でインストールされている場合、フラッシュ時に次のようなエラーで失敗することがあります:
mount.nfs: access denied by server while mounting [fc00:1:1:0::1]:/path/to/mfi_xxx/rootfs
Flash failure
Either the device cannot mount the NFS server on the host or a flash command has failed.
これは Seeed キャリアボードや Jetson モジュールの欠陥ではありません。これは ZFS と、initrd フラッシュ中に使用される NVIDIA のデフォルトの一時 NFS エクスポートとの既知の相互作用によるものです。
l4t_initrd_flash.sh --flash-only --massflash 1 --network usb0(または同様の initrd + ネットワークフラッシュ)でフラッシュされるすべての Seeed Jetson 製品が対象であり、以下を含みますがこれらに限定されません:
- reComputer Classic / Mini / Super (J401 シリーズ)
- reComputer Industrial / reServer J401
- reComputer Robotics J401 / J501 / J501 Mini
- reServer J501
特定の SKU に固有の問題ではありません。根本原因はターゲットデバイスではなく、ホストのファイルシステムです。
この文脈での NFS とは?
initrd フラッシュ中は次のように動作します:
- Ubuntu ホスト上で Seeed の mfi パッケージを展開します。
- Jetson は USB 経由で小さな initrd イメージを起動します。
- ホストは
rootfsやtools/kernel_flash/imagesなどのフォルダを NFS 経由でエクスポートします。 - Jetson はそれらのフォルダをマウントし、システムイメージを書き込みます。
ここでの NFS は、フラッシュ中の ホスト ↔ Jetson 間の転送メカニズムに過ぎません。キャリアボード上の NFS 機能とは無関係です。
ZFS ホストで失敗する理由
NVIDIA のスクリプト(tools/kernel_flash/l4t_network_flash.func)は exportfs -o を使用して、一時的なインメモリの NFS エクスポートを作成します。
ext4(Ubuntu のデフォルトインストール)では、通常これは問題なく動作します。
しかし ZFS では、Linux NFS サーバはそのデータセットに対して安定した fsid を自動割り当てできません。ホスト側ではエクスポートが成功したように見えても、Jetson 側でマウント時に access denied が返されます。
Ubuntu は 19.10 以降、ルートオプションとして ZFS を提供しているため、インストール時に ZFS を選択したユーザーは誰でもこの影響を受ける可能性があります。
推奨される回避策(最も簡単)
mfi ディレクトリ全体を ext4 ファイルシステムにコピーし、その場所からフラッシュコマンドを実行してください。
# Example: copy mfi folder to an ext4 mount (adjust paths)
cp -a /path/on/zfs/mfi_recomputer-orin-super-j401 /mnt/ext4-flash/
cd /mnt/ext4-flash/mfi_recomputer-orin-super-j401
sudo ./tools/kernel_flash/l4t_initrd_flash.sh --flash-only --massflash 1 --network usb0 --showlogs
ヒント:
- 専用の ext4 パーティション、ext4 でフォーマットした外付け USB ドライブ、または ext4 ループバックイメージを使用します。
- 展開済み mfi パッケージ全体を格納できる十分な空き容量を確保してください。
- 製品の Getting Started ガイドに従い、ホストにフラッシュの前提パッケージ(
nfs-kernel-server、sshpassなど)をインストールしてください。
上級者向け回避策(ZFS のまま使う)
ZFS パスからどうしてもフラッシュする必要がある場合は、/etc/exports に明示的な fsid= 値付きで永続的なエクスポートを設定し、パーミッションが正しいことを確認してください。また、スクリプトが exportfs -o の代わりに /etc/exports + exportfs -ra を使用するように、l4t_network_flash.func 内の enable_nfs_for_folder() にパッチを当てる必要がある場合もあります。
エクスポート行の例(mfi ディレクトリに合わせてパスと IPv6 ネットワークを調整してください):
/path/to/mfi_xxx/rootfs fc00:1:1::/48(rw,nohide,insecure,no_subtree_check,async,no_root_squash,fsid=1)
/path/to/mfi_xxx/tools/kernel_flash/images fc00:1:1::/48(rw,nohide,insecure,no_subtree_check,async,no_root_squash,fsid=2)
その後:
sudo chmod 755 /path/to/mfi_xxx/rootfs /path/to/mfi_xxx/tools/kernel_flash/images
sudo chown root:root /path/to/mfi_xxx/rootfs /path/to/mfi_xxx/tools/kernel_flash/images
sudo systemctl restart nfs-kernel-server
sudo exportfs -rav
詳細およびサンプルパッチは wiki-documents #4148 を参照してください。
ホストのファイルシステムを確認する
df -T /
findmnt -no FSTYPE /
出力に zfs と表示された場合は、フラッシュ前に上記の ext4 回避策を使用してください。
参考情報
- Seeed wiki-documents #4148
- NVIDIA Forums: rootfs does not support NFS export
- NVIDIA Forums: requires fsid= for NFS export
- Flash BSP with Jetpack to Selected Jetson
- reServer J501 Getting Started
- Flash JetPack with WSL2
技術サポート & 製品ディスカッション
弊社製品をお選びいただきありがとうございます。弊社は、製品をできるだけスムーズにご利用いただけるよう、さまざまなサポートを提供しています。お好みやニーズに応じて選択いただける複数のコミュニケーションチャネルをご用意しています。