<p align="center">
<img src="libzetta.png">
</p>
[](https://dev.azure.com/andoriyu/libpandemonium/_build/latest?definitionId=4&branchName=master)
[](https://codecov.io/gh/Inner-Heaven/libzetta-rs)
[](https://crates.io/crates/libzetta)
[](https://cirrus-ci.com/github/Inner-Heaven/libzetta-rs)
[](https://docs.rs/libzetta)
[](https://github.com/Inner-Heaven/libzetta-rs/blob/master/LICENSE)
> libzetta-rs is a stable interface for programmatic administration of ZFS
## Installation
Not yet. It won't break your pool or kill your brother, but API might change. Wait until 1.0.0. I have a pretty decent roadmap to 1.0.0.
## Usage
Public API for `zpool` stable. Public API for `zfs` might change after I actually get to use it in other projects. Consult the documention on usage.
### FreeBSD
This library focused on FreeBSD support. This should work on any FreeBSD version since 9.2. No intention on supporting legacy versions. Supported versions:
- 12.1
### Linux
Right now it verified works with `0.7.13` and entire `0.7.x` branch.
## How it works
ZFS doesn't have stable API at all.`libzfs_core`(`lzc`) fills some gaps, but not entirely. While `lzc` provides stable APi to some features of zfs, there is no such thing for zpool. This library resorts to `zfs(8)` and `zpool(8)` where `lzc` falls shorts.
## Running tests
Note that integration tests do a lot of zpool and zfs operations on live system. I recommend spin up a VM and use `run_tests.sh` to run integration tests inside. Tests also take a lot of disk space because each vdev is at least 64mb file.
## Current feature status
### zpool
| open3 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔¹ | ✔ | ✔ |
1. Reads the status, but api isn't stable and does poor job at reporting scrubbing status.
### zfs
#### Filesystem and ZVOL
| open3 | ❌ | ❌ | ✔ | ✔ | ❌ |
| lzc | ✔¹ | ✔ | ❌ | ❌ | ❌ |
1. Might not have all properties available.
#### Snapshot and bookmark
| open3 | ❌ | ❌ | ✔ | ✔ | ❌ | ❌ |
| lzc | ✔¹ | ✔ | ❌ | ❌ | ✔ | ❌ |
1. Might not have all properties available.
## Alternatives
### https://github.com/whamcloud/rust-libzfs
Unlike them LibZetta doesn't link against private libraries of ZFS. `libzetta` also has more documention.
### https://github.com/jmesmon/rust-libzfs
LibZetta has zpool APIs. LibZetta shares `-sys` crates with this library. LibZetta also will delegate certain features of `zfs(8)` to open3 implementation.
## LICENSE
[BSD-2-Clause](LICENSE).