[CRIU] Dumping a FUSE mount
Jonathan 'Wolf' Rentzsch
nil at redshed.net
Wed Oct 7 15:25:52 PDT 2015
> On Oct 1, 2015, at 4:23 AM,Pavel Emelyanov <xemul at parallels.com> wrote:
> Second option is to mark this thing with the --ext-mount-map flag thus
> telling criu to put only the mountpoint info into images on dump and pull
> them back on restore. The only problem here is that validate_mounts()
> only supports non-root mounts as external:
>
> if (fsroot_mounted(m)) {
> if (m->fstype->code == FSTYPE__UNSUPPORTED) {
> pr_err("FS mnt %s dev %#x root %s unsupported id %d\n",
> m->mountpoint, m->s_dev, m->root, m->mnt_id);
> return -1;
> }
> } else if (!m->external) {
> ...
>
> So the if branch will have to be patched to allow for external root mount.
>
> >From my perspective the 2nd way is better.
Pavel, I went with your recommended second option.
I commented-out the validate_mounts() code as suggested, and was then able to dump. Yay.
However I’m not abel to successfully restore. do_mount_one() ends up calling do_new_mount(), which fails with
1: Error (mount.c:1480): Can't mount at ./app/available_modules: No such device
I put in some logging and it’s calling
mount(“dupe”, "./app/available_modules”, “unsupported”, 0x200001, "user_id=0,group_id=0”)
“dupe" is the name of the external fuse process.
I tried detecting the “dupe” source argument and dynamically switching mount()’s filesystemtype arg from “unsupported” to “fuse”, as http://fuse.sourceforge.net/doxygen/ seems to suggest, but that just yields an "Invalid argument” error instead.
Any suggestions about how to get mount restoration working with an external fuse?
Note: We’re currently using criu version 1.5.2 in production.
-Wolf
More information about the CRIU
mailing list