Go to file
Asmir Selimovic 9901e4a20c - Option to resume interrupted send 2019-12-20 10:20:00 +01:00
.gitignore Return logs (ZIL) vdev as well in VDevTree 2018-03-28 10:24:47 +02:00
LICENSE.md Update LICENSE.md 2015-06-04 00:05:13 +02:00
README.md README update 2018-11-09 19:41:37 +01:00
a_test.go Functions to set hold, release and list user references on snapshots 2018-11-02 11:15:55 +01:00
common.c Change how properties single linked list is released from memory 2019-03-07 18:55:59 +01:00
common.go Maps ZPOOL_PROP_AUTOTRIM to PoolPropAutotrim (#20) 2019-08-07 11:49:32 +02:00
common.h Changes to build on musl/alpine 2018-11-15 21:58:33 +01:00
destroy_test.go DestroyPromote - recursive destroy dataset, but don’t destroy any dependent clones, promote them first 2018-12-17 14:01:59 +01:00
go.mod Use go mod for handling eventual go packages dependencies and builds outside of GOPATH 2019-01-21 16:29:40 +01:00
sendrecv.go - Option to resume interrupted send 2019-12-20 10:20:00 +01:00
sort.go DestroyPromote - recursive destroy dataset, but don’t destroy any dependent clones, promote them first 2018-12-17 14:01:59 +01:00
zfs.c Estimate snapshot send size 2018-08-06 10:35:39 +02:00
zfs.go Force refreshing property on C side when ReloadProperties() (#24) 2019-12-18 09:25:03 +01:00
zfs.h - Small fixes 2017-12-07 09:54:07 +01:00
zfs_test.go Functions to set hold, release and list user references on snapshots 2018-11-02 11:15:55 +01:00
zpool.c Avoiding the nice bytes representation (#26) 2019-12-19 08:29:16 +01:00
zpool.go Merge branch 'dev-zfs-0.7.x' 2018-11-09 16:24:46 +01:00
zpool.h zfs 0.8 support (#15) 2019-06-20 21:17:31 +02:00
zpool_test.go Functions to set hold, release and list user references on snapshots 2018-11-02 11:15:55 +01:00
zpool_vdev.c Changes to build on musl/alpine 2018-11-15 21:58:33 +01:00
zpool_vdev.go zpool online, offline and clear devices 2018-06-26 14:01:39 +02:00

README.md

Introduction

go-libzfs currently implements basic manipulation of ZFS pools and data sets. Plan is to add more in further development, improve documentation with more examples, and add more tests. go-libzfs use libzfs C library and does not wrap OpenZFS CLI tools. Goal is to let easy using and manipulating OpenZFS form with in go, and tries to map libzfs C library in to go style package respecting golang common practice.

Note

This golang package is only used and tested on Linux.

  • Version tagged as v0.1 is latest used and compatible with ZFS On Linux version 0.6.5.x
  • Version tagged as v0.2 is latest used and compatible with ZFS On Linux version 0.7.x

GoDoc

Main features

  • Creating, destroying, importing and exporting pools.
  • Reading and modifying pool properties.
  • Creating, destroying and renaming of filesystem datasets and volumes.
  • Creating, destroying and rollback of snapshots.
  • Cloning datasets and volumes.
  • Reading and modifying dataset and volume properties.
  • Send and receive snapshot streams

Requirements:

  • OpenZFS on Linux and libzfs with development headers installed.
  • Developed using go1.9

Installing

go get github.com/bicomsystems/go-libzfs

Testing

# On command line shell run
cd $GOPATH/src/github.com/bicomsystems/go-libzfs
go test

Usage example

// Create map to represent ZFS dataset properties. This is equivalent to
// list of properties you can get from ZFS CLI tool, and some more
// internally used by libzfs.
props := make(map[ZFSProp]Property)

// I choose to create (block) volume 1GiB in size. Size is just ZFS dataset
// property and this is done as map of strings. So, You have to either
// specify size as base 10 number in string, or use strconv package or
// similar to convert in to string (base 10) from numeric type.
strSize := "1073741824"

props[DatasetPropVolsize] = Property{Value: strSize}
// In addition I explicitly choose some more properties to be set.
props[DatasetPropVolblocksize] = Property{Value: "4096"}
props[DatasetPropReservation] = Property{Value: strSize}

// Lets create desired volume
d, err := DatasetCreate("TESTPOOL/VOLUME1", DatasetTypeVolume, props)
if err != nil {
	println(err.Error())
	return
}
// Dataset have to be closed for memory cleanup
defer d.Close()

println("Created zfs volume TESTPOOL/VOLUME1")

Special thanks to

  • Bicom Systems for supporting this little project and that way making it possible.
  • OpenZFS as the main ZFS software collective.