Snapshots GC takes use of pruneBranch() function to remove snapshots, but GC will stop if snapshotter.Remove() returns error and the error number is not ErrFailedPrecondition. This results in thousands of dm snapshots not deleted if one snapshot is not deleted, due to errors like "contains a filesystem in use". So return ErrFailedPrecondition error number in Remove() function where appropriate, and let GC process go on collecting other snapshots. Fix: #3923 Signed-off-by: Eryu Guan <eguan@linux.alibaba.com> Signed-off-by: Eric Ren <renzhen.rz@linux.alibaba.com>
Devmapper snapshotter
Devmapper is a containerd snapshotter plugin that stores snapshots in ext4-formatted filesystem images
in a devicemapper thin pool.
Setup
To make it work you need to prepare thin-pool in advance and update containerd's configuration file.
This file is typically located at /etc/containerd/config.toml.
Here's minimal sample entry that can be made in the configuration file:
[plugins]
...
[plugins.devmapper]
pool_name = "containerd-pool"
base_image_size = "8192MB"
...
The following configuration flags are supported:
root_path- a directory where the metadata will be available (if empty default location forcontainerdplugins will be used)pool_name- a name to use for the devicemapper thin pool. Pool name should be the same as in/dev/mapper/directorybase_image_size- defines how much space to allocate when creating the base deviceasync_remove- flag to async remove device using snapshot GC's cleanup callback
Pool name and base image size are required snapshotter parameters.
Run
Give it a try with the following commands:
ctr images pull --snapshotter devmapper docker.io/library/hello-world:latest
ctr run --snapshotter devmapper docker.io/library/hello-world:latest test
Requirements
The devicemapper snapshotter requires dmsetup (>= 1.02.110) command line tool to be installed and
available on your computer. On Ubuntu, it can be installed with apt-get install dmsetup command.