Difference between revisions of "Mount points"

From CRIU
Jump to navigation Jump to search
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
This page describes what we do with mount points trees.
 
This page describes what we do with mount points trees.
= Introduction =
+
== Introduction ==
 
When we are thinking about restoring a mount tree, we need to remember a few things:
 
When we are thinking about restoring a mount tree, we need to remember a few things:
 
* shared and slave groups
 
* shared and slave groups
Line 6: Line 6:
 
* bind mounts (rw, ro)
 
* bind mounts (rw, ro)
  
The algorithm which is described here is not able to cover all the cases, so this solution is a temporary one.
+
The algorithm described here is not able to cover all the cases, so this solution is a temporary one.
  
=Dump=
+
== Dump ==
  
 
There is nothing interesting here. We just dump information about mounts and validate them to be sure that we are able to restore them.
 
There is nothing interesting here. We just dump information about mounts and validate them to be sure that we are able to restore them.
  
=Restore=
+
== Restore ==
  
 
Mounts are restored for a few iterations. On each iteration we enumerate all mounts and mount everything we can. On the next iteration we mount a bit more and continue to do so  step by step. The idea is that we will be able to mount something new on each iteration. If we can't mount anything, we stop and report an error telling that we can't restore this configuration.
 
Mounts are restored for a few iterations. On each iteration we enumerate all mounts and mount everything we can. On the next iteration we mount a bit more and continue to do so  step by step. The idea is that we will be able to mount something new on each iteration. If we can't mount anything, we stop and report an error telling that we can't restore this configuration.
 
For example, a mount can't be mounted if its parent isn't mounted yet. Or a more interesting example, a mount can't be mounted if not all the mounts from its parent shared group are mounted.
 
For example, a mount can't be mounted if its parent isn't mounted yet. Or a more interesting example, a mount can't be mounted if not all the mounts from its parent shared group are mounted.
  
=Known issues=
+
== Known issues ==
 
CRIU doesn't support configurations where two mounts of one shared group have different set of mounts. This is not a feature, this is a bug and you are welcome to fix it.
 
CRIU doesn't support configurations where two mounts of one shared group have different set of mounts. This is not a feature, this is a bug and you are welcome to fix it.
  
=TODO=
+
(done and checked by non_uniform_share_propagation in zdtm)
 +
 
 +
== TODO ==
 
* Read-only bind mounts
 
* Read-only bind mounts
 +
(not sure was meant here but e.g. ghost files on readonly mounts handled and checked by ghost_on_rofs zdtm test)
 
* Skipping mountpoints
 
* Skipping mountpoints
 
* Enabling FS runtime
 
* Enabling FS runtime
Line 29: Line 32:
  
 
[[Category: Under the hood]]
 
[[Category: Under the hood]]
 +
[[Category: Fly in the ointment]]

Latest revision as of 07:17, 25 March 2020

This page describes what we do with mount points trees.

Introduction[edit]

When we are thinking about restoring a mount tree, we need to remember a few things:

  • shared and slave groups
  • how mounts are propagated inside one group
  • bind mounts (rw, ro)

The algorithm described here is not able to cover all the cases, so this solution is a temporary one.

Dump[edit]

There is nothing interesting here. We just dump information about mounts and validate them to be sure that we are able to restore them.

Restore[edit]

Mounts are restored for a few iterations. On each iteration we enumerate all mounts and mount everything we can. On the next iteration we mount a bit more and continue to do so step by step. The idea is that we will be able to mount something new on each iteration. If we can't mount anything, we stop and report an error telling that we can't restore this configuration. For example, a mount can't be mounted if its parent isn't mounted yet. Or a more interesting example, a mount can't be mounted if not all the mounts from its parent shared group are mounted.

Known issues[edit]

CRIU doesn't support configurations where two mounts of one shared group have different set of mounts. This is not a feature, this is a bug and you are welcome to fix it.

(done and checked by non_uniform_share_propagation in zdtm)

TODO[edit]

  • Read-only bind mounts

(not sure was meant here but e.g. ghost files on readonly mounts handled and checked by ghost_on_rofs zdtm test)

  • Skipping mountpoints
  • Enabling FS runtime

See also[edit]

External bind mounts