Hi Fred, On 2024/9/21 00:11, Fred Lotter wrote:
Hi, In the context of this page: https://erofs.docs.kernel.org/en/latest/merging.html <https://erofs.docs.kernel.org/en/latest/merging.html> I am trying to experiment with EROFS where I want to try something crazy like the following setup: /dev/mmcblk0p3: | EROFS root image | -------- | EROFS second image | -------- I wanted to have a primate root EROFS filesystem written at the start of a partition. Then I would like to "append" files to the immutable root EROFS filesystem, by adding a concatenated EROFS filesystem after the root filesystem, with an external device reference pointing to the root EROFS filesystem.
Thanks for your question.
My idea in my head was then to boot the Linux kernel with something like: root=/dev/mmcblk0p3 rootfstype=erofs rootoptions=device=/dev/mmcblk0p3,offset=<root size> 1. Is it possible to have the "blobdevice" point to a complete EROFS filesystem?
If there are two partitions, currently EROFS kernel runtime supports your requirement in practice, for example: /dev/mmcblk0p3: | EROFS root image | -------- /dev/mmcblk0p4: | EROFS second image | -------- You could boot with: root=/dev/mmcblk0p4 rootfstype=erofs rootoptions=device=/dev/mmcblk0p3 to get the incremental filesystem and use: root=/dev/mmcblk0p3 rootfstype=erofs to boot the original filesystem. The two images are both usable for booting. The `offset` option is only supported by the loop device, and parsed by util-linux `mount` command, as in: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/block/loop.c?h=v6.11#n52 So if you'd like to use the same partition, I guess it's still possible as long as you have a minimal initramfs to generate a special loop device with a specific offset, like: losetup -ooffset=<root size> /dev/loop0 /dev/mmcblk0p3 mount -odevice=/dev/mmcblk0p3 /dev/loop0 / for example. I'm not sure if it meets your requirement. In short, the on-disk format supports your requirement, and kernel runtime supports your requirement too, but just with two independent devices (or loop devices with `offset`). I'm not sure EROFS modules needs to support `offset` semantics since other filesystems don't support this too.
2. If yes, is there userspace support for creating this setup?
Unfortunately, currently mkfs.erofs incremental build doesn't support this mode, but it can be implemented in the next erofs-utils 1.9 version. Thanks, Gao Xiang
Kind Regards, Fred