lxc clone & snapshot






Clones are either snapshots or copies of another container

A snapshot exploits the underlying backing store's snapshotting ability to make a copy-on-write container referencing the first.

Snapshots of directory-packed containers are created using the overlay filesystem.

在 C1 -clone-> C2 情況

 * C1 should not be allowed to run

 * C1 a canonical base container, and to only use its snapshots.

i.e. Full copy

# -o, --orig orig # The name of the original container to clone

lxc-clone -o c1-dir -n c2-dir

i.e. snapshot

lxc-clone -s c1-lvm c2-lvm

# tar backup

lxc-clone -B dir s1 dir_ship

tar -zcf /var/lib/lxc/dir_ship.tgz /var/lib/lxc/dir_ship

# Restore snapshot

lxc-clone -s s1 s1-backup         # just to make sure

lxc-destroy -n s1

lxc-clone -s s1-backup s1

# btrfs 與 lvm 的 snapshot 比較

btrfs snapshot

It is metadata based, so destroying the base container simply does not delete any of the data in use by the snapshot container.

lvm snapshot

lvm will note that there are active snapshots of the base rootfs and prevent the base container from being destroyed.

you cannot snapshot a snapshot

# overlayfs clone

可以用 lxc-create 或 lxc-copy (snapshot clone) 建立 Container

* lxc-clone 將被 lxc-copy 取代


lxc-create -n C1 -t ubuntu -B overlayfs

ls /var/lib/lxc/C1

delta0        # 342M
rootfs         # 0 M


#lxc.rootfs = /var/lib/lxc/C1/rootfs
#lxc.rootfs.backend = dir
lxc.rootfs = overlayfs:/var/lib/lxc/C1/rootfs:/var/lib/lxc/C1/delta0
lxc.rootfs.backend = overlayfs


# create an overlayfs snapshot of it

lxc-clone -o C1 -n C2 -B overlayfs -s

-s argument asks for a snapshot

-B specifies the backing store type for the new container

 * A snapshot clone C2 of a directory backed container C1 becomes an overlayfs backed container,

 * delta0 will store only the changes that has been made to the container


lxc.rootfs = overlayfs:/var/lib/lxc/C1/rootfs:/var/lib/lxc/C2/delta0
lxc.rootfs.backend = overlayfs




Snapshots are stored as snapshotted containers under the container's configuration path.

(所以 lvm 用不到此 snapshot 功能)


first snapshot: /var/lib/lxc/c1/snaps/snap0

# create snapshot

lxc-snapshot -n c1

snapshot location

If your original container was /var/lib/lxc/c1, then the first snapshot will be


 * 在 U16 上不支援 lvm 的 backend

# List (-L,--list)

lxc-snapshot -n c1 -L

# Comment ( -c )

echo "before installing apache2" > comment.txt

lxc-snapshot -n c1 -c comment.txt

# Show snapshot comments ( -C )

lxc-snapshot -n c1 -L -C

# Restore (-r,--restore snapshot-name)

lxc-snapshot -n c1 -r snap0

# Restore as "c1-snap0"

lxc-snapshot -n p1-lvm -r snap0 c1-snap0

# Remove snapshot (-d,--destroy snapshot-name)

If the named snapshot is ALL, then all snapshots will be destroyed.