Signed release tarballs can be found at https://www.kernel.org/pub/linux/kernel/people/kdave/btrfs-progs/
inspect list-chunks: more sorting keys, descending order
fi resize: add support for offline (unmounted) growing of single device
device stats: add support for offline (unmounted) reads
quota status: new command, overview what mode is enabled, tunables
fi commit-stats: new command, print various commit stats from sysfs (since kernel 6.1)
balance start: print warning and delay start if there’s a missing device in the filesystem
- mkfs:
print zoned mode (native, emulated)
- check:
verify device bytes in super block item and in chunk tree
- other
updated CI, new and updated tests
cleanups, refactoring
documentation updates
- mkfs:
print label of existing filesystem if attempting to overwrite
remove note about changed defaults in 6.15
discard support detection uses the ioctl and not sysfs, this should work for all types of block devices
device usage: fix printing units of partition sizes, used to be in 512B sectors
defrag: new option --nocomp to request no compression (kernel 6.17)
check: detect missing orphan items for deleted subvolumes
subvol delete: don’t print warning if filesystem is mounted with user_subvol_rm_allowed
build: add build support for Android
- other:
cleanups and refactoring
sync sources with kernel
documentation updates
CI and test updates
- mkfs:
add option --reflink, when used with --rootdir clone file extents instead of copying (requires source and target image on the same filesystem)
improved tracking of inodes and subvolumes for option --inode-flags
fix initializing raid-stripe-tree
extend what is trimmed/discarded during initialization (temporary chunks, free space)
check: detect duplicate file names in directory items
inspect tree-stats: accept string names for option -t
receive: allow to dump stream from different user
- other:
updated documentation
new and updated tests
mkfs: new option --inode-flags to specify flags/attributes for inodes/directories/subvolumes
check: * fix false alert on missing checksum for hole * in lowmem mode, fix false alerts when checking refs
convert: check feature compatibility when enabling block-group-tree
tune convert-bgt: fix resume of conversion
rescue: add new command fix-data-checksum, selectively fix or find mismatching checksums
- other:
new and updated tests
documentation updates
- mkfs:
allow --sectorsize to be 2K for testing purposes of subpage mode (needs the same block size supported by kernel)
fix false error when no compression is requested and lzo is not compiled in
convert: support 2K block size in the source filesystem
defrag: new parameter -L/--level to specify compression levels (kernel 6.15), also supports the realtime levels
subvol delete: show names of recursively deleted child subvolumes
qgroup show: use sysfs to detect up to date consistency status
zoned mode: support zone capacity tracking
- other:
CI new and updated workflows
documentation updates
- mkfs:
new option to enable compression
updated summary (subvolumes, compression)
completely remove option --leafsize, deprecated long ago
btrfstune: add option to remove squota
- scrub:
start: new option --limit to set the bandwidth limit for the duration of the run
status: fix printing of Rate unit suffix (SI/IEC)
qgroup clean-stale: check if quotas are enabled before starting filesystem sync()
print builtin features and options in --version output (mkfs, convert, image, btrfstune)
- build:
Botan minimum version is now 3.x
target to build compile_commands.json (for LSP)
- other:
a bit more optimized crc32c code
sync some headers from kernel code
command help updates and fixes
build warning fixes
error message updates
cleanups and refactoring
updated tests
lots of documentation updates
subvolume delete: add new option to do recursive subvolume deletion (for regular user delete only accessible subvolumes)
- mkfs:
new option --subvol to create subvolumes in given paths, read-write, read-only and default
add hard link detection support for --rootdir option
- fixes:
receive: message verbosity fixes
check: fix false positive report of missing checksum for extent holes
check: handle compressed extents when checking tree log
when asking Y/N user questions, flush the terminal so the question is displayed (e.g. btrfstune -S)
- other
code refactoring, error handling
python packaging fixes
documentation updates
new tests
- check:
check items in tree-log
detect invalid file extent items for symlinks
properly detect inode cache and suggest removal by ‘clear-ino-cache’
convert: fix symlink length checks
fi show: remove stray newline at the end of the output
- fixes:
open devices in write-exclusive mode in most commands, prevent concurrent mount by other programs
rescue clear-ino-cache: fix subvolume iteration that can fail in some cases
map-logical: fix first extent searching condition
fi resize: warn if new size is below 256M
- tree-checker:
slightly stricter file type validation
verify device extent items
- other:
documentation updates
ship btrfs-ioctl manual page (incomplete)
- inspect:
list-chunks: new command to print information about chunks (i.e. the physical chunks as stored on devices), sortable; requires root as it’s using SEARCH_TREE ioctl
tree-stats: * new option -t to print only the given tree * add long options for size units
filesystem df: with increased verbosity print per-type information from sysfs
version: print a line with built-in features or options (+FEATURE1 -FEATURE2)
image: document option -s and its potential problems
- fixes:
scrub status: user selected base for Rate values
receive: escape special characters in paths and xattrs
dump-tree: escape special characters in paths and xattrs
image: sanitizing filenames did not work properly in all cases
convert: fix displayed restored image path on rollback
tune change csum: do conversion in smaller batches
- other:
CI workflows updates (sanitizers, code spelling, manual page preview)
build fixes for uClibc
build fix for python 3.13
documentation updates
mkfs: rework --rootdir traversal, skip hardlinks and create new inodes instead, also warn about them, this did not work as expected and will be fixed in the future
receive: search in older trees for UUIDs when detecting clone sources
libbtrfsutil: bindings available at https://pypi.org/project/btrfsutil
- libbtrfs:
patchlevel version update 0.1.4
cleanup in headers, removed unused definitions, no functional changes
don’t ship list.h and rbtree.h
- other:
documentation updates
- mkfs:
if --force used, don’t continue if the mount status cannot be determined (e.g. due to permissions)
fix minimum size calculation on zoned devices, make it work with option -b
- check:
option --clear-ino-cache removed (functionality still provided in ‘rescue’ command group)
detect and repair wrong file extent item ram_bytes value
- qgroup clear-stale:
sync the filesystem before search to read the up to date state
handle cases where qgroup cannot be deleted due to uncleaned subvolume or when squota is enabled
qgroup show: display status of qgroup regarding the cleaning of the subvolume or if it’s squota
receive: fix stream parsing on strict alignment hosts (e.g. ARM v5 or v6)
tune change-csum: fix check of dev-replace status item, continue if no dev-replace in progress
dump-tree: print contents of dev-replace status item
convert: fix extent iteration to handle prealloc/unwritten extents
- libbtrfsutil:
patchlevel version update 1.3.1
fix potentially unaligned access to send stream
create library links to all version levels
- libbtrfs:
patchlevel version update 0.1.3
fix potentially unaligned access to send stream
create library links to all version levels
- build:
fix compatibility with e2fsprogs 1.47.1
fix header file dependency tracking
-O2 by default
- other:
new and updated tests
ASAN and UBSAN test coverage in CI
documentation updates
fix detection of intermediate super block flags (e.g. csum change and other conversions)
- raid-stripe-tree support (still experimental):
moved under experimental build flags (mkfs, convert)
format change, removed encoding type; backward incompatible
receive dump: escape special chars in xattr names and values, and clone source path
tune change csum: fix reservation size when starting a transaction
- other:
new and updated tests
updated CI images, new reference build targets
cleanups and refactoring
subvol list: fix accidental trimming of subvolume name
check: revert checking file extent item ‘ram_bytes’
- libbtrfsutil:
patchlevel version update 1.3.2
fix accidentally closing fd passed to subvolume iterator
fix --enqueue option timeout handling
subvolume: remove support for undocumented options -c and -x, functionality disabled in kernel
- libbtrfsutil:
version 0.1.3, backward compatible
add aliases for all existing functions with unified naming scheme
updated header definitions for recently added kernel features
send: v3 supported in experimental mode
- other:
docs: manual page references, graphs, enhancements, clarifications
error handling fixes
cleanups and refactoring
mkfs: fix writing on zoned device when block-group-tree is selected
tune: fix writing on zoned device with option --convert-to-block-group-tree
- check:
more progress and error messages
unify handling of unknown command line options with other commands
subvolume delete: remove options --delete-qgroup and --no-delete-qgroup (added in 6.6.3), qgroup deletion does not always work due to delayed background processing of subvolume or set value in sysfs:ggroup/drop_subtree_threshold
- other:
misc refactoring
error handling fixes reported by gcc -fanalyzer
documentation updates
new and updated tests
mkfs: make 4k sectorsize default, recommended minimum kernel for that is 6.1 and requires subpage support on architectures with page size > 4k
subvolume create: return correct error code when a target already exists
tree-checker: dump tree block on error (btrfs-convert, …)
scrub limit: fix reporting of a limit set while there’s none
fi usage: fix reporting of unallocated data or raid56 profile without root privs due to lack of that information
- convert:
align data block group lengths to 64K
fix conversion of a large filesystem when there are partial inode items present due to caching
- other:
build fixes
updated documentation
new and updated tests
convert: raid-stripe-tree can be now enabled for the target filesystem
- mkfs:
handle lifetime of open file descriptors so it does not trigger udev that could miss to create the UUID symlinks in /dev
update warning when CPU page size does not match sector size
merge features in summary, no more distinction of incompat and runtime to match the semantics of option -O
fi show: fix recognizing raw device mapper paths
- other:
CI updates, build images updates
minor cleanups
minor sync with kernel
documentation updates, fix links to labels in included directories
new global option --dry-run, now implemented for ‘subvolume delete’
fi defrag: new option --step to defragment files in steps, report progress
balance: removed support for obsolete short syntax ‘btrfs balance /path’
mkfs: print zone count for each device in the overview
- check:
verify inline ref ordering
deprecate --clear-space-cache, moved to the ‘rescue’ group
rescue clear-space-cache: new command moved from ‘btrfs check’ implementing the same as option --clear-space-cache (to be deprecated and removed in the future)
dump-tree: output sequence number for inline refs
- fixes:
fi resize: fallback to lowest devid when 1 does not exist, previously the command would fail with “No such device”
fi usage: fix “devices 0 != 1” message and broken output on multi-device filesystem
open files in non-blocking mode when reading fsid, this could hang when trying to open fifo files or some special character devices, was observed with ‘prop set/get’
- experimental:
mkfs: parametric zone size for emulated zoned mode
- other:
cleanups refactoring
new and updated tests
CI updates
documentation updates
fix device scanning ioctl definition, accidental change to the ‘forget’ ioctl that breaks mounting multi-device filesystems
squota: change key number of EXTENT_OWNER_REF_KEY, sync with kernel 6.7-rc1
property set/get: completely skip char devices, trying to set properties and open /dev/watchdog* causes a reboot
other: build warnings, test updates, documentation updates
subvol create: accept multiple arguments
subvol delete: print the subvolume id in the output
subvol sync: check if the filesystems is still writeable so it does not wait indefinitely
device delete: add a timeout and warning when deleting multiple devices
scrub status: report limit if set in sysfs/../scrub_speed_max
scrub limit: new command to show or set the per-device scrub limits
scrub start: report the limit if set
- build:
fix CPU feature detection on aarch64
support Botan and OpenSSL (3.2+) as crypto backends
- other:
documentation updates, RTD config update
new and updated tests
CI updates
crc32c implementation speedup (3x)
- btrfstune:
be more strict about option combinations and refuse changing features from incompatible groups
metadata_uuid changes fixes
libbtrfs: fix ABI breakage introduced in 6.3.1, revert struct subvol_info and subvol_uuid_search changes
- CI updates
pull request build tests enabled
published static binaries built with backward compatibility (-march=x86-64)
- other
documentation updates
new and updated tests
experimental feature updates (json, list-chunks, checksum switch)
code refactoring
remove btrfs-fragments
- build fixes:
crc32c if PIE or relro is enabled
detect if PCLMUL feature is recognized by compiler and also detect that at runtime
check: verify metadata item level when skinny-metadata is enabled
other: minor build and docs updates
- new feature support:
raid-stripe-tree, new tree to track extent mapping for raid profiles, allows raid1*, raid0 and raid10 on zoned devices (kernel 6.7)
simple quotas, simplified accounting that does not track exclusive and shared extents (kernel 6.7)
mkfs with duplicate UUID on a single device, temp-fsid (kernel 6.7)
metadata_uuid: enhanced capabilities to repair partially updated fsid on multiple devices
- other:
updated tests and CI
sync sources with kernel
- mkfs:
add short aliases for -O specification, block-group-tree (bgt), free-space-tree (fst), raid-stripe-tree (rst)
don’t try to resize the image (namely when backed by file) when --rootdir contains sparse file larger than the image
also copy xattr/permissions/ugid/timestamps of the top --rootdir directory
add new option --device-uuid to let user specify exact uuid of the device item (only for single device filesystems)
- check:
on zoned devices, use correct super block offsets when repairing
check inline extent refs order
subvolume create: add new option --parent to create missing path components of the given path (like mkdir -p)
rescue clear-ino-cache: new command moved from ‘btrfs check’ implementing the same as option --clear-ino-cache (to be deprecated and removed in the future)
dump-tree: allow ‘-’ in tree identifier names for option -t
- btrfstune:
drop short option and add long option to enable squota
tune space reservation and batch size for block-group-tree conversion
scrub status: print correct value of “Bytes scrubbed” for unfinished runs
qgroup show: fix crash when attempting to print path of stale qgroups
- experimental features:
move build of raid-stripe-tree out for testing but it’s still considered experimental
- other:
shell completion updates
sync raid-stripe-tree code with kernel
build fixes
new and updated tests
mkfs: option -R deprecated, options unified in -O (-R still works)
mkfs: fix potential race with udev leading to EBUSY due to repeatedly opened file descriptors
- block-group-tree is out of experimental mode
available as ‘mkfs.btrfs -O block-group-tree’
btrfstune can do in-place conversion to/from (use with care)
balance: fix recognizing old and new syntax
subvol snapshot: specific error if a failure is caused by an active swapfile
tree-stats: rephrase warning when run on a mounted filesystem
completion: ‘filesystem du’ also completes files
check: fix docs, help text and warning that --force + --repair works on a mounted filesystem
build: fix static build when static libudev is available
- documentation:
more updates from wiki, developer docs, changelogs
reformatting
updates and fixes
- other:
test updates and fixes
CI cleanups and old files removed
integration with Github actions
convert: fix checksum of a block relocated from 0-1M range
qgroup show: fix formatting of limit values in json output
receive: report parent subvol UUID on errors
btrfstune: new option --convert-to-free-space-tree to convert from block-group-tree back to extent tree for block group tracking
mkfs: make option --rootdir more verbose and report start when filling from the given directory starts
- experimental:
btrfstune: checksum switch logic reimplemented, conversion of all metadata and data now works, resume from various states also supported
- other:
more CI github actions test coverage
more kernel/userspace source code sync
warning fixes
code cleanups
documentation updates
fix mkfs and others on big endian hosts
mkfs: don’t print changed defaults notice with --quiet
scrub: fix wrong stats of processed bytes in background and foreground mode
convert: actually create free-space-tree instead of v1 space cache
print-tree: recognize and print CHANGING_FSID_V2 flag (for the metadata_uuid change in progress)
other: documentation updates
add btrfs-find-root to btrfs.box
replace: properly enqueue if there’s another replace running
- other:
CI updates, more tests enabled, code coverage, badges
documentation updates
build warning fixes
receive: fix a corruption when decompressing zstd extents
subvol sync: print total number and deletion progress
accelerated hash algorithm implementations in fallback mode on x86_64
fi mkswapfile: new option --uuid
new global option --log=level to set the verbosity level directly
- other:
experimental: update checksum conversion (not usable yet)
build actually requires -std=gnu11
refactor help option formatting, auto wrap long lines
fix build with crypto libraries
CI images updated, build tests extended
fix build on old x86 architectures with builtin crypto
device stats: fix printing wrong values in tabular output
qgroup show: fix qgroup id formatting in json output
restore: fix restoring xattrs on directories
restore: don’t modify metadata in dry-run mode
balance: fix some cases wrongly parsed as old syntax
balance: warn when deprecated syntax is used
seeding: fall back to old way if sysfs device fsid is not available
convert: handle orphan file ext4 feature
- other:
sync ioctl definitions
enable github CI
update documentation
NOTE: this version breaks build of applications using ctree.h and qgroup items
filesystem df: add json output
qgroup show: add json output
new command: ‘inspect-internal map-swapfile’ to check swapfile and its swapfile_offset value used for hibernation
corrupt-block: fix parsing of option --root argument
- experimental (interfaces not finalized):
new command ‘inspect-internal list-chunks’
new group reflink, command clone
- other:
synchronize some files with kernel versions
docs updates
build: use gnu11
subvol list: fix printing of UUID
revert changes to ctree.h regarding qgroup items, breaks build of several applications
hide __init definition in kerncompat.h, may break build
revert libbtrfs changes to v6.0.2, fix remaining build problems
fi mkswapfile: fix setting size
mkfs: check zoned support of libblkid
check: improve error messages for mismatched references
- other:
pass CFLAGS to static build
documentation updates
fi usage: in tabular output, print total size and slack size
- mkfs:
option -O now accepts values from -R to unify the interface (-R will continue to work)
zone reset and discard is done in parallel on all devices
removed option --leafsize, deprecated long time ago
corrupt-block: recalculate checksum when changing generation
- fixes:
convert: fix reserved range detection and overlaps
mkfs: fix creating files with reserved inode numbers with --rootdir
receive: escape filenames in command attributes
fix extent buffer leaks after transaction abort
- experimental:
mkfs: support for block-group-tree (kernel 6.1)
fsverity in send (protocol v3, WIP)
btrfstune -b converts to block-group-tree
- other:
cleanups, refactoring
new and updated tests
update documentation
send: minor speed up for v2 due to increased buffer size
resize: invalid command line options fail with error code
- quota rescan:
add long options --status and --wait
new option to wait but don’t start rescan
qgroup show: print path by default, updated format
qgroup: new subcommand clear-stale, remove qgroups without their subvolumes
- experimental:
add warnings to commands that have it enabled (mkfs, image, btrfstune)
- other:
documentation, help text, error message updates
- fixes:
resize cancel did not work in some cases
fix fileattr stream command format and add workaround when it cannot be applied
properly handle degraded raid56 reads
fi defrag: fix verbosity, don’t print file names by default
receive: fix silent data loss after fall back from encoded write
fi mkswapfile: new command to create a formatted swapfile in one go
send: support protocol version 2
fi show: print all missing devices
device stats: add tabular output
replace: add alias to device group (device replace)
check: validate free space tree items
- fixes:
convert: support large filesystems (block count > 32bit)
recognize filesystems with verity enabled
mkfs and DUP could write out of order, fix it for zoned mode
- build:
optional support for LZO and ZSTD in receive
compatibility with glibc 2.36 (mount.h)
add fallbacks for new GCC builtins
- other:
corrupt-block: target specific items, offsets
documentation updates, new pages from wiki
new tests
fix memory leaks (extent buffer, path)
check: verify block device size vs item
rescue fix-device-size: allow to shrink device item
receive: fix crash on wrong pointer free()
experimental: support for block-group-tree
documentation updates
new tests
- fixes:
dump-tree: don’t print trailing zeros in checksums
recognize paused balance as exclusive operation state, allow to start device add
convert: properly initialize target filesystem label
mkfs: don’t create free space bitmaps for empty filesystem
restore: make lzo support build-time configurable, print supported compression in help text
update kernel-lib sources
- other:
documentation updates, finish conversion to RST, CHANGES and INSTALL could be included into RST
fix build detection of experimental mode
new tests
convert: fix self reference of toplevel directory
build: make kernel lib headers compatible with C++
zoned mode: verify minimum zone size 4MiB
libbtrfs: cleanups, merge headers and remove declarations of unexported symbols
other: documentation updates
- check:
repair wrong num_devices in superblock
recognize overly long xattr names
fix wrong total bytes check for seed device
auto-repair on read on RAID56
property set: unify handling of empty value to mean default, changed meaning for property ‘compression’ to allow reset to default and to set NOCOMPRESS, since kernel 5.14
- fixes:
dump-tree: print fs-verity items
fix location of system chunk on zoned filesystem
do not allow setting seeding flag on a filesystem with dirty log
mkfs and subpage support: use sectorsize as nodesize fallback for mixed profiles
preparatory work for extent tree v2, global roots
- experimental feature (unstable interface, not built by default,
do not use for production) * btrfstune: option --csum to switch checksum algorithm
- other:
cleanups, refactoring
update documentation build, remove asciidoc leftovers
update fssum to consider xattrs
add fsstress
rescue: new subcommand clear-uuid-tree to fix failed mount due to bad uuid subvolume keys, caught by tree-checker
fi du: skip inaccessible files
prop: properly resolve to symlink targets
send, receive: fix crash after parent subvolume lookup errors
- build:
fix build on 5.12+ kernels due to changes in linux/kernel.h
fix build on musl with old kernel headers
- other:
error handling fixes, cleanups, refactoring
extent tree v2 preparatory work
lots of RST documentation updates (last release with asciidoc sources), https://btrfs.readthedocs.io
mkfs: support DUP on metadata on zoned devices
subvol delete: drop warning for root when search ioctl fails
fix --init-csum-tree to not create checksums for extents that are not supposed to have them
add check for metadata item levels
add udev rule for zoned devices as they require mq-deadline
build: fix redefinition of ALIGN on mixed old/new kernel/userspace (5.11)
typo fixes
new tests
CI targets updated
mkfs: fix detection of profile type for zoned mode when creating DUP
add missing stub for zoned mode helper when zoned mode not enabled
fix 64bit types on MIPS and PowerPC
improved zoned mode support autodetection, for systems with existing blkzone.h header but missing support for zone capacity
doc updates
test updates
- mkfs: new defaults!
no-holes
free-space-tree
DUP for metadata unconditionally
- libbtrfsutil
add missing profile defines
- libbtrfs
minimize its impact on the other code, refactor and separate implementation where needed, cleanup afterwards, reduced header exports
- documentation
introduce sphinx build and RST versions of manual pages, will become the new format and replace asciidoc
- fixes:
fix warning regarding v1 space cache when only v2 (free space tree) is enabled
- other
lots of cleanups and refactoring
zoned mode uses direct io for file backed images
new and updated tests
fi usage: fix wrongly reported space of used or unallocated space
fix detection of block device discard capability
check: add more sanity checks for checksum items
build: make sphinx optional backend for documentation
- convert:
new option --uuid to copy, generate or set a given uuid
improve output
- mkfs:
allow to create degenerate raid0 (on 1 device) and raid10 (on 2 devices)
- image:
improved error messages
fix some alignment of restored image
subvol delete: allow to delete by id when path is not resolvable
- check:
require alignment of nodesize for 64k page systems
detect and fix invalid block groups
- libbtrfs (deprecated):
remove most exported symbols, leave only a few that are used by snapper
no version change (still 0.1)
remove btrfs-list.h, btrfsck.h
- fixes:
reset generation of space v1 if v2 is used
fi us: don’t wrongly report missing device size when partition is not readable
- other:
build: experimental features
build: better detection of 64bit timestamp support for ext4
corrupt-block: block group items
new and updated tests
refactoring
- experimental features:
new image dump format, with data
defrag: fix parsing of compression (option -c)
add workaround for old kernels when reading zone sizes
let only check and restore open the fs with transid failures, namely preventing btrfstune to do so
convert: --uuid copy does not fail on duplicate uuids
properly detect non-zoned devices in emulation mode
properly create quota tree
raid1c3/4 also excluded from unsupported profiles
use sysfs-based detection of device discard capability, fix mkfs-time trim for non-standard devices
mkfs: fix creation of populated filesystem with free space tree
detect multipath devices (needs libudev)
replace start: add option -K/--nodiscard, similar to what mkfs or device add has
dump-tree: print complete root_item
mkfs: add option --verbose
sb-mod: better help, no checksum calculation on read-only actions
print more information (regarding send and receive)
print warning if read-write subvolume has received_uuid set
add parameter -f to force changes
changing ro->rw switch now needs -f if subvolume has received_uuid set, (see documentation)
optional libudev (on by default)
remove deprecated support for CREATE_ASYNC bit for subvolume ioctl
CI updates
new and updated tests
restore: remove loop checks for extent count and directory scan
inspect dump-tree: new options to print node (--csum-headers) and data checksums (--csum-items)
- fi usage:
print stripe count for striped profiles
print zoned information: size, total unusable
mkfs: print note about sha256 accelerated module loading issue
check: ability to reset dev_item::bytes_used
- fixes
detect zoned kernel support at run time too
exclusive op running check return value
fi resize: support cancel (kernel 5.14)
device remove: support cancel (kernel 5.14)
- documentation about general topics
compression
zoned mode
storage model
hardware considerations
- other
libbtrfsutil API overview
help text fixes and updates
hash speedtest measure time, cycles using perf and print throughput
build: fix build on musl libc due to missing definition of NAME_MAX
batch more work into one transaction when clearing v1 free space inodes
detect directories with wrong number of links
libbtrfsutil: fix race between subvolume iterator and deletion
mkfs: be more specific about supported profiles for zoned device
documentation updates
libbtrfsutil: relicensed to LGPL v2.1+
mkfs: zoned mode support (kernel 5.12+)
fi df: show zone_unusable per profile type in zoned mode
fi usage: show total amount of zone_unusable
fi resize: fix message for exact size
image: fix warning and enlarge output file if necessary
- core
refactor chunk allocator for more modes
implement zoned mode support: allocation and writes, sb log
crypto/hash refactoring and cleanups
refactoring and cleanups
- other
test updates
CI updates
travis-ci integration disabled
docker images updated, more coverage
incomplete build support for Android removed
- doc updates
chattr mode m for ‘NOCOMPRESS”
swapfile used from fstab
how to add a new export to libbtrfsutil
update status of mount options since 5.9
build: fix missing symbols in libbtrfs
mkfs: check for minimal number of zones
check: fix warning about cache generation when free space tree is enabled
fix superblock write in zoned mode on 16K pages
fix device path canonicalization for device mapper devices
receive: remove workaround for setting capabilities, all stable kernels have been patched
receive: fix duplicate mount path detection
rescue: new subcommand create-control-device
device stats: minor fix for plain text format output
build: detect if e2fsprogs support 64bit timestamps
build: drop libmount, required functionality has been reimplemented
mkfs: warn when raid56 is used
balance convert: warn when raid56 is used
- other
new and updated tests
- documentation updates
seeding device
raid56 status
- CI updates
docker images for various distros
properly format checksums when a mismatch is reported
check: fix false alert on tree block crossing 64K page boundary
refuse to convert filesystem with ‘needs_recovery’
update documentation to require fsck before conversion
balance convert: fix raid56 warning when converting other profiles
fi resize: improved summary
build: fix checks and autoconf defines
fix symlink paths for CI support scripts
updated tests
- scrub status:
print percentage of progress
add size unit options
fi usage: also print free space from statfs
convert: copy full 64 bit timestamp from ext4 if available
- check:
add ability to repair extent item generation
new option to remove leftovers from inode number cache (-o inode_cache)
check for already running exclusive operation (balance, device add/…) when starting one
preliminary json output support for ‘device stats’
- fixes:
subvolume set-default: id 0 correctly falls back to toplevel
receive: align internal buffer to allow fast CRC calculation
logical-resolve: distinguish -o subvol and bind mounts
build: new dependency libmount
- other
doc fixes and updates
new tests
ci on gitlab temporarily disabled
debugging output enhancements
static build works again
add a way to test static binaries with the testsuite
clarify scrub docs
update dependencies, minimum version for libmount is 2.24, this may change in the future
- mkfs:
switch default to single profile for multi-device filesystem, up to now it was raid0 that may not be simple to convert to some other profile as raid0 needs a workspace on all device for that
new option -R for run-time options (eg. mount time enabled), now understands free-space-tree
- subvolume delete:
refuse to delete the default subvolume (kernel will not allow that but the error reason is not obvious)
warn on EPERM, eg. if send is on progress on the subvolume
- convert:
fix 32bit overflows on large filesystems
improved error handling and error messages
check free space taking fragmentation into account
- check:
detect and repair wrong inode generation
minor improvement in error reporting on roots
- libbtrfsutils: follow main package versioning (5.9)
add pkg-config file definitions
python-btrfsutil: follow main package versioning (5.9)
inspect tree-stats: print node counts for each level, fanout
- other:
- docs:
remove obsolete mount options (alloc_start, subvolrootid)
deleting default subvolume is not permitted
updated or fixed tests
.editorconfig updates
move files to kernel-shared/
- CI:
updated to use zstd 1.4.5
fix reiserfs build
more builds with asan, ubsan
sb-mod updates
- build:
print .so versions of libraries in configure summary
- mkfs:
new option to enable features otherwise enabled at runtime, now implemented for quotas, ‘mkfs.btrfs -R quota’
fix space accounting for small image, DUP and --rootdir
option -A removed
check: detect ranges with overlapping csum items
fi usage: report correct numbers when plain RAID56 profiles are used
convert: ensure the data chunks size never exceed device size
libbtrfsutil: update documentation regarding subvolume deletion
build: support libkcapi as implementation backend for cryptographic primitives
core: global options for verbosity (-v, -q), subcommands -v or -q are aliases and will continue to work but are considered deprecated, current command output is preserved to keep scripts working
- other:
block group code cleanups
build warning fixes
more files moved to kernel-shared
btrfs-debugfs ported to python 3
documentation updates
new tests
inspect logical-resolve: support LOGICAL_INO_V2 as new option ‘-o’, helps advanced dedupe tools
inspect: user larger buffer (64K) for results
subvol delete: support deletion by id (requires kernel 5.7+)
- libbtrfsutil:
support subvolume deletion by id
bump version to 1.2
library symbols are now versioned
dump-tree: new option --hide-names, replace any names (file, directory, subvolume, xattr) in the output with stubs
convert: warn if the filesystem is not mountable on the machine
- fixes:
restore: proper mirror iteration on decompression error
restore: make symlink messages less noisy
check: handle holes at the beginning or end of file
fix xxhash output on big endian machines
receive: fix lookup of subvolume by uuid in case it was already received before
- other:
new and updated tests
add missing binaries in exported testsuite
docs updates
remove obsolete files
move files to more appropriate directories
fixes reported by valgrind
many typos fixed
print warning when multiple block group profiles exist, update ‘fi usage’ summary, add docs to manual page explaining the situation
build: optional support for libgcrypt or libsodium, providing hash implementations
fixed, updated and new tests
cleanups
updated docs
- support new hash algorithms (kernel 5.5):
mkfs.btrfs and btrfs-convert with --csum, crc32c, xxhash, sha256, blake2
mkfs: support new raid1c3 and raid1c4 block group profiles (kernel 5.5)
- check:
--repair delays start with a warning, can be skipped using --force
enhanced detection of inode types from partial data, more options for repair
receive: fix quiet option
image: speed up chunk loading
- fi usage:
sort devices by id
print ratio of used/total per block group type
rescue zero-log: reset the log pointers directly, avoid reading some other potentially damaged structures
new make target install-static to install only static binaries/libraries
- other
docs updates
new tests
cleanups and refactoring
build: fix docbook5 build
check: do extra verification of extent items, inode items and chunks
qgroup: return ENOTCONN if quotas not running (needs updated kernel)
other: various test fixups
- mkfs:
new option to specify checksum algorithm (only crc32c)
fix xattr enumeration
dump-tree: BFS (breadth-first) traversal now default
libbtrfsutil: remove stale BTRFS_DEV_REPLACE_ITEM_STATE_x defines
ci: add support for gitlab
- other:
preparatory work for more checksum algorithms
docs update
switch to docbook5 backend for asciidoc
fix build on uClibc due to missing backtrace()
lots of printf format fixups
libbtrfs: fix link breakage due to missing symbols
subvol show: print qgroup information when available
- scrub:
status: show ETA, revamp the whole output
fix reading/writing of last position on resume/cancel, potentially skipping part of the filesystem on next resume
dump-tree: add new option --noscan to use only devices given on the command line
all-in-one binary (busybox style) with mkfs.btrfs, btrfs-image, btrfs-convert, btrfstune
image: fix hang when there are more than 32 cpus online and compression is requested
convert: fix some false ENOSPC errors when --rootdir is used
build: fix gcc9 warnings
- core changes
command handling cleanups
dead code removal
cmds-* files moved to cmds/
other shared userspace files moved to common/
utils.c split into more files
preparatory work for more output formats
libbtrfsutil: fix unaligned access
- other
new and updated tests
fix tests so CI passes again
sb-mod can modify more superblock items
scrub status: fix ETA calculation after resume
check: fix crash when using -Q
restore: fix symlink owner restoration
mkfs: fix regression with mixed block groups
core: fix commit to process all delayed refs
minor cleanups
test updates
fix false report of wrong byte count for orphan inodes
option -E was not handled correctly
new check and repair for root item generation
balance: check for full-balance before background fork
mkfs: check that total device size does not overflow 16EiB
dump-tree: print DEV_STATS key type
new and updated tests
doc fixups and updates
(version 5.0 skipped)
- check:
repair: flush/FUA support to avoid breaking metadata COW
file extents repair no longer relies on data in extent tree
lowmem: fix false error reports about gaps between extents
add inode mode check and repair for various objects
add check for invalid combination of nocow/compressed extents
device scan: new option to forget scanned devices
mkfs: use same chunk size as kernel for initial creation
dev-replace: better report when other exclusive operation is running
help: for syntax errors on command line, print only the relevant messages, not the whole help text
- receive:
new option for quiet mode
on -vv print information about written ranges
fix endless loop with --dump on an invalid stream
defrag: able open files in RO mode (needs kernel support to work)
dump-tree: --block can be specified multiple times
libbtrfsutil: fix: don’t close fd on error in btrfs_util_subvolume_id_fd
- core:
add sync before superblock write
better error handling on the transaction commit path
try to find best copy when reading tree blocks
update backup roots on commit transaction
- other:
fuzz tests pass and are enabled in CI
cleanups
new tests
convert and mkfs will try to use optimized crc32c
fi show: accept a file-backed image
fi show: fix possible crash when device is deleted in parallel
support extra flags for python bindings
separate LDFLAGS for libbtrfsutil
space reservation fixes or debugging improvements
V0 extent code removed
more tests and cleanups
- new feature: metadata uuid
lightweight change of UUID without rewriting all metadata (incompatible change)
done by btrfstune -m/-M
needs kernel support, 5.0+
- image:
fix block groups when restoring from multi-device image
only enlarge result image if it’s a regular file
- check
more device extent checks and fixes
can repair dir item with mismatched hash
mkfs: uuid tree created with proper contents
fix mount point detection due to partial prefix match
- other:
new tests
libbtrfsutil: fix tests if kernel lacks support for new subvolume ioctls
build fixes
doc fixes
libbtrfs: fix build of external tools due to missing symbols
ci: enable library test
ci: use newer distro for builds
dump-super: minor output fixup
revert fix for prefix detection of receive path, this is temporary and unbreaks existing user setups
check: support repair of fs with free-space-tree feature
- core:
port delayed ref infrastructure from kernel
support write to free space tree
dump-tree: new options for BFS and DFS enumeration of b-trees
quota: rescan is now done automatically after ‘assign’
btrfstune: incomplete fix to uuid change
subvol: fix 255 char limit checks
completion: complete block devices and now regular files too
- docs:
ship uncompressed manual pages
btrfsck uses a manual page link instead of symlink
- other
improved error handling
docs
new tests
big-endian builds fail due to bswap helper clashes
‘swap’ macro is too generic, renamed to prevent build failures
minor version update to 1.1.0
fix default search to top=0 as documented
rename ‘async’ to avoid future python binding problems
add support for unprivileged subvolume listing ioctls
added tests, API docs
lot of typos fixed
warning cleanups
doc formatting updates
CI tests against zstd 1.3.7
- check
many lowmem mode improvements
properly report qgroup mismatch errors
check symlinks with append/immutable flags
- fi usage
correctly calculate allocated/unallocated for raid10
minor output updates
- mkfs
detect ENOSPC on thinly provisioned devices
fix spurious EEXIST during directory traversal
restore: fix relative path for restore target
dump-tree: print symbolic tree names for backrefs
send: fix regression preventing send -p with subvolumes mounted on “/”
corrupt-tree: refactoring and command line updates
- build
make it work with e2fsprogs < 1.42 again
restore support for autoconf 2.63
detect if -std=gnu90 is supported
- other
new tests
cleanups
add ability to fix wrong ram_bytes for compressed inline files
beautify progress output
btrfstune: allow to continue uuid change after unclean interruption
detect overlapping chunks
chunk loading error handling
don’t crash with unexpected root refs to extents
relax option parsing again to allow mixing options and non-options arguments
fix qgroup rescan status reporting
drop obsolete dir-test
new configure option to disable building of tools
add compatibility options --disable-static and --disable-shared
cleanups and preparatory work
new test images
- libbtrfsutil - new LGPL library to wrap userspace functionality
- several ‘btrfs’ commands converted to use it:
properties
filesystem sync
subvolume set-default/get-default/delete/show/sync
python bindings, tests
- build
use configured pkg-config path
CI: add python, musl/clang, built dependencies caching
convert: build fix for e2fsprogs 1.44+
don’t install library links with wrong permissions
- fixes
prevent incorrect use of subvol_strip_mountpoint
dump-super: don’t verify csum for unknown type
convert: fix inline extent creation condition
- check:
lowmem: fix false alert for ‘data extent backref lost for snapshot’
lowmem: fix false alert for orphan inode
lowmem: fix false alert for shared prealloc extents
- mkfs:
add UUID and otime to root of FS_TREE - with the uuid, snapshots will be now linked to the toplevel subvol by the parent UUID
don’t follow symlinks when calculating size
pre-create the UUID tree
fix --rootdir with selinux enabled
dump-tree: add option to print only children nodes of a given block
image: handle missing device for RAID1
- other
new tests
test script cleanups (quoting, helpers)
tool to edit superblocks
updated docs
remove obsolete tools: btrfs-debug-tree, btrfs-zero-log, btrfs-show-super, btrfs-calc-size
sb-mod: new debugging tool to edit superblock items
mkfs: detect if thin-provisioned device does not have enough space
check: don’t try to verify checksums on metadata dump images
build: fail documentation build if xmlto is not found
build: fix build of btrfs.static
mkfs --rootdir reworked, does not minimize the final image but can be still done using a new option --shrink
fix allocation of system chunk, don’t allocate from the reserved area
- other
new and updated tests
cleanups, refactoring
doc updates
fix build on musl
support asciidoctor for doc generation
sync some code with kernel
check: move code to own directory, split to more files
more build tests in travis
tests now pass with asan and ubsan
testsuite can be exported and used separately
build: libzstd now required by default
check: more lowmem mode repair enhancements
subvol set-default: also accept path
prop set: compression accepts no/none, same as “”
filesystem usage: enable for filesystem on top of a seed device
rescue: new command fix-device-size
- other
new tests
cleanups and refactoring
doc updates
dump-tree: print times of root items
check: fix several lowmem mode bugs
convert: fix rollback after balance
new and updated tests, enabled lowmem mode in CI
docs updates
fix travis CI build
build fixes
cleanups
convert: reiserfs support
check: new option --force to allow check of a mounted filesystem (no repair)
mkfs: --rootdir will now copy special files
dump-tree: minor output changes
inspect rootid: accept file as argument
dev usage: don’t calculate slack space for missing devices
fi du: don’t print error on EMPTY_SUBVOL (inode number 2)
- build:
fixed support for sanitization features on gcc (tsan, asan, ubsan)
fix PIE build
- other:
misc cleanups and stability fixes
travis CI enhancements
new tests, fuzzed images
testsuite cleanups
image: speed up generating the sanitized names, do not generate unprintable chars
completion: add missing commands, better mount point detection
restore: add zstd support; libzstd detected automatically, will be requested by default in the future, or can be configured out
misc fixes found by sparse
doc enhancements, ioctl manual page started
updated and new tests
build fixes
don’t list toplevel subvolume among deleted (broken since 4.8.3)
minor adjustments of uuid print format
fix swapped behaviour of --commit-each and --commit-after
fix potentially lost sync if subvolumes are from different filesystems
check: add cache for metadata blocks, should improve performance
new tests, testsuite updates
doc updates
cleanups
check: fix --force, wrong check for a mounted block device
build: fix --with-convert parsing
subvol list: don’t list TOPLEVEL
other: update tests
subvol show: new options --rootid, --uuid to show subvol by the given spec
convert: progress report fixes, found by tsan
image: progress report fixes, found by tsan
fix infinite looping in find-root, or when looking for free extents
- other:
code refactoring
docs updates
build: ThreadSanitizer support
tests: stricter checks for mounted filesystem
fix cross-compilation
use gnu90 explicitly
dump-tree: more relaxed checks so -b can print block on a damaged fs
convert: fix the 1MB range exclusion
check: more dir_item hash checks
added missing getopt spec for some options
doc fixes
cleanups
test updates
receive: fix handling empty stream with -e (multi-stream)
send dump: fix printing long file names
stability fixes for: dump-super, print-tree, check
option parser updates: global options are parsed before the subcommand name (old xfstests will fail)
new and updated tests
documentation updates
image: restoring from multiple devices
dev stats: make --check option work
check: fix false alert with extent hole on a NO_HOLE filesystem
check: lowmem mode, fix false alert in case of mixed inline and compressed extent
convert: work with large filesystems (many TB)
convert: fix overwriting of eb header flags
convert: do not clear NODATASUM flag in inodes when run with --no-datasum
docs updates
build: sync Android.mk with Makefile
new tests
fix 008 and 009, shell quotation mistake
send: dump output fixes: missing newlines
check: several fixes for the lowmem mode, improved error reporting
- build
removed some library deps for binaries that not use them
ctags, cscope
split Makefile to the autotool generated part and the rest, not needed to autogen.sh after adding a file
shared code: sync easy parts with kernel sources
- other
lots of cleanups
source file reorganization: convert, mkfs, utils
lots of spelling fixes in docs, other updates
more tests
receive: handle subvolume in path clone
convert: rollback fixed (rewrite was needed to address previous design issues)
build: fix build of 3rd party tools, missing <linux/sizes.h>
dump-tree: print log trees
new and updated tests
check: lowmem mode fix for false alert about lost backrefs
convert: minor bugfix
library: fix build, missing symbols, added tests
check: many lowmem mode updates
send: use splice syscall to copy buffer from kernel
receive: new option to dump the stream in textual form
- convert:
move sources to own directory
prevent accounting of blocks beyond end of the device
make it work with 64k sectorsize
mkfs: move sources to own directory
defrag: warns if directory used without -r
- dev stats:
new option to check stats for non-zero values
add long option for -z
library: version bump to 0.1.2, added subvol_uuid_search2
- other:
cleanups
docs updates
use correct inode number for lost+found files
lowmem mode: fix false alert on dropped leaf
size reports: negative numbers might appear in size reports during device deletes (previously in EiB units)
mkfs: print device being trimmed
defrag: v1 ioctl support dropped
quota: print message before starting to wait for rescan
qgroup show: new option to sync before printing the stats
corrupt-block enhancements
backtrace and co. cleanups
doc fixes
error handling improvements all over the place
new fuzzed images, test updates
doc fixups
minor cleanups and improvements
kernel library helpers moved to own directory
qgroup: fix regression leading to incorrect status after check, introduced in 4.7
32bit builds fixed
build without backtrace support fixed
convert: also convert file attributes
convert: fix wrong tree block alignment for unaligned block group
check: quota verify fixes, handle reloc tree
build: add stub for FIEMAP_EXTENT_SHARED, compiles on ancient kernels
build: add stub for BUILD_ASSERT when ioctl.h is included
dump-tree: don’t crash on unrecognized tree id for -t
add more ioctl tests
convert: more symlink tests, attribute tests
quota verify for reloc tree
other cleanups
support for clearing space cache (v1)
size reduction of inode backref structure
fix handling of multiple snapshots (-p and -c options)
transfer buffer increased (should reduce number of context switches)
reuse existing file for output (-f), eg. when root cannot create files (NFS)
print missing items for various structures
new: dev stats, balance status item
sync key names with kernel (the persistent items)
subvol show: now able to print the toplevel subvolume -- the creation time might be wrong though
store the creation time of toplevel root inode
print UUID in the summary
build: travis CI for devel
lots of cleanups and refactoring
switched to on-stack path structure
fixes from coverity, asan, ubsan
new tests
updates in testing infrastructure
fixed convert test 005
check: support for clearing space cache v2 (free-space-tree)
more sanity checks (with tests), cleanups
fix for fstests/btrfs/038 and btrfs/117 failures
fix compilation of standalone ioctl.h, pull NULL definition
fix library link errors introduced in 4.8.3
add more fuzzed images from bugzilla
add bogus send stream checks
fixups and enhancements for CI environment builds
misc refinements and updates of testing framework
move sources for btrfs-image to own directory
deprecated and not build by default: btrfs-calc-size, btrfs-show-super
docs updates
receive: fix detection of end of stream (error reported even for valid streams)
added test for the receive bug
fix linking of library-test
convert: fix creating discontig extents
check: speed up traversing heavily reflinked extents within a file
check: verify qgroups of higher levels
check: repair can now fix wrong qgroup numbers
balance: new option to run in the background
defrag: default extent target size changed to 32MiB
du: silently skip non-btrfs dirs/files
documentation updates: btrfs(5), btrfs(8), balance, subvolume, scrub, filesystem, convert
- bugfixes:
unaligned access (reported for sparc64) in raid56 parity calculations
use /bin/bash
other stability fixes and cleanups
more tests
new optional mode: optimized for low memory usage (memory/io tradeoff)
--mode=lowmem, not default, still considered experimental
does not work with --repair yet
convert: regression fix, ext2_subvol/image rw permissions
two-staged creation, partially created filesystem will not be recognized
improved error handling (fewer BUG_ONs)
convert: preparation for more filesystems to convert from
documentation updates: quota, qgroup
message updates
more tests
more build options, enhanced debugging
urgent fix: false report of backref mismatches; do not --repair last unaffected version 4.6.1 (code reverted to that state)
added more sanity checks for various structures
testing images added
build: udev compatibility: do not install .rules on version < 190
dump-super: do not crash on garbage value in csum_type
minor improvements in messages and help strings
filesystem features
fixed free space tree compat status
check: low-mem mode: handle partially dropped snapshots
dump-super: consolidate options for superblock copy
tree-stats: check mount status
subvol delete: handle verbosity option
defrag: print correct error string
mkfs: fix reading rotational status
UBSAN build option
documentation updates
enhanced tests: convert, fuzzed images, more tools to run on fuzzed images
- convert - major rewrite:
fix a long-standing bug that led to mixing data blocks into metadata block groups
the workaround was to do full balance after conversion, which was recommended practice anyway
explicitly set the lowest supported version of e2fstools to 1.41
provide and install udev rules file that addresses problems with device mapper devices, renames after removal
send: new option: quiet
dev usage: report slack space (device size minus filesystem area on the dev)
image: support DUP
build: short options to enable debugging builds
- other:
code cleanups
build fixes
more tests and other enhancements
filesystem resize: negative resize argument accepted again
qgroup rescan: fix skipping when rescan is in progress
mkfs: initialize stripesize to correct value
testsuite updates, mostly convert tests
btrfs-device, btrfs-restore manual pages enhanced
misc fixups
- New/moved commands:
btrfs-show-super -> btrfs inspect-internal dump-super
btrfs-debug-tree -> btrfs inspect-internal dump-tree
- New commands:
btrfs filesystem du - calculate disk usage, including shared extents
- Enhancements:
device delete - delete by id (needs kernel support, not merged to 4.6)
check - new option to specify chunk root
debug-tree/dump-tree - option -t understands human readable name of the tree (along numerical ids)
btrfs-debugfs - can dump block group information
- Bugfixes:
all commands should accept the option separator “--”
several fixes in device scan
restore works on filesystems with sectorsize > 4k
debug-tree/dump-tree - print compression type as string
subvol sync: fix crash, memory corruption
argument parsing fixes: subvol get-default, qgroup create/destroy/ assign, inspect subvolid-resolve
check for block device or regular file in several commands
- Other:
documentation updates
manual pages for the moved tools now point to btrfs-filesystem
testsuite updates
mkfs: allow DUP on multi-device filesystems
bugfixes: build fixes, assorted other fixes
new/moved command: btrfs-calc-stats -> btrfs inspect tree-stats
check: fix false alert for metadata blocks crossing stripe boundary
check: catch when qgroup numbers mismatch
check: detect running quota rescan and report mismatches
balance start: add safety delay before doing a full balance
filesystem sync: is now silent
filesystem show: don’t miss filesystems with partially matching uuids
dev ready: accept only one argument for device
dev stats: print “devid:N” for a missing device instead of “(null)”
lowest supported version of e2fsprogs is 1.41
minor cleanups, test updates
ioctl: fix unaligned access in buffer from TREE_SEARCH; might cause SIGBUS on architectures that do not support unaligned access and do not perform any fixups
improved validation checks of superblock and chunk-related structures
subvolume sync: fix handling of -s option
balance: adjust timing of safety delay countdown with --full-balance
rescue super-recover: fix reversed condition check
check: fix bytes_used accounting
documentation updates: mount options, scrub, send, receive, select-super, check, mkfs
testing: new fuzzed images, for superblock and chunks
- User visible changes:
mkfs.btrfs --data dup
People asked about duplicating data on a single device for a long time. There are no technical obstacles preventing that, so it got enabled with a warning about potential dangers when the device will not do the duplicated copies. See mkfs.btrfs section DUP PROFILES ON A SINGLE DEVICE.
- support balance filters added/enhanced in linux 4.4
usage=min..max -- enhanced to take range
stripes=min..max -- new, filter by stripes for raid0/10/5/6
limit=min..max -- enhanced to take range
Note: due to backward compatibility, the range maximum for ‘usage’ is not inclusive as for the others, to keep the same behaviour as usage=N .
manual pages enhanced (btrfs, mkfs, mount, filesystem, balance)
error messages updates, rewordings -- some fstests may break due to that
added support for free-space-tree implementation of space cache -- this requires kernel 4.5 and is not recommended for non-developers yet
btrfs filesystem usage works with mixed blockgroups
- Other:
installation to /usr/local -- this has unintentionally changed during conversion to autotools in 3.19
check: fix a false alert where extent record has wrong metadata flag
improved stability on fuzzed/crafted images when reading sys array in superblock
build: the ‘ar’ tool is properly detected during cross-compilation
debug-tree: option -t understands ids for tree root and chunk tree
preparatory work for btrfs-convert rewrite
sparse, gcc warning fixes
more memory allocation failure handling
cleanups
more tests
- Bugfixes:
chunk recovery: fix floating point exception
chunk recovery: endianness bugfix during rebuild
mkfs with 64K pages and nodesize reported superblock checksum mismatch
check: properly reset nlink of multi-linked file
find-root: don’t skip the first chunk
free-space-tree compat bits fix
build: target symlinks
documentation updates
test updates
- mkfs
mixed mode is not forced for filesystems smaller than 1GiB
mixed mode broken with mismatching sectorsize and nodesize, fixed
print version info earlier
print devices sorted by id
do not truncate target image with --rootsize
- filesystem usage:
don’t print global block reserve
print device id
minor output tuning
other cleanups
- calc-size:
div-by-zero fix on an empty filesystem
fix crash
- bugfixes:
more superblock sanity checks
consistently round size of all devices down to sectorsize
misc leak fixes
convert: don’t try to rollback with a half-deleted ext2_saved subvolume
- other:
check: add progress indicator
scrub: enhanced error message
show-super: read superblock from a given offset
add README
docs: update manual page for mkfs.btrfs, btrfstune, balance, convert and inspect-internal
build: optional build with more warnings (W=…)
build: better support for static checkers
build: html output of documentation
pretty-print: last_snapshot for root_item
pretty-print: stripe dev uuid
error reporting wrappers, introduced and example use
refactor open_file_or_dir
other docs and help updates
- testing:
test for nodes crossing stripes
test for broken ‘subvolume sync’
basic tests for mkfs, raid option combinations
basic tests for fuzzed images (check)
command instrumentation (eg valgrind)
print commands if requested
add README for tests
device delete: recognize ‘missing’ again
mkfs: long names are not trimmed when doing ssd check
support partitioned loop devices
replace several mallocs with on-stack variables
more memory allocation failure handling
add tests for bugs fixed
cmd-device: switch to new message printing helpers
minor code cleanups
- enhancements:
mkfs: do not create extra single chunks on multiple devices
resize: try to guess the minimal size, ‘inspect min-dev-size’
qgroup assign: add option to schedule rescan
chunk-recover: be more verbose about the scanning process
- fixes:
- check:
find stripes crossing stripe boundary -- created by convert
print correct range for file hole when there are no extents and learn how to fix it
replace: more sanity checks
convert: concurrency fixes related to reporting progress
find-root: option -a will not skip the current root anymore
subvol list: fix occasional crash
do not create stripes crossing stripe boundary
- build:
fixes for musl libc
preliminary support for android (not working yet, more code changes needed)
new EXTRA_CFLAGS and EXTRA_LDFLAGS
- other:
lots of cleanups
tests: lots of updates, new tests, framework improvements
documentation updates
debugging: print-tree shows stripe length
if nodesize was 64k, any metadata block was reported as crossing, this leads to mkfs failure for example due to “no free blocks found”
for other nodesizes, if the end of the metadata block was 64k aligned, it was incorrectly reported by fsck
convert: don’t write uninitialized data to image
don’t loop with option -t0
don’t create threads if compression is not requested
other: minor cleanups
filesystem label: use fallback if the label ioctl is not available
convert: check nodesize constraints against command line features (-O)
scrub: report status ‘running’ until all devices are finished
device scanning might crash in some scenarios
filesystem usage: print summary for non-root users
subvol sync: make it actually work again: it’s been broken since 4.1.2, due to a reversed condition it returned immediately instead of waiting
scanning: do not scan already discovered filesystems (minor optimization)
convert: better error message in case the filesystem is not finalized
restore: off-by-one symlink path check fix
- Bugfixes:
fsck.btrfs: no bash-isms
bugzilla 97171: invalid memory access (with tests)
- receive:
cloning works with --chroot
capabilities not lost
mkfs: do not try to register bare file images
option --help accepted by the standalone utilities
- Enhancements:
corrupt block: ability to remove csums
- mkfs:
warn if metadata redundancy is lower than for data
options to make the output quiet (only errors)
mixed case names of raid profiles accepted
rework the output:
more comprehensive, ‘key: value’ format
- subvol:
- show:
print received uuid
update the output
new options to specify size units
sync: grab all deleted ids and print them as they’re removed, previous implementation only checked if there are any to be deleted - change in command semantics
scrub: print timestamps in days HMS format
- receive:
can specify mount point, do not rely on /proc
can work inside subvolumes
send: new option to send stream without data (NO_FILE_DATA)
convert: specify incompat features on the new fs
- qgroup:
show: distinguish no limits and 0 limit value
limit: ability to clear the limit
help for ‘btrfs’ is shorter, 1st level command overview
debug tree: print key names according to their C name
- New:
rescue zero-log
- btrfstune:
rewrite uuid on a filesystem image
new option to turn on NO_HOLES incompat feature
- Deprecated:
standalone btrfs-zero-log
- Other:
- testing framework updates
uuid rewrite test
btrfstune feature setting test
zero-log tests
more testing image formats
manual page updates
ioctl.h synced with current kernel uapi version
convert: preparatory works for more filesystems (reiserfs pending)
use static buffers for path handling where possible
add new helpers for send utils that check memory allocations, switch all users, deprecate old helpers
Makefile: fix build dependency generation
map-logical: make it work again
defrag: threshold overflow fix
check if items fit into the leaf space
fix wrong nbytes
create only desired block groups for single device
preparatory work for fix on multiple devices
new alias for ‘device delete’: ‘device remove’
fix compilation on old gcc (4.3)
documentation updates
debug-tree: print nbytes
test: image for corrupted nbytes
corrupt-block: let it kill nbytes
urgent bugfix: mkfs creates invalid filesystem, must be recreated
- resize:
don’t accept file as an argument (it’s confusing)
print better error message in case of an error
restore: optionally restore metadata (time, mode, uid/gid)
receive: optionally enforce chroot
new rescue subcommand ‘zero-log’, same as btrfs-zero-log, but now also part of the main utility
- check:
free space checks match kernel, fixes incorrect reports
convert: fix setting of checksum bit if --no-datasum is used
fsck.btrfs: don’t print messages
fix quota rescan on PPC64 (mangled ioctl number)
test updates
documentation: files renamed to .asciidoc, misc fixups
can restore symlinks, new option --symlinks
long option variants added
convert: dropped dependency on acl.h header and libacl is not required for build
fix for ‘check’ crash
device remove error message fix
preparatory works for fsid change
build converted to autotools
- btrfs-image
restore can now run in parallel threads
fixed restore of multiple image from multiple devices onto a single dev
introduced metadump v2
check: make --init-csum-tree and --init-extent-tree work together
find-new: option to search through all metadata even if a root was already found
convert: show progress by default, can be turned off
corrupt-block: option to work on a specific root
bash completion script for all subcommands
new option to specify metadata block size
--no-progress actually works
restore: properly handle the page boundary corner case
missing macro from public header, BTRFS_BUILD_VERSION
wrong handling of --enable-convert
filesystem usage: reports correct space for degraded mounts
mkfs: help string updates
completion: added ‘usage’ subcommands
cleanups in qgroup code, preparatory work
mkfs - skinny-metadata feature is now on by default, first introduced in kernel 3.10
filesystem usage - give an overview of fs usage in a way that’s more comprehensible than existing ‘filesystem df’
device usage - more detailed information about per-device allocations
- check
option to set a different tree root byte number
ability to link lost files to lost+found, caused by a recent kernel bug
repair of severely corrupted fs (use with care)
convert - option to show progress
subvol create - print the commit mode inline, print the global mode only if --verbose
other updates: musl-libc support, coverity bugfixes, new test images, documentation
minor fixes
documentation updates
qgroup show: print human readable sizes, options to say otherwise
check: new option to explicitly say no to writes
mkfs: message about trimming is not printed to stderr
filesystem show: fixed return value
tests: new infrastructure
btrfstune: force flag can be used together with seeding option
backtrace support is back
getopt cleanups
doc and help updates
check: --init-csum-tree actually does something useful, rebuilds the whole csum tree
/dev scanning for btrfs devices is gone
/proc/partitions scanning is gone, blkid is used exclusively
new subcommand subvolume sync
filesystem df: new options to set unit format
convert: allow to copy label from the origin, or specify a new one
filesystem df: argument handling
fix linking with libbtrfs
replace: better error reporting
filesystem show: fixed stall if run concurrently with balance
check: fixed argument parsing for --subvol-extents
filesystem df: SI prefixes corrected
add ability to replace missing dir item/dir indexes
fix missing inode items
create missing root dirid
corrupt block: enhancements for testing fsck
zero-log: able to reset a fs with bogus log tree pointer (bug_72151)
convert: fix conversion of sparse ext* filesystems
show: resolve to the correct path
fsck: more verbose error for root dir problems
mkfs: new option to specify UUID, drop experimental notice
check: new option to verify quotas, reduced memory requirements, new option to print extent sharing
restore: check length before decompression, more error handling, option to loop during restoring
balance: new filter ‘limit’
recover: allow to read all sb copies
btrfstune: new option to force dangerous changes
receive: new option to limit number of errors
show-super: skip unrecognized sb, add option to force
debug-tree: print tree by id
documentation updates
print GlobalReserve in filesystem df output
new option -R in subvol list
library version defines
static build is fixed
build without documentation is possible
a few fixes in fsck and image tools
fsck: fixes and enhancements to --init-extent-tree mode
fsck: chunk-recover updates
scrub: add force option -f
send: check if subvolumes are read-only
subvol delete: add options to affect commit behaviour
btrfs: add property command group
restore: add dry-run option
restore: fix restoring of compressed files
mkfs: support for no-holes feature
mkfs: option -r deals with hardlinks and relative paths
mkfs: discard phase is interruptible
documentation updates
properties: fix handling of option -t
restore: fix reading of compressed extents
minor code and doc updates
documentation is now written in asciidoc and there are manpages for each subcommand
misc bugfixes
announcement, tarballs
first release after 0.19 (2009/06) with a lot of changes