Releases: emmanuel-deloget/fsforge
Release list
fsforge v0.2.0
fsforge v0.2.0
Large-file support in the ext engines, plus the allocator work it needed.
alloc: an allocation is no longer required to fit in a single contiguous
run. AllocRuns chains as many runs as a request needs — the whole remainder
when it fits, otherwise the largest run available — and rolls back entirely
on failure. Handing out a partial run is the new optional RunAllocator
capability (AllocUpTo); a plain Allocator is probed by halving instead, so
an injected policy keeps working unchanged. Bitmap now scans 64 bits at a
time from a free hint rather than bit by bit from block 0, which took layout
from quadratic to near-linear in block count; first-fit stays exact, so
layouts are byte-identical to v0.1.1.
ext: files, directories and long symlink targets are laid out across several
runs. Every block group opens with its own metadata, so no free run can span
more than one group — 128 MiB at 4 KiB blocks, 8 MiB at 1 KiB — and any
larger object previously failed with "alloc: no contiguous space" whatever
the image size. ext2 and ext4 were both affected.
ext4: the extent tree grows index nodes once the leaves outgrow the four
that fit in i_block, adding a level until the root fits, capped at the
kernel's depth of 5. i_blocks accounts for those nodes.
ext: a file above 4 GiB is now refused rather than silently truncated;
i_size is written as a 32-bit field and large_file is not implemented.
Validated with e2fsck plus a byte-for-byte debugfs extraction, and by
mounting under the Linux kernel: 220 MiB (inline extents), 700 MiB and a
1 KiB-block 40 MiB file (indexed trees), and an OCI-shaped 20 003-file,
732 MiB rootfs. (#14)
fsforge v0.1.1
Bug-fix release.
Fixes
- ext (ext4): drop a runt final block group that could overrun its inode table. When the device size left a small remainder past the last full block group, the final group was laid out with the full per-group inode table, which ran past the group and the end of the device. The Linux kernel's
ext4_check_descriptorsthen refused to mount the image (Inode table for group N not in group), making the failure size-dependent.computeGeometrynow drops such a runt group (rounding down to the group boundary), matchingmke2fsbehaviour. (#13, fixes #12)
Full changelog: v0.1.0...v0.1.1
v0.1.0
What's Changed
- Publish prep: CI, coverage, reusable API, docs by @emmanuel-deloget in #1
- Read-back sources (exFAT, ISO9660) and OCI image layering by @emmanuel-deloget in #2
- feat(erofs): add an uncompressed EROFS engine (writer + reader) by @emmanuel-deloget in #3
- feat(cpio): cpio newc / initramfs engine (writer + reader) by @emmanuel-deloget in #4
- feat(qcow2): QCOW2 disk-image container at the device layer by @emmanuel-deloget in #5
- test(qcow2): make TestReproducible deterministic by @emmanuel-deloget in #7
- chore: lower go directive to 1.24 for wider support by @emmanuel-deloget in #6
- docs(readme): state that fsforge has zero dependencies by @emmanuel-deloget in #8
- feat(udf): read-only UDF 2.01 engine (writer + reader) by @emmanuel-deloget in #9
- feat(cramfs): zlib-compressed read-only cramfs engine (writer + reader) by @emmanuel-deloget in #10
- feat(romfs): uncompressed read-only romfs engine (writer + reader) by @emmanuel-deloget in #11
New Contributors
- @emmanuel-deloget made their first contribution in #1
Full Changelog: https://github.com/emmanuel-deloget/fsforge/commits/v0.1.0