Skip to content

Releases: lamco-admin/lambutter

lambutter 0.5.0

Choose a tag to compare

@glamberson glamberson released this 15 Oct 23:50

lambutter 0.5.0 fixes reads on btrfs filesystems that span more than one device and refuses fscrypt-encrypted data and names instead of returning them. It's a minor release because it adds two error tokens; no type changed shape.

Fixed

  • Multi-device filesystems were read from the wrong device. A chunk's first stripe was used whatever device it named, so on a filesystem across two devices lambutter read the device it was given at the other device's offsets. Metadata checksums caught that for tree blocks; file data came back wrong with no error. Each chunk is now read from its copy on the device being read (the superblock's dev_item.devid), and a chunk with no copy there is refused as UnsupportedProfile("prof_other_device"). A RAID1 filesystem reads from either member.
  • fscrypt markers were ignored. btrfs fscrypt isn't in mainline Linux, but its on-disk markers are defined: An extent with a non-zero encryption byte holds ciphertext and was returned as file data, and a directory entry with BTRFS_FT_ENCRYPTED has an encrypted name. Both are refused as UnsupportedFeature("feat_encryption").

Added

  • Error tokens prof_other_device and feat_encryption.
  • Fixtures for RAID1 across two devices with copies at different offsets, single data across two devices, and fscrypt markers. All three fail on 0.4.0.

Full changelog: CHANGELOG.md

lambutter 0.4.0

Choose a tag to compare

@glamberson glamberson released this 15 Oct 02:47

lambutter 0.4.0 fixes three ways 0.3.1 could read the wrong data, adds opening a btrfs filesystem at a chosen subvolume, and moves to ruzstd 0.9.1.

Fixed

  • Reads that stopped at a B-tree leaf boundary. A file whose extent items continue in the next leaf read as zeros from that point, and a directory whose index had a gap at a leaf boundary lost entries. On images written by Linux, a 12 MB kernel read zeros from 3.5 MB on, a 190 MB zstd file read wrong, and a 200-entry loader/entries listed 72.
  • Subvolumes. An entry naming a subvolume was read as an inode in the parent, so a /boot subvolume resolved to the parent's root directory. Paths and listings now cross into subvolumes the way a Linux mount shows them, and a snapshot's copy of a nested subvolume's entry reads as an empty directory, as in Linux.
  • LZO. Padding was detected at the wrong offsets, so many real LZO extents failed with BadCompression, and sectors above 4 KiB weren't handled.
  • Feature checks. Unknown incompat bits are refused instead of ignored, remap-tree is refused until it's supported, and xxhash, sha256 and blake2 filesystems report UnsupportedChecksum instead of a checksum mismatch.

Breaking changes

  • Inode carries its subvolume and its fields are private. Use objectid() and subvolume().
  • DirEntry gains inode and is #[non_exhaustive].
  • Error gains NotASubvolume.
  • The MSRV is Rust 1.87, which ruzstd 0.9 requires.

Added

  • Btrfs::open_subvol_id and Btrfs::open_subvol_path, matching the kernel's subvolid= and subvol=.
  • Btrfs::subvolume(), replacing default_subvol_objectid(), which remains as a deprecated alias.
  • ruzstd 0.9.1, which fixes RUSTSEC-2026-0344, and miniz_oxide 0.9.1.

The full list is in CHANGELOG.md.

lambutter is the btrfs reader in LamBoot, from Lamco Development LLC.

lambutter 0.3.1

Choose a tag to compare

@glamberson glamberson released this 15 Oct 03:19

lambutter 0.3.1, published to crates.io on 2026-06-04. This GitHub release was added on 2026-10-15.

Changed

  • The optional miniz_oxide dependency (the zlib feature) moves from 0.8 to the 0.7 line, matching the version in the Debian archive. lambutter only calls inflate::decompress_to_vec_zlib_with_limit, which 0.7 provides.

Superseded by 0.4.0, which fixes reads across B-tree leaf boundaries, LZO extents and subvolume paths.

lambutter 0.3.0

Choose a tag to compare

@lamco-office lamco-office released this 02 Jun 23:02

First public release of lambutter, a no_std read-only btrfs reader for UEFI bootloaders and embedded contexts — the btrfs counterpart to ext4-view.

  • Read-only; opens files, symlinks, and directory listings on SINGLE / DUP / RAID1 / RAID1C3 / RAID1C4 volumes.
  • Decodes zstd, zlib, and LZO extents; unsupported profiles surface as typed errors.
  • no_std + alloc; dual-licensed MIT OR Apache-2.0.
  • On crates.io: https://crates.io/crates/lambutter

See CHANGELOG.md for the version history (v0.1.0 → v0.3.0).