{"id":50988204,"url":"https://github.com/lamco-admin/lamzfs","last_synced_at":"2026-06-19T22:30:47.793Z","repository":{"id":363291880,"uuid":"1260776997","full_name":"lamco-admin/lamzfs","owner":"lamco-admin","description":"no_std read-only ZFS reader for UEFI bootloaders — single/mirror vdev (early development)","archived":false,"fork":false,"pushed_at":"2026-06-08T08:16:51.000Z","size":3558,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-08T10:10:44.447Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lamco-admin.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","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,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-05T21:30:37.000Z","updated_at":"2026-06-08T08:16:55.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/lamco-admin/lamzfs","commit_stats":null,"previous_names":["lamco-admin/lamzfs"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/lamco-admin/lamzfs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamco-admin%2Flamzfs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamco-admin%2Flamzfs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamco-admin%2Flamzfs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamco-admin%2Flamzfs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lamco-admin","download_url":"https://codeload.github.com/lamco-admin/lamzfs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamco-admin%2Flamzfs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34550858,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-19T02:00:06.005Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","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":[],"created_at":"2026-06-19T22:30:47.691Z","updated_at":"2026-06-19T22:30:47.784Z","avatar_url":"https://github.com/lamco-admin.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# lamzfs\n\n[![Crates.io](https://img.shields.io/crates/v/lamzfs.svg)](https://crates.io/crates/lamzfs)\n[![Docs.rs](https://docs.rs/lamzfs/badge.svg)](https://docs.rs/lamzfs)\n[![CI](https://github.com/lamco-admin/lamzfs/actions/workflows/ci.yml/badge.svg)](https://github.com/lamco-admin/lamzfs/actions/workflows/ci.yml)\n[![License](https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg)](#license)\n\nA `no_std` + `alloc`, **read-only** ZFS pool reader for UEFI bootloaders.\n\n`lamzfs` imports a ZFS pool over a plain byte source, walks to one dataset, and\nreads its files — enough for a bootloader to find a kernel and initramfs without\nthe OpenZFS kernel module, without `std`, and without a GPL UEFI driver. The\nmotivating target is Ubuntu / Debian root-on-ZFS, which keep a simple `bpool`\nboot pool. **Read-only by construction**: there is no write path and no\n`BlockWrite`.\n\n## Scope (v0.1)\n\nSupported:\n\n- **Topologies**: single disk, mirror, and single-parity **RAID-Z1** (including\n  degraded reads that reconstruct a missing/corrupt column from parity).\n- **Compression**: `off`, `zle`, `lzjb`, `lz4`, `gzip`, `zstd` (each a feature).\n- **Checksums**: Fletcher-2/4 and SHA-256 (scalar).\n- The full read walk: vdev label → uberblock → MOS → DSL → dataset → ZPL →\n  ZAP directories → indirect block-pointer tree (sparse-file aware).\n\nOut of scope: any write path, encryption, RAID-Z2/3, dRAID, and gang blocks\n(each rejected with a typed error).\n\n## Usage\n\nImplement `BlockRead` over your device, then import and read:\n\n```rust\nuse lamzfs::{BlockRead, PoolMember, Zfs};\n\n# struct Disk;\n# impl BlockRead for Disk {\n#     type Error = ();\n#     fn read_at(\u0026mut self, _off: u64, _buf: \u0026mut [u8]) -\u003e Result\u003c(), ()\u003e { Ok(()) }\n# }\n# fn members() -\u003e Vec\u003cPoolMember\u003cDisk\u003e\u003e { Vec::new() }\nlet mut zfs = Zfs::import(members())?;          // one PoolMember per vdev member\nprintln!(\"pool {} ({:#x})\", zfs.pool_name(), zfs.pool_guid());\n\n// Dataset path = child-directory components under the pool root; the second\n// argument is the directory within that dataset (empty = its root).\nfor entry in zfs.read_dir(\u0026[\"BOOT\", \"default\"], \u0026[])? {\n    println!(\"{:?} {}\", entry.kind, entry.name);\n}\nlet kernel = zfs.read(\u0026[\"BOOT\", \"default\"], \u0026[\"vmlinuz\"])?;\n# Ok::\u003c(), lamzfs::Error\u003e(())\n```\n\nSee [`examples/zfsdump.rs`](examples/zfsdump.rs) for a runnable host tool.\n\n## Basis\n\nThe on-disk **decoders** are vendored from\n[rzfs](https://github.com/cybojanek/rzfs), electing the MIT half of its\n`GPL-2.0 OR MIT` dual license — a clean-room reader, not GPL kernel/userspace\nsource. The orchestration (pool import, vdev routing, dataset walk, path\nresolve, file read) is new `lamzfs` code. The crate is scalar-only and\n`#![forbid(unsafe_code)]`. See [`NOTICE`](NOTICE) for attribution.\n\n## License\n\nLicensed under either of\n\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE))\n- MIT license ([LICENSE-MIT](LICENSE-MIT))\n\nat your option. Vendored upstream portions retain their own terms (see\n[`NOTICE`](NOTICE)).\n\n### Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you shall be dual licensed as above, without any\nadditional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flamco-admin%2Flamzfs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flamco-admin%2Flamzfs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flamco-admin%2Flamzfs/lists"}