💾
Jetson Nanoのrootfsをread onlyにしてoverlayfs化する
はじめに
Jetson Nanoのrootfsをread onlyにしてoverlayfs化することで、shutdownせずに電源OFFしてもファイルシステムが壊れないようにする。Jetson Nanoを装置に組み込んで使うときにはぜひ実施しておきたい。
Jetson Nano用の公式SDカードイメージはUbuntuなので、apt install overlayroot
して/etc/overlayroot.conf
を設定することで実現できると思ったのだが、Jetson Nanoの場合は追加設定が必要だったのでそのまとめ。
まずは初期設定
この手順に従って初期設定を終える。
apt更新
初期設定時に設定したユーザーでloginしてパッケージを更新する。
$ sudo -i
# apt update
# apt upgrade
# apt autoremove
overlayrootのインストールと設定
# apt install overlayroot
/etc/overlayroot.conf
を書き換える。
--- a/etc/overlayroot.conf 2018-09-20 22:29:41.000000000 +0900
+++ b/etc/overlayroot.conf 2021-01-19 14:17:16.061256571 +0900
@@ -167,4 +167,4 @@
# The result is stored in r-------- /dev/.initramfs/overlayroot.XXXXXXX,
# which is a tmpfs in memory.
overlayroot_cfgdisk="disabled"
-overlayroot=""
+overlayroot="tmpfs"
追加の設定
/boot/extlinux/extlinux.conf
を書き換える。
--- a/boot/extlinux/extlinux.conf 2020-10-20 01:10:02.974730022 +0900
+++ b/boot/extlinux/extlinux.conf 2021-01-19 14:20:38.040217352 +0900
@@ -6,8 +6,8 @@
LABEL primary
MENU LABEL primary kernel
LINUX /boot/Image
- INITRD /boot/initrd
- APPEND ${cbootargs} quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0
+ INITRD /boot/initrd.img
+ APPEND ${cbootargs} quiet root=/dev/mmcblk0p1 ro rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0
# When testing a custom kernel, it is recommended that you create a backup of
# the original kernel and add a new entry to this file so that the device can
reboot
すると完成。
# reboot
結果
overlayroot前はこんな感じ。
$ mount
:
/dev/mmcblk0p1 on / type ext4 (rw,relatime,data=ordered)
:
overlayroot後は/
がoverlay
になって、/dev/mmcblk0p1
が/media/root-ro
にro
でmount
されている。
$ mount
:
/dev/mmcblk0p1 on /media/root-ro type ext4 (ro,relatime,data=ordered)
:
overlayroot on / type overlay (rw,relatime,lowerdir=/media/root-ro,upperdir=/media/root-rw/overlay,workdir=/media/root-rw/overlay-workdir/_)
:
rootfs内のファイルを書き換えたいとき
overlayroot-chroot
コマンドを実行すると、/
がrw
になって書き換えできるようになる。
$ sudo overlayroot-chroot
# mount
:
/dev/mmcblk0p1 on / type ext4 (rw,relatime,data=ordered)
:
chroot
環境からexit
すると元のreadonly + overlayfsに戻る。
# exit
$
Discussion
Hi,
I'm wondering on what versions of JetPack, DeepStream, Tegra you did your work, since on the latest (4.5, 5.1, R32.5) this is not working anymore and the box goes into an endless reboot loop after the "reboot" statement. Let me know please. Your post is of Jan this year, so it can't be such an old version.
I tried what was discussed in the following page in my environment (4.5.1) and it worked.
To summarize, run the following command.
I don't know if this will solve the problem you are facing, but I pray it will help you.
Thanks for the follow up. But I think it is all just bullshit. Remember: The aim of createing an overlayfs is to have a read only filesystem after boot. I did what you suggested and it seems to work, but in the end it doesn't boot into a read-only fs.
My steps:
After having this I changed
/boot/extlinux/extlinux.conf
to have this line:I touched a file
touch test
and rebootedsudo reboot
, hoping to not see this file again after the reboot.But it was there...
Wait... I was following now the latest version of https://github.com/lehni/root-ro. And it works. Finally. :)