[lxc-devel] [PATCH] Do not allow snapshots of LVM backed containers
Stéphane Graber
stgraber at ubuntu.com
Fri Aug 8 15:39:42 UTC 2014
On Fri, Aug 08, 2014 at 03:00:18PM +0000, Serge Hallyn wrote:
> They don't work right now, so until we fix that, don't allow it.
>
> Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
Acked-by: Stéphane Graber <stgraber at ubuntu.com>
> ---
> src/lxc/bdev.c | 26 ++++++++++++++++++++++++++
> src/lxc/bdev.h | 2 ++
> src/lxc/lxccontainer.c | 6 ++++++
> 3 files changed, 34 insertions(+)
>
> diff --git a/src/lxc/bdev.c b/src/lxc/bdev.c
> index 9f24994..2d5bfea 100644
> --- a/src/lxc/bdev.c
> +++ b/src/lxc/bdev.c
> @@ -521,6 +521,7 @@ static const struct bdev_ops dir_ops = {
> .destroy = &dir_destroy,
> .create = &dir_create,
> .can_snapshot = false,
> + .can_backup = true,
> };
>
>
> @@ -785,6 +786,7 @@ static const struct bdev_ops zfs_ops = {
> .destroy = &zfs_destroy,
> .create = &zfs_create,
> .can_snapshot = true,
> + .can_backup = true,
> };
>
> //
> @@ -1180,6 +1182,7 @@ static const struct bdev_ops lvm_ops = {
> .destroy = &lvm_destroy,
> .create = &lvm_create,
> .can_snapshot = true,
> + .can_backup = false,
> };
>
> /*
> @@ -1859,6 +1862,7 @@ static const struct bdev_ops btrfs_ops = {
> .destroy = &btrfs_destroy,
> .create = &btrfs_create,
> .can_snapshot = true,
> + .can_backup = true,
> };
>
> //
> @@ -2130,6 +2134,7 @@ static const struct bdev_ops loop_ops = {
> .destroy = &loop_destroy,
> .create = &loop_create,
> .can_snapshot = false,
> + .can_backup = true,
> };
>
> //
> @@ -2427,6 +2432,7 @@ static const struct bdev_ops overlayfs_ops = {
> .destroy = &overlayfs_destroy,
> .create = &overlayfs_create,
> .can_snapshot = true,
> + .can_backup = true,
> };
>
> //
> @@ -2704,6 +2710,7 @@ static const struct bdev_ops aufs_ops = {
> .destroy = &aufs_destroy,
> .create = &aufs_create,
> .can_snapshot = true,
> + .can_backup = true,
> };
>
> //
> @@ -3013,6 +3020,7 @@ static const struct bdev_ops nbd_ops = {
> .destroy = &nbd_destroy,
> .create = &nbd_create,
> .can_snapshot = true,
> + .can_backup = false,
> };
>
> static const struct bdev_type bdevs[] = {
> @@ -3079,6 +3087,12 @@ struct bdev *bdev_init(struct lxc_conf *conf, const char *src, const char *dst,
> struct bdev *bdev;
> const struct bdev_type *q;
>
> + if (!src)
> + src = conf->rootfs.path;
> +
> + if (!src)
> + return NULL;
> +
> q = bdev_query(src);
> if (!q)
> return NULL;
> @@ -3167,6 +3181,18 @@ bool bdev_is_dir(struct lxc_conf *conf, const char *path)
> return ret;
> }
>
> +bool bdev_can_backup(struct lxc_conf *conf)
> +{
> + struct bdev *bdev = bdev_init(conf, NULL, NULL, NULL);
> + bool ret;
> +
> + if (!bdev)
> + return false;
> + ret = bdev->ops->can_backup;
> + bdev_put(bdev);
> + return ret;
> +}
> +
> /*
> * is an unprivileged user allowed to make this kind of snapshot
> */
> diff --git a/src/lxc/bdev.h b/src/lxc/bdev.h
> index 651f7f3..d97b9df 100644
> --- a/src/lxc/bdev.h
> +++ b/src/lxc/bdev.h
> @@ -47,6 +47,7 @@ struct bdev_ops {
> const char *cname, const char *oldpath, const char *lxcpath,
> int snap, uint64_t newsize, struct lxc_conf *conf);
> bool can_snapshot;
> + bool can_backup;
> };
>
> /*
> @@ -72,6 +73,7 @@ struct bdev {
> char *overlay_getlower(char *p);
>
> bool bdev_is_dir(struct lxc_conf *conf, const char *path);
> +bool bdev_can_backup(struct lxc_conf *conf);
>
> /*
> * Instantiate a bdev object. The src is used to determine which blockdev
> diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
> index 814aeb1..553f026 100644
> --- a/src/lxc/lxccontainer.c
> +++ b/src/lxc/lxccontainer.c
> @@ -2987,6 +2987,12 @@ static int lxcapi_snapshot(struct lxc_container *c, const char *commentfile)
> if (!c || !lxcapi_is_defined(c))
> return -1;
>
> + if (!bdev_can_backup(c->lxc_conf)) {
> + ERROR("%s's backing store cannot be backed up.", c->name);
> + ERROR("Your container must use another backing store type.");
> + return -1;
> + }
> +
> if (!get_snappath_dir(c, snappath))
> return -1;
>
> --
> 2.1.0.rc1
>
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel
--
Stéphane Graber
Ubuntu developer
http://www.ubuntu.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20140808/d926fae3/attachment.sig>
More information about the lxc-devel
mailing list