Line 5:
Line 5:
= The solution =
= The solution =
−
When we see all these variation of commands to build a mount tree, we can understand that the final picture may be very complicated to be repeated, so we suggest to add a new flag to the mount() syscall, which allows us to add a mount into an existing group.
+
When we see all variation of commands to build a mount tree, we can understand that the final picture may be very complicated to be repeated, so we suggest to add [https://patchwork.kernel.org/patch/9703885/ a new flag] to the mount() syscall, which allows us to add a mount into an existing group.
In this case the restore algorithm will be very simple.
In this case the restore algorithm will be very simple.
−
Create a temporary mount which is called “root yard”
+
* Create a temporary mount which is called “root yard”
−
Create all namespaces (in specified user namespaces)
+
* Create all namespaces (in specified user namespaces)
−
Add root yards from all namespaces into one shared group, so a mount is created in one mntns, will be propagated into others.
+
* Add root yards from all namespaces into one shared group, so a mount is created in one mntns, will be propagated into others.
−
Create all mounts in separate directories in the root yards.
+
* Create all mounts in separate directories in the root yards.
−
Restore opened files (nothing is over-mounted at this point)
+
* Restore opened files (nothing is over-mounted at this point)
−
Build mount trees in namespaces by moving mounts to right places
+
* Build mount trees in namespaces by moving mounts to right places
−
Do pivot_root() in all namespaces
+
* Do pivot_root() in all namespaces
Let’s look at the next example:
Let’s look at the next example:
Line 87:
Line 87:
[[File:mntns-2.0-tree-3.svg]]
[[File:mntns-2.0-tree-3.svg]]
−
= Restore of unix sockets =
= Restore of unix sockets =