{"id":13509887,"url":"https://github.com/lorenz/go-zfs","last_synced_at":"2025-07-23T04:03:16.079Z","repository":{"id":36397472,"uuid":"174379559","full_name":"lorenz/go-zfs","owner":"lorenz","description":"GoZFS is a pure-Go implementation of ZFS userspace","archived":false,"fork":false,"pushed_at":"2023-02-25T10:12:20.000Z","size":57,"stargazers_count":25,"open_issues_count":1,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-13T00:11:28.766Z","etag":null,"topics":["storage","zfs"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lorenz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-07T16:18:12.000Z","updated_at":"2025-01-18T09:41:40.000Z","dependencies_parsed_at":"2024-11-01T10:30:48.999Z","dependency_job_id":null,"html_url":"https://github.com/lorenz/go-zfs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lorenz/go-zfs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lorenz%2Fgo-zfs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lorenz%2Fgo-zfs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lorenz%2Fgo-zfs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lorenz%2Fgo-zfs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lorenz","download_url":"https://codeload.github.com/lorenz/go-zfs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lorenz%2Fgo-zfs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266614306,"owners_count":23956341,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["storage","zfs"],"created_at":"2024-08-01T02:01:16.058Z","updated_at":"2025-07-23T04:03:15.950Z","avatar_url":"https://github.com/lorenz.png","language":"Go","funding_links":[],"categories":["Go","others"],"sub_categories":[],"readme":"# GoZFS\n*A pure-Go minimalist ZFS userspace implementation for storage systems*\n\n## Design goals\n* Ease of use\n* Fine-grained control, nothing is automatically done\n* Performance\n* Compatibility with multiple ZoL releases\n\n## Differences from normal ZFS userspace\nGoZFS is only a wrapper around the kernel interface of ZoL. It won't automount/auto-unmount anything,\nit disregards all props (for example `canmount`), it doesn't use ZFS history and much more.\nThis has certain disadvantages when writing a ZFS command-line utility that people expect to work\nexactly like a normal ZFS would, but is hugely benefical to storage systems written on top of ZFS,\nsince they have very tight control of what is actually done.\nGoZFS is designed to be compatible with ZoL 0.6+ in a single library,\nit does not need to be kept in lock-step with the ZoL in-kernel module.\nBecause of this and its intended use case in other software its own\nerror handling is very minimal and generally relies only on the kernel.\n\n## Architecture\nGoZFS currently consists of 2 packages and will eventually consist of three:\n* `ioctl`: Slim wrappers around the pure ZFS ioctls, these only do the bare minimum to make the\n  ioctls usable and memory-safe. Covers most relevant ioctls now.\n* `nvlist`: A pure-Go implementation of ZFS's flavor of nvlists with a similar API to `encoding/json`.\n   Only implements the bits necessary for ZFS. Mostly for internal use by the `ioctl` package, but\n   not tied to it.\n* `zfs`: A wrapper around the `ioctl` package to make the API more Go-like and convenient to use.\n  Not yet implemented.\n\n## Utilities\nGoZFS provides a custom strace implementation for tracing ZFS ioctls. It is found under `ioctl/trace`\nand can be used to inspect calls by GoZFS or the normal ZFS userspace utilities.\n\n## Stability \u0026 Testing\nThis is currently alpha-level software. Its implementation and API is still incomplete and subject to change.\nIt does work for most standard storage system tasks, but there is minimal documentation. The high-levl interface\npackage, `zfs` still remains to be written.\n\nThere is automated integration testing against a custom 4.19 kernel with ZoL 0.8 inside\nkvmtool in GitLab CI/Kubernetes. The tests can also be run standalone if you have a working ZoL setup.\nFull matrix testing against ZoL 0.7 on Linux 4.19 and ZoL 0.6 on Linux 4.9 is planned. The test runtime\ncannot be distributed since it contains compiled CDDL and GPLv2 code.\n\nThe decoder side of nvlist has a fuzzing harness based on go-fuzz.\n\n## Not yet implemented\n* Import from on-disk labels (missing proper XDR support in nvlist)\n* VDev management (needs reverse-engineered config structures)\n* Feature management (upgrade, enabling, disabling)\n* Diff\n* Encryption\n* Import cache\n\n## Out-of-scope\n* History\n* Fault injection\n* ACLs (currently don't see where it might be reasonably used, but I'm open to a discussion)\n* SMB/NFS sharing (do it inside your storage system)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Florenz%2Fgo-zfs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Florenz%2Fgo-zfs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Florenz%2Fgo-zfs/lists"}