/goploop

Go wrapper for C ploop library

Primary LanguageGoApache License 2.0Apache-2.0

goploop GoDoc

This is a Go wrapper for libploop, a C library to manage ploop.

What is ploop?

Ploop is a loopback block device (a.k.a. "filesystem in a file"), not unlike loop but with better performance and more features, including:

  • thin provisioning (image grows on demand)
  • dynamic resize (both grow and shrink)
  • instant online snapshots
  • online snapshot merge
  • optimized image migration with write tracker (ploop copy)

Ploop is implemented in the kernel and is currently available in OpenVZ RHEL6 and RHEL7 based kernels. For more information about ploop, see openvz.org/Ploop.

Prerequisites

You need to have

  • ext4 formatted partition (note RHEL/CentOS 7 installer uses xfs by default, that won't work!)
  • ploop-enabled kernel installed
  • ploop kernel modules loaded
  • ploop-lib and ploop-devel packages installed

Currently, all the above comes with OpenVZ, please see openvz.org/Quick_installation. After installing OpenVZ, you might need to run:

yum install ploop-devel

Building

If you are going to build a binary that uses this package statically, you need to add static_build build tag to your go build command, such as:

go build -tags static_build

Usage

This package is used by Docker ploop graphdriver, see https://github.com/kolyshkin/docker/tree/ploop/daemon/graphdriver/ploop

For primitive examples of how to use the package, see ploop_test.go.