Changes (kernel/version)
变更(内核/版本)
Summary of kernel changes for each version.
每个版本的内核变更摘要。
6.x
6.0 (Oct 2022) 6.0(2022 年 10 月)
Pull requests:
v6.0-rc1,
v6.0-rc1,
v6.0-rc2,
v6.0-rc3,
v6.0-rc5,
v6.0-rc7
拉取请求:v6.0-rc1,v6.0-rc1,v6.0-rc2,v6.0-rc3,v6.0-rc5,v6.0-rc7
sysfs updates: sysfs 更新:
export chunk size, in debug mode add tunable for setting its size
导出块大小,在调试模式下添加可调节项以设置其大小show zoned among features (was only in debug mode)
在特性中显示分区 (之前仅在调试模式中)show commit stats (number, last/max/total duration)
显示提交统计数据 (数量,最后/最大/总持续时间)mixed_backref and big_metadata sysfs feature files removed, they’ve been default for sufficiently long time, there are no known users and mixed_backref could be confused with mixed_groups
移除了 mixed_backref 和 big_metadata sysfs 功能文件,它们已经默认存在了相当长的时间,没有已知用户,并且 mixed_backref 可能会与 mixed_groups 混淆
send protocol updated to version 2
发送协议更新到版本 2new commands: 新命令:
ability write larger data chunks than 64K
能够写入大于 64K 的数据块send raw compressed extents (uses the encoded data ioctls), ie. no decompression on send side, no compression needed on receive side if supported
发送原始压缩范围(使用编码数据 ioctls),即在发送端不进行解压缩,在接收端如果支持则不需要压缩send ‘otime’ (inode creation time) among other timestamps
在其他时间戳中发送“otime”(inode 创建时间)send file attributes (a.k.a file flags and xflags)
发送文件属性(也称文件标志和扩展标志)
this is first version bump, backward compatibility on send and receive side is provided
这是第一个版本升级,提供了发送和接收端的向后兼容性there are still some known and wanted commands that will be implemented in the near future, another version bump will be needed, however we want to minimize that to avoid causing usability issues
仍然有一些已知和期望的命令将在不久的将来实现,将需要另一个版本升级,但我们希望尽量减少以避免造成可用性问题
print checksum type and implementation at mount time
在挂载时打印校验和类型和实现don’t print some messages at mount (mentioned as people asked about it), we want to print messages namely for new features so let’s make some space for that:
在挂载时不打印一些消息(如有人询问),我们希望为新功能打印消息,因此让我们为此腾出一些空间:big metadata - this has been supported for a long time and is not a feature that’s worth mentioning
大型元数据 - 这已经支持了很长时间,不是值得一提的功能skinny metadata - same reason, set by default by mkfs
瘦元数据 - 相同的原因,由 mkfs 默认设置
Performance improvements:
性能改进:
reduced amount of reserved metadata for delayed items
减少延迟项目的保留元数据量when inserted items can be batched into one leaf
当插入项目时,可以将其批量处理为一个叶子when deleting batched directory index items
当删除批量目录索引项目时when deleting delayed items used for deletion
当删除用于延迟删除的项目时overall improved count of files/sec, decreased subvolume lock contention
文件/秒的整体改进计数,减少了子卷锁争用
metadata item access bounds checker micro-optimized, with a few percent of improved runtime for metadata-heavy operations
元数据项访问边界检查器进行了微优化,对于元数据密集型操作,运行时性能提高了几个百分点increase direct io limit for read to 256 sectors, improved throughput by 3x on sample workload
将读取的直接 IO 限制提高到 256 个扇区,对样本工作负载的吞吐量提高了 3 倍
Notable fixes: 显著修复:
raid56
reduce parity writes, skip sectors of stripe when there are no data updates
减少奇偶校验写入,当没有数据更新时跳过条带的扇区restore reading from stripe cache instead of triggering new read
从条带缓存中恢复阅读,而不是触发新的读取
refuse to replay log with unknown incompat read-only feature bit set
拒绝重放具有未知不兼容只读特性位设置的日志tree-checker verifies if extent items don’t overlap
树检查程序验证范围项是否不重叠check that subvolume is writable when changing xattrs from security namespace
检查更改来自安全命名空间的 xattrs 时,子卷是否可写fix space cache corruption and potential double allocations; this is a rare bug but can be serious once it happens, stable backports and analysis tool will be provided
修复空间缓存损坏和潜在的双重分配;这是一个罕见的 bug,但一旦发生,可能会很严重,将提供稳定的回退和分析工具zoned: 分区:
fix page locking when COW fails in the middle of allocation
在分配过程中 COW 失败时修复页面锁定improved tracking of active zones, ZNS drives may limit the number and there are ENOSPC errors due to that limit and not actual lack of space
改进活动区域的跟踪,ZNS 驱动器可能限制数量,由于该限制而不是实际空间不足而导致 ENOSPC 错误adjust maximum extent size for zone append so it does not cause late ENOSPC due to underreservation
调整区域追加的最大范围大小,以避免由于保留不足而导致晚期 ENOSPC
mirror reading error messages show the mirror number
镜像读取错误消息显示镜像编号don’t fallback to buffered IO for NOWAIT direct IO writes, we don’t have the NOWAIT semantics for buffered io yet
对于 NOWAIT 直接 IO 写入不要回退到缓冲 IO,因为我们还没有对缓冲 IO 实现 NOWAIT 语义send, fix sending link commands for existing file paths when there are deleted and created hardlinks for same files
当同一文件存在已删除和已创建的硬链接时,为现有文件路径发送,修复发送链接命令repair all mirrors for profiles with more than 1 copy (raid1c34)
修复所有具有多于 1 个副本的配置文件的所有镜像(raid1c34)fix repair of compressed extents, unify where error detection and repair happen
修复压缩范围的修复,统一错误检测和修复发生的位置
6.1 (Dec 2022) 6.1(2022 年 12 月)
Pull requests:
v6.1-rc1,
v6.1-rc1,
v6.1-rc2,
v6.1-rc4,
v6.1-rc4,
v6.1-rc5,
v6.1-rc7
拉取请求: v6.1-rc1, v6.1-rc1, v6.1-rc2, v6.1-rc4, v6.1-rc4, v6.1-rc5, v6.1-rc7
Performance: 性能:
outstanding FIEMAP speed improvements:
出色的 FIEMAP 速度改进:algorithmic change how extents are enumerated leads to orders of magnitude speed boost (uncached and cached)
算法变更如何枚举范围导致数量级的速度提升(未缓存和已缓存)extent sharing check speedup (2.2x uncached, 3x cached)
范围共享检查加速(未缓存 2.2 倍,已缓存 3 倍)add more cancellation points, allowing to interrupt seeking in files with large number of extents
添加更多取消点,允许中断对具有大量范围的文件的搜索more efficient hole and data seeking (4x uncached, 1.3x cached)
更高效的洞和数据查找(4 倍未缓存,1.3 倍缓存)sample results: 256M, 32K extents: 4s -> 29ms (~150x) 512M, 64K extents: 30s -> 59ms (~550x) 1G, 128K extents: 225s -> 120ms (~1800x)
样本结果:256M,32K 范围:4 秒 -> 29 毫秒(~150 倍)512M,64K 范围:30 秒 -> 59 毫秒(~550 倍)1G,128K 范围:225 秒 -> 120 毫秒(~1800 倍)
improved inode logging, especially for directories (on dbench workload throughput +25%, max latency -21%)
改进的 inode 日志记录,特别是对目录(在 dbench 工作负载中吞吐量+25%,最大延迟-21%)improved buffered IO, remove redundant extent state tracking, lowering memory consumption and avoiding rb tree traversal
改进缓冲 IO,删除冗余的范围状态跟踪,降低内存消耗并避免 rb 树遍历add sysfs tunable to let qgroup temporarily skip exact accounting when deleting snapshot, leading to a speedup but requiring a rescan after that, will be used by snapper
添加 sysfs 可调参数,让 qgroup 在删除快照时暂时跳过精确计算,从而加快速度,但之后需要重新扫描,将被 snapper 使用support io_uring and buffered writes, until now it was just for direct IO, with the no-wait semantics implemented in the buffered write path it now works and leads to speed improvement in IOPS (2x), throughput (2.2x), latency (depends, 2x to 150x)
支持 io_uring 和缓冲写入,直到现在它只支持直接 IO,在缓冲写入路径实现了无等待语义后,现在可以工作并提高 IOPS(2 倍)、吞吐量(2.2 倍)、延迟(取决于,2 倍至 150 倍)small performance improvements when dropping and searching for extent maps as well as when flushing delalloc in COW mode (throughput +5MB/s)
在 COW 模式下删除和搜索范围映射以及刷新 delalloc 时的小性能改进(吞吐量 +5MB/s)
User visible changes: 用户可见的更改:
new incompatible feature block-group-tree adding a dedicated tree for tracking block groups, this allows a much faster load during mount and avoids seeking unlike when it’s scattered in the extent tree items
新的不兼容特性块组树添加了一个专用树来跟踪块组,这样在挂载期间加载速度更快,避免了在范围树项中分散寻找的情况this reduces mount time for many-terabyte sized filesystems
这减少了许多 TB 大小文件系统的挂载时间conversion tool will be provided so existing filesystem can also be updated in place
将提供转换工具,以便现有文件系统也可以就地更新to reduce test matrix and feature combinations requires no-holes and free-space-tree (mkfs defaults since 5.15)
为了减少测试矩阵和功能组合,需要无洞和自由空间树(自 5.15 版本以来的 mkfs 默认设置)
improved reporting of super block corruption detected by scrub
改进了由 scrub 检测到的超级块损坏的报告scrub also tries to repair super block and does not wait until next commit
scrub 也尝试修复超级块,并且不会等到下一次提交discard stats and tunables are exported in sysfs (/sys/fs/btrfs/FSID/discard)
丢弃统计信息和可调参数被导出到 sysfs (/sys/fs/btrfs/FSID/discard)qgroup status is exported in sysfs (/sys/sys/fs/btrfs/FSID/qgroups/)
qgroup 状态被导出到 sysfs (/sys/sys/fs/btrfs/FSID/qgroups/)verify that super block was not modified when thawing filesystem
验证在解冻文件系统时超级块未被修改
Fixes: 修复:
FIEMAP fixes: FIEMAP 修复:
fix extent sharing status, does not depend on the cached status where merged
修复范围共享状态,不依赖于合并时的缓存状态flush delalloc so compressed extents are reported correctly
刷新 delalloc,以便正确报告压缩范围
fix alignment of VMA for memory mapped files on THP
修复 THP 上内存映射文件的 VMA 对齐send: fix failures when processing inodes with no links (orphan files and directories)
修复处理没有链接的 inode(孤立文件和目录)时的故障handle more corner cases for read-only compat feature verification
处理只读兼容特性验证的更多边缘情况fix crash on raid0 filesystems created with <5.4 mkfs.btrfs that could lead to division by zero
修复在使用<5.4 mkfs.btrfs 创建的 raid0 文件系统上可能导致除零错误的崩溃
Core: 核心:
preliminary support for fs-verity in send
在发送中对 fs-verity 进行初步支持more effective memory use in scrub for subpage where sector is smaller than page
在对小于页面大小的子页面进行擦除时更有效地利用内存block group caching progress logic has been removed, load is now synchronous
块组缓存进度逻辑已被移除,加载现在是同步的add no-wait semantics to several functions (tree search, nocow, flushing, buffered write
为几个函数添加无等待语义(树搜索,nocow,刷新,缓冲写入)
6.2 (Feb 2023) 6.2(2023 年 2 月)
Pull requests:
v6.2-rc1,
v6.2-rc3,
v6.2-rc3,
v6.2-rc5,
v6.2-rc5,
v6.2-rc5,
v6.2-rc8,
v6.2-rc8
拉取请求:v6.2-rc1,v6.2-rc3,v6.2-rc3,v6.2-rc5,v6.2-rc5,v6.2-rc5,v6.2-rc8,v6.2-rc8
User visible features: 用户可见功能:
raid56 reliability vs performance trade off:
raid56 可靠性与性能之间的权衡:fix destructive RMW for raid5 data (raid6 still needs work) - do full RMW cycle for writes and verify all checksums before overwrite, this should prevent rewriting potentially corrupted data without notice
修复 RAID5 数据的破坏性 RMW(RAID6 仍需工作)- 对写入执行完整的 RMW 循环,并在覆盖之前验证所有校验和,这应该可以防止在不知情的情况下重写潜在损坏的数据stripes are cached in memory which should reduce the performance impact but still can hurt some workloads
条带被缓存在内存中,这应该减少性能影响,但仍可能影响某些工作负载checksums are verified after repair again
修复后再次验证校验和this is the last option without introducing additional features (write intent bitmap, journal, another tree), the RMW cycle was supposed to be avoided by the original implementation exactly for performance reasons but that caused all the reliability problems
这是最后一个选项,不引入额外功能(写入意图位图、日志、另一棵树),原始实现本来应该为了性能原因避免 RMW 循环,但这导致了所有的可靠性问题
discard=async by default for devices that support it
对支持的设备,默认为丢弃=异步implement emergency flush reserve to avoid almost all unnecessary transaction aborts due to ENOSPC in cases where there are too many delayed refs or delayed allocation
实现紧急刷新保留,以避免由于延迟引用或延迟分配过多而导致的几乎所有不必要的事务中止情况下的 ENOSPCskip block group synchronization if there’s no change in used bytes, can reduce transaction commit count for some workloads
如果使用字节没有变化,则跳过块组同步,可以减少某些工作负载的事务提交计数print more specific errors to system log when device scan ioctl fails
当设备扫描 ioctl 失败时,向系统日志打印更具体的错误
Performance improvements:
性能改进:
fiemap and lseek: fiemap 和 lseek:
overall speedup due to skipping unnecessary or duplicate searches (-40% run time)
由于跳过不必要或重复搜索而导致的整体加速(运行时间减少 40%)cache some data structures and sharedness of extents (-30% run time)
缓存一些数据结构和范围的共享性(运行时间减少 30%)
send: 发送:
faster backref resolution when finding clones
在查找克隆时更快的反向引用解析cached leaf to root mapping for faster backref walking
为了更快的反向引用遍历,缓存了叶子到根的映射improved clone/sharing detection
改进了克隆/共享检测overall run time improvements (-70%)
总体运行时间改善(-70%)
Fixes: 修复:
fix compat ro feature check at read-write remount
修复在读写重新挂载时的兼容性特性检查handle case when read-repair happens with ongoing device replace
处理发生正在进行设备替换时的读修复情况reset defrag ioctl buffer on memory allocation error
在内存分配错误时重置碎片整理 ioctl 缓冲区fix potential crash in quota when rescan races with disable
修复配额在重新扫描与禁用发生竞争时可能导致的崩溃fix qgroup accounting warning when rescan can be started at time with temporarily disabled accounting
修复重新扫描时可能出现的 qgroup 记账警告,此时记账可能被暂时禁用don’t cache a single-device filesystem device to avoid cases when a loop device is reformatted and the entry gets stale
不要缓存单设备文件系统设备,以避免循环设备被重新格式化时条目变得过时的情况limit number of send clones by maximum memory allocated
通过分配的最大内存限制发送克隆的数量
6.3 (Apr 2023) 6.3(2023 年 4 月)
Pull requests:
v6.3-rc1,
v6.3-rc2,
v6.3-rc4,
v6.3-rc5,
v6.3-rc7,
v6.3
拉取请求:v6.3-rc1,v6.3-rc2,v6.3-rc4,v6.3-rc5,v6.3-rc7,v6.3
Features: 特性:
block group allocation class heuristics:
区块组分配类启发式算法:pack files by size (up to 128k, up to 8M, more) to avoid fragmentation in block groups, assuming that file size and life time is correlated, in particular this may help during balance
按大小打包文件(最多 128k,最多 8M,更多),以避免在块组中出现碎片,假设文件大小和寿命相关联,特别是在平衡期间可能有所帮助with tracepoints and extensible in the future
未来可通过跟踪点和可扩展性进行扩展
sysfs export of per-device fsid in DEV_INFO ioctl to distinguish seeding devices, needed for testing
在 DEV_INFO ioctl 中导出每个设备 fsid 的 sysfs 以区分种子设备,测试所需print sysfs stats for the allocation classes
打印分配类别的 sysfs 统计信息
Performance: 性能:
send: cache directory utimes and only emit the command when necessary
发送:缓存目录 utimes 并仅在必要时发出命令speedup up to 10x 加速至 10 倍
smaller final stream produced (no redundant utimes commands issued),
生成更小的最终流(不会发出冗余的 utimes 命令)compatibility not affected
兼容性不受影响
fiemap:
skip backref checks for shared leaves
跳过共享叶子的反向引用检查speedup 3x on sample filesystem with all leaves shared (e.g. on snapshots)
在所有叶子节点共享的示例文件系统上加速 3 倍(例如在快照上)
micro optimized b-tree key lookup, speedup in metadata operations (sample benchmark: fs_mark +10% of files/sec)
微优化的 B 树键查找,在元数据操作中加速(示例基准:fs_mark 文件/秒增加 10%)
Core changes: 核心变更:
change where checksumming is done in the io path
在 io 路径中更改校验和的位置checksum and read repair does verification at lower layer
校验和和读修复在较低层进行验证cascaded cleanups and simplifications
级联清理和简化
Fixes: 修复:
sysfs: make sure that a run-time change of a feature is correctly tracked by the feature files
sysfs: 确保功能的运行时更改被功能文件正确跟踪scrub: better reporting of tree block errors
scrub: 更好地报告树块错误fix calculation of unusable block group space reporting bogus values due to 32/64b division
修复由于 32/64 位除法导致不可用块组空间报告虚假值的计算问题fix unnecessary increment of read error stat on write error
修复在写入错误时不必要地增加读取错误统计的问题scan block devices in non-exclusive mode to avoid temporary mkfs failures
以非独占模式扫描块设备,以避免临时 mkfs 失败fix fast checksum detection, this affects filesystems with non-crc32c checksum, calculation would not be offloaded to worker threads (since 5.4)
修复快速校验和检测,这会影响到使用非 crc32c 校验和的文件系统,计算不会被转移到工作线程中(自 5.4 版本以来)restore thread_pool mount option behaviour for endio workers, the new value for maximum active threads would not be set to the actual work queues (since 6.0)
恢复 endio 工作线程的 thread_pool 挂载选项行为,最大活动线程的新值不会设置为实际的工作队列(自 6.0 版本以来)
6.4 (Jun 2023) 6.4(2023 年 6 月)
Pull requests:
v6.4-rc1,
v6.4-rc2,
v6.4-rc2,
v6.4-rc4,
v6.4-rc5,
v6.4-rc5,
v6.4-rc7,
v6.4-rc7,
v6.4,
v6.4
拉取请求: v6.4-rc1, v6.4-rc2, v6.4-rc2, v6.4-rc4, v6.4-rc5, v6.4-rc5, v6.4-rc7, v6.4-rc7, v6.4, v6.4
Performance improvements:
性能改进:
improve logging changes in a directory during one transaction, avoid iterating over items and reduce lock contention (fsync time 4x lower)
在一个事务中改进目录中的日志更改,避免遍历项目并减少锁争用(fsync 时间降低 4 倍)when logging directory entries during one transaction, reduce locking of subvolume trees by checking tree-log instead (improvement in throughput and latency for concurrent access to a subvolume)
在一个事务期间记录目录条目时,通过检查树日志而减少对子卷树的锁定(改善对子卷的并发访问的吞吐量和延迟)
Notable fixes: 显著修复:
device replace: 设备替换:
properly honor read mode when requested to avoid reading from source device
请求时适当尊重读取模式,以避免从源设备读取target device won’t be used for eventual read repair, this is unreliable for NODATASUM files
目标设备不会用于最终读取修复,对于 NODATASUM 文件来说是不可靠的when there are unpaired (and unrepairable) metadata during replace, exit early with error and don’t try to finish whole operation
在替换过程中存在不匹配(且无法修复)的元数据时,立即退出并显示错误,不要尝试完成整个操作
scrub ioctl properly rejects unknown flags
适当拒绝未知标志的擦洗 ioctlfix partial direct io write when there’s a page fault in the middle, iomap will try to continue with partial request but the btrfs part did not match that, this can lead to zeros written instead of data
修复部分直接 io 写入时出现页面错误的问题,iomap 将尝试继续部分请求,但 btrfs 部分与之不匹配,这可能导致写入零而不是数据fix backref walking, this breaks a mode of LOGICAL_INO_V2 ioctl that is used in deduplication tools
修复反向引用遍历,这会破坏在重复消除工具中使用的 LOGICAL_INO_V2 ioctl 的一种模式make mount option clear_cache work with block-group-tree, to rebuild free-space-tree instead of temporarily disabling it that would lead to a forced read-only mount
使挂载选项 clear_cache 与 block-group-tree 协同工作,以重建 free-space-tree,而不是暂时禁用它,这将导致强制只读挂载
Core changes: 核心变更:
io path io 路径
continued cleanups and refactoring around bio handling
在处理生物方面持续进行清理和重构extent io submit path simplifications and cleanups
扩展 I/O 提交路径简化和清理flush write path simplifications and cleanups
刷新写入路径简化和清理rework logic of passing sync mode of bio, with further cleanups
重新设计传递生物同步模式的逻辑,并进一步清理
rewrite scrub code flow, restructure how the stripes are enumerated and verified in a more unified way
重写擦除代码流程,以更统一的方式重构条带的枚举和验证方式allow to set lower threshold for block group reclaim in debug mode to aid zoned mode testing
允许在调试模式下设置块组回收的较低阈值,以帮助分区模式测试remove obsolete time-based delayed ref throttling logic when truncating items
在截断项目时删除过时的基于时间的延迟引用节流逻辑
6.5 (Aug 2023) 6.5(2023 年 8 月)
Pull requests:
v6.5-rc1,
v6.5-rc3,
v6.5-rc4,
v6.5-rc6,
v6.5-rc7
拉取请求:v6.5-rc1,v6.5-rc3,v6.5-rc4,v6.5-rc6,v6.5-rc7
Performance improvements:
性能改进:
speedup in fsync(), better tracking of inode logged status can avoid transaction commit
fsync() 速度提升,更好地跟踪 inode 记录状态可以避免事务提交IO path structures track logical offsets in data structures and does not need to look it up
IO 路径结构在数据结构中跟踪逻辑偏移量,无需查找submit IO synchronously for fast checksums (crc32c and xxhash), remove high priority worker kthread
为快速校验和(crc32c 和 xxhash)同步提交 IO,移除高优先级工作线程
User visible changes: 用户可见的更改:
don’t commit transaction for every created subvolume, this can reduce time when many subvolumes are created in a batch
不要为每个创建的子卷提交事务,这可以减少在批量创建许多子卷时的时间print affected files when relocation fails
当迁移失败时打印受影响的文件trigger orphan file cleanup during START_SYNC ioctl
在 START_SYNC ioctl 过程中触发孤立文件清理the
async=discard
has been enabled in 6.2 unconditionally, but for zoned mode it does not make that much sense to do it asynchronously as the zones are reset as needed
在 6.2 版本中,async=discard
已被无条件启用,但对于分区模式来说,异步执行并没有太多意义,因为分区会根据需要重置
6.6 (Oct 2023) 6.6(2023 年 10 月)
Pull requests:
v6.6-rc1,
v6.6-rc2,
v6.6-rc3,
v6.6-rc4,
v6.6-rc5,
v6.6-rc6,
v6.6-rc7 (1),
v6.6-rc8 (2),
拉取请求:v6.6-rc1,v6.6-rc2,v6.6-rc3,v6.6-rc4,v6.6-rc5,v6.6-rc6,v6.6-rc7(1),v6.6-rc8(2),
Notable fixes: 显著修复:
scrub performance drop due to rewrite in 6.4 partially restored, the drop is noticeable on fast PCIe devices, -66% and restored to -33% of the original
由于在 6.4 中的重写导致的刷写性能下降部分恢复,这种下降在快速 PCIe 设备上是明显的,恢复到原始值的-66%并恢复到-33%。copy directory permissions and time when creating a stub subvolume
在创建存根子卷时复制目录权限和时间fix transaction commit stalls when auto relocation is running and blocks other tasks that want to commit
修复事务提交在自动重定位运行时出现停顿,阻塞其他想要提交的任务change behaviour of readdir()/rewinddir() when new directory entries are created after opendir(), properly tracking the last entry
更改在 opendir() 之后创建新目录条目时 readdir()/rewinddir() 的行为,正确跟踪最后一个条目
Core: 核心:
debugging feature integrity checker deprecated, to be removed in 6.7
调试功能完整性检查器已弃用,将在 6.7 中移除in zoned mode, zones are activated just before the write, making error handling easier, now the overcommit mechanism can be enabled again which improves performance by avoiding more frequent flushing
在分区模式下,分区在写入之前激活,使错误处理更容易,现在可以重新启用超额提交机制,通过避免更频繁的刷新来提高性能v0 extent handling completely removed, deprecated long time ago
v0 范围处理已完全删除,很久以前就已弃用
6.7 (Jan 2024) 6.7(2024 年 1 月)
Pull requests:
v6.7-rc1,
v6.7-rc2,
v6.7-rc4,
v6.7-rc6 (1),
v6.7-rc6 (2),
拉取请求:v6.7-rc1,v6.7-rc2,v6.7-rc4,v6.7-rc6(1),v6.7-rc6(2)
New features: 新功能:
raid-stripe-tree: New tree for logical file extent mapping where the physical mapping may not match on multiple devices. This is now used in zoned mode to implement RAID0/RAID1* profiles, but can be used in non-zoned mode as well. The support for RAID56 is in development and will eventually fix the problems with the current implementation. This is a backward incompatible feature and has to be enabled at mkfs time.
raid-stripe-tree: 用于逻辑文件范围映射的新树,其中物理映射可能在多个设备上不匹配。现在在分区模式下用于实现 RAID0/RAID1* 配置文件,但也可以在非分区模式下使用。RAID56 的支持正在开发中,最终将修复当前实现中的问题。这是一个不兼容的向后功能,必须在 mkfs 时启用。simple quota accounting (squota): A simplified mode of qgroup that accounts all space on the initial extent owners (a subvolume), the snapshots are then cheap to create and delete. The deletion of snapshots in fully accounting qgroups is a known CPU/IO performance bottleneck.
简单的配额账户(squota):一种简化的 qgroup 模式,它记录初始范围所有者(子卷)上的所有空间,然后创建和删除快照就很便宜。在完全计费的 qgroup 中删除快照是已知的 CPU/IO 性能瓶颈。Note: The squota is not suitable for the general use case but works well for containers where the original subvolume exists for the whole time. This is a backward incompatible feature as it needs extending some structures, but can be enabled on an existing filesystem.
注意:squota 不适用于一般用例,但适用于容器,其中原始子卷在整个时间内存在。这是一个向后不兼容的功能,因为它需要扩展一些结构,但可以在现有文件系统上启用。temporary filesystem fsid (temp_fsid): The fsid identifies a filesystem and is hard coded in the structures, which disallows mounting the same fsid found on different devices.
临时文件系统 fsid(temp_fsid):fsid 用于标识文件系统,并且在结构中是硬编码的,这会阻止在不同设备上找到相同 fsid 的挂载。For a single device filesystem this is not strictly necessary, a new temporary fsid can be generated on mount e.g. after a device is cloned. This will be used by Steam Deck for root partition A/B testing, or can be used for VM root images.
对于单设备文件系统,这并不是绝对必要的,可以在挂载后生成一个新的临时 fsid,例如在设备克隆后。这将被 Steam Deck 用于根分区 A/B 测试,或者可以用于 VM 根映像。filesystems with partially finished metadata_uuid conversion cannot be mounted anymore and the uuid fixup has to be done by btrfs-progs (btrfstune).
具有部分完成的 metadata_uuid 转换的文件系统将无法再挂载,必须由 btrfs-progs(btrfstune)进行 uuid 修复。
Performance improvements:
性能改进:
reduce reservations for checksum deletions (with enabled free space tree by factor of 4), on a sample workload on file with many extents the deletion time decreased by 12%
减少校验和删除的保留空间(启用了 4 倍的自由空间树),在具有许多范围的文件的样本工作负载上,删除时间减少了 12%。make extent state merges more efficient during insertions, reduce rb-tree iterations (run time of critical functions reduced by 5%)
在插入过程中使范围状态合并更有效,减少红黑树迭代(关键函数的运行时间减少了 5%)
Core changes: 核心变更:
the integrity check functionality has been removed, this was a debugging feature and removal does not affect other integrity checks like checksums or tree-checker
完整性检查功能已被移除,这是一个调试功能,移除不会影响其他完整性检查,如校验和或树检查器space reservation changes:
空间预留更改:more efficient delayed ref reservations, this avoids building up too much work or overusing or exhausting the global block reserve in some situations
更高效的延迟引用预留,这样可以避免在某些情况下积累过多的工作或过度使用或耗尽全局块预留move delayed refs reservation to the transaction start time, this prevents some ENOSPC corner cases related to exhaustion of global reserve
将延迟引用预留移动到事务开始时间,这可以防止一些与全局预留耗尽相关的 ENOSPC 边缘情况adjust overcommit logic in near full situations, account for one more chunk to eventually allocate metadata chunk, this is mostly relevant for small filesystems (<10GiB)
在接近满负荷情况下调整超额承诺逻辑,考虑再分配一个更多的块以最终分配元数据块,这对于小型文件系统(<10GiB)来说是最相关的
single device filesystems are scanned but not registered (except seed devices), this allows temp_fsid to work
单设备文件系统会被扫描但不会被注册(除了种子设备),这允许 temp_fsid 工作
6.8 (Mar 2024) 6.8(2024 年 3 月)
Pull requests:
v6.8-rc1,
v6.8-rc2,
v6.8-rc4,
v6.8-rc5,
v6.8-rc6,
v6.8-rc7 (1),
v6.8-rc7 (2)
拉取请求: v6.8-rc1, v6.8-rc2, v6.8-rc4, v6.8-rc5, v6.8-rc6, v6.8-rc7 (1), v6.8-rc7 (2)
Core changes: 核心变更:
convert extent buffers to folios: - direct API conversion where possible - performance can drop by a few percent on metadata heavy
将范围缓冲区转换为页: - 在可能的情况下直接 API 转换 - 在元数据密集型情况下性能可能会下降几个百分点workloads, the folio sizes are not constant and the calculations add up in the item helpers
工作负载,页大小不是固定的,计算在项目助手中累加both regular and subpage modes
常规模式和子页面模式都有data cannot be converted yet, we need to port that to iomap and there are some other generic changes required
数据目前无法转换,我们需要将其移植到 iomap,并且还需要一些其他通用更改
convert mount to the new API, should not be user visible: - options deprecated long time ago have been removed: inode_cache,
将挂载转换为新的 API,不应该对用户可见:- 选项已经过时已被删除:inode_cache,recovery 恢复
the new logic that splits mount to two phases slightly changes timing of device scanning for multi-device filesystems
将挂载拆分为两个阶段的新逻辑略微改变了多设备文件系统的设备扫描时间LSM options will now work (like for selinux)
LSM 选项现在将起作用(就像对于 selinux 一样)
convert delayed nodes radix tree to xarray, preserving the preload-like logic that still allows to allocate with GFP_NOFS
将延迟节点基数树转换为 xarray,保留仍然允许使用 GFP_NOFS 进行分配的预加载逻辑
Performance improvements:
性能改进:
refactor chunk map structure, reduce size and improve performance
重构块映射结构,减小大小并提高性能extent map refactoring, smaller data structures, improved performance
扩展映射重构,较小的数据结构,提高性能reduce size of struct extent_io_tree, embedded in several structures
减小结构 extent_io_tree 的大小,嵌入在几个结构中temporary pages used for compression are cached and attached to a shrinker, this may slightly improve performance
用于压缩的临时页面被缓存并附加到收缩器,这可能会略微提高性能
Fixes: 修复:
fix over-reservation of metadata chunks due to not keeping proper balance between global block reserve and delayed refs reserve; in practice this leaves behind empty metadata block groups, the workaround is to reclaim them by using the ‘-musage=1’ balance filter
修复由于未保持全局块保留和延迟引用保留之间的适当平衡而导致元数据块的过度保留;在实践中,这会留下空的元数据块组,解决方法是通过使用“-musage=1”平衡过滤器来回收它们fix corner case of send that would generate potentially large stream of zeros if there’s a hole at the end of the file
修复发送的边缘情况,如果文件末尾有空洞,可能会生成大量零流fix chunk validation in zoned mode on conventional zones, it was possible to create chunks that would not be allowed on sequential zones
修复分区模式下传统分区中的块验证,在顺序分区上可能创建不允许的块
5.x
5.0 (Mar 2019) 5.0(2019 年 3 月)
Pull requests:
v5.0-rc1,
v5.0-rc2,
v5.0-rc3,
v5.0-rc5
拉取请求: v5.0-rc1, v5.0-rc2, v5.0-rc3, v5.0-rc5
Features, hilights: 特性, 亮点:
swapfile support (with some limitations)
交换文件支持 (带有一些限制)metadata uuid - new feature that allows fast uuid change without rewriting all metadata blocks (backward incompatible)
元数据 UUID - 新功能,允许快速更改 UUID 而无需重写所有元数据块(向后不兼容)balance messages in the syslog when operations start or stop
在操作开始或停止时在系统日志中平衡消息
Fixes: 修复:
improved check of filesystem id associated with a device during scan to detect duplicate devices that could be mixed up during mount
在扫描过程中改进了与设备关联的文件系统 ID 的检查,以检测可能在挂载过程中混淆的重复设备fix device replace state transitions
修复设备替换状态转换fix a crash due to a race when quotas are enabled during snapshot creation
修复了在启用配额时创建快照时由于竞争而导致的崩溃GFP_NOFS/memalloc_nofs_* fixes
GFP_NOFS/memalloc_nofs_* 修复fsync fixes fsync 修复
Other: 其他:
remove first phase of balance that tried to remove some space (not necessary)
删除尝试移除一些空间的平衡的第一阶段(不必要)separate reserve for delayed refs from global reserve
从全局储备中分离延迟引用的储备cleanups 清理工作
see [https://git.kernel.org/linus/32ee34eddad13cd44ad0cb3e659fe6fd49143b62 pull request]
查看[https://git.kernel.org/linus/32ee34eddad13cd44ad0cb3e659fe6fd49143b62 拉取请求]
5.1 (May 2019) 5.1(2019 年 5 月)
Pull requests:
v5.1-rc1,
v5.1-rc1,
v5.1-rc3,
v5.1-rc5,
v5.1-rc7
拉取请求: v5.1-rc1, v5.1-rc1, v5.1-rc3, v5.1-rc5, v5.1-rc7
New features, hilights: 新功能,亮点:
zstd compression levels can be set as mount options
zstd 压缩级别可以作为挂载选项设置new ioctl to unregister scanned devices
新的 ioctl 用于注销已扫描设备scrub prints messages about start/stop/cancel to the log
scrub 在日志中打印有关启动/停止/取消的消息
Other changes: 其他更改:
qgroups skip some work (est. speedup during balance 20%)
qgroups 跳过一些工作(在平衡期间估计加速 20%)reclaim vs GFP_KERNEL fixes
回收与 GFP_KERNEL 修复fsync fixes for rename/unlink/rmdir
用于重命名/取消链接/删除的 fsync 修复improved enospc handling on a highly fragmented filesystem
在高度碎片化的文件系统上改进了 enospc 处理no trim on filesystem with unreplayed log
在未重放日志的文件系统上没有 trimsee [https://git.kernel.org/linus/b1e243957e9b3ba8e820fb8583bdf18e7c737aa2 pull request]
请参阅 [https://git.kernel.org/linus/b1e243957e9b3ba8e820fb8583bdf18e7c737aa2 拉取请求]
5.2 (Jul 2019) 5.2(2019 年 7 月)
Pull requests:
v5.2-rc1,
v5.2-rc2,
v5.2-rc3,
v5.2-rc5,
v5.2-rc6
拉取请求:v5.2-rc1,v5.2-rc2,v5.2-rc3,v5.2-rc5,v5.2-rc6
User visible changes, hilights:
用户可见的更改,亮点:
better read time and write checks to catch errors early and before writing data to disk
更好地阅读时间并编写检查以尽早捕获错误并在将数据写入磁盘之前qgroups + metadata relocation: last speed up patch in the series there should be no overhead comparing balance with and without qgroups
qgroups + 元数据重定位:系列中的最后加速补丁,比较平衡与无 qgroups 的情况应该没有额外开销FIEMAP ioctl does not start a transaction unnecessarily
FIEMAP ioctl 不会不必要地启动事务LOGICAL_INO (v1, v2) does not start transaction unnecessarily
LOGICAL_INO(v1,v2)不必要地启动事务fsync on files with many (but not too many) hardlinks is faster
具有许多(但不是太多)硬链接的文件上的 fsync 更快send tries harder to find ranges to clone
send 更努力地寻找要克隆的范围trim/discard will skip unallocated chunks that haven’t been touched since the last mount
trim/discard 将跳过自上次挂载以来未被触及的未分配块tree-checker does more validations: device item, inode item, block group item:
tree-checker 进行更多验证:设备项,inode 项,块组项:improved space flushing logic for intense DIO vs buffered workloads
改进了对强烈 DIO 与缓冲工作负载的空间刷新逻辑metadata reservations for delalloc reworked to better adapt in many-writers/low-space scenarios
为 delalloc 重新设计的元数据保留,以更好地适应多写入者/低空间场景
Fixes: 修复:
send flushes delayed allocation before start
在开始之前发送延迟分配的刷新fix fallocate with qgroups accounting underflow
修复 fallocate 与 qgroups 计数下溢send and dedupe can’t be run at the same time
发送和去重不能同时运行fix crash in relocation/balance after resume
修复在恢复后重定位/平衡时崩溃
Other: 其他:
new tracepoints for locking
为锁定添加新的跟踪点async write preallocates memory to avoid failures deep in call chains
异步写入预分配内存,以避免在调用链深处出现故障lots of cleanups 大量的清理工作
5.3 (Sep 2019) 5.3(2019 年 9 月)
Pull requests:
v5.3-rc1,
v5.3-rc2,
v5.3-rc2,
v5.3-rc3,
v5.3-rc5,
v5.3
拉取请求:v5.3-rc1,v5.3-rc2,v5.3-rc2,v5.3-rc3,v5.3-rc5,v5.3
New features, hilights: 新功能,亮点:
chunks that have been trimmed and unchanged since last mount are tracked and skipped on repeated trims
自上次挂载以来未更改的已修剪块将被跟踪并在重复修剪时跳过use hw assisted crc32c on more arches
在更多的架构上使用硬件辅助的 crc32cthe RAID56 incompat bit is automatically removed when the last block group of that type is removed
当该类型的最后一个块组被移除时,RAID56 不兼容位会自动移除
Fixes: 修复:
update ctime/mtime/iversion after hole punching
在戳洞后更新 ctime/mtime/iversionfsync fixes fsync 修复
send and balance can’t be run at the same time
send 和 balance 不能同时运行
Other: 其他:
code refactoring, file splits
代码重构,文件拆分preparatory work for more checksums
为更多的校验和做准备工作tree checker to verify lengths of various items
树检查器以验证各种项目的长度delayed iput happens at unlink time, not in cleaner thread
延迟输入发生在取消链接时间,而不是在清理线程中new tracepoints for space updates
空间更新的新跟踪点
5.4 (Nov 2019) 5.4(2019 年 11 月)
Pull requests:
v5.4-rc1,
v5.4-rc1,
v5.4-rc3,
v5.4-rc5,
v5.4-rc7,
v5.4-rc8
拉取请求:v5.4-rc1,v5.4-rc1,v5.4-rc3,v5.4-rc5,v5.4-rc7,v5.4-rc8
tree checker: adde sanity checks for tree items, extent items, and references
树检查器:为树项目、范围项目和引用添加了健全性检查deprecated subvolume creation mode BTRFS_SUBVOL_CREATE_ASYNC
废弃的子卷创建模式 BTRFS_SUBVOL_CREATE_ASYNCqgroup relation deletion tries harder, orphan entries are removed too
qgroup 关系删除尝试更加努力,孤立条目也被移除space handling improvements (ticket reservations, flushing, overcommit logic)
空间处理改进(票据预留,刷新,超额承诺逻辑)fix possible lockups during send of large subvolumes
修复发送大分卷时可能出现的死锁see [https://git.kernel.org/linus/7d14df2d280fb7411eba2eb96682da0683ad97f6 pull request]
查看 [ https://git.kernel.org/linus/7d14df2d280fb7411eba2eb96682da0683ad97f6 拉取请求]
5.5 (Jan 2020) 5.5 (2020 年 1 月)
Pull requests:
v5.5-rc1,
v5.5-rc1,
v5.5-rc2,
v5.5-rc3,
v5.5-rc5,
v5.5-rc7,
v5.5
拉取请求: v5.5-rc1, v5.5-rc1, v5.5-rc2, v5.5-rc3, v5.5-rc5, v5.5-rc7, v5.5
new block group profiles: RAID1 with 3- and 4- copies
具有 3 和 4 个副本的新块组配置文件:RAID1RAID1 in btrfs has always 2 copies, now add support for 3 and 4
btrfs 中的 RAID1 一直有 2 个副本,现在增加对 3 和 4 个副本的支持this is an incompat feature (named RAID1C34)
这是一个不兼容的功能(名为 RAID1C34)recommended use of RAID1C3 is replacement of RAID6 profile on metadata, this brings a more reliable resiliency against 2 device loss/damage
RAID1C3 的推荐用途是替换元数据的 RAID6 配置文件,这样可以更可靠地抵御 2 个设备的丢失/损坏
support for new checksums
支持新的校验和per-filesystem, set at mkfs time
每个文件系统,在 mkfs 时设置fast hash (crc32c successor): xxhash, 64bit digest
快速哈希(crc32c 的后继者):xxhash,64 位摘要strong hashes (both 256bit): sha256 (slower, FIPS), blake2b (faster)
强哈希(均为 256 位):sha256(较慢,FIPS),blake2b(较快)
speed up lseek, don’t take inode locks unnecessarily, this can speed up parallel SEEK_CUR/SEEK_SET/SEEK_END by 80%
加快 lseek,不要不必要地获取 inode 锁,这可以将并行的 SEEK_CUR/SEEK_SET/SEEK_END 速度提高 80%send: 发送:
allow clone operations within the same file
允许在同一文件内进行克隆操作limit maximum number of sent clone references to avoid slow backref walking
限制发送克隆引用的最大数量,以避免缓慢的反向引用遍历
error message improvements: device scan prints process name and PID
错误消息改进:设备扫描打印进程名称和 PIDnew tree-checker sanity tests (INODE_ITEM, DIR_ITEM, DIR_INDEX, INODE_REF, XATTR)
新的树检查器健全性测试(INODE_ITEM,DIR_ITEM,DIR_INDEX,INODE_REF,XATTR)
5.6 (Mar 2020) 5.6(2020 年 3 月)
Pull requests:
v5.6-rc1,
v5.6-rc1,
v5.6-rc1,
v5.6-rc2,
v5.6-rc3,
v5.6-rc3,
v5.6-rc5,
v5.6-rc7
拉取请求:v5.6-rc1,v5.6-rc1,v5.6-rc1,v5.6-rc2,v5.6-rc3,v5.6-rc3,v5.6-rc5,v5.6-rc7
Highlights: 亮点:
async discard 异步丢弃
“mount -o discard=async” to enable it
“mount -o discard=async” 以启用它freed extents are not discarded immediatelly, but grouped together and trimmed later, with IO rate limiting
空闲的范围不会立即丢弃,而是被分组在一起,稍后进行修剪,带有 IO 速率限制the actual discard IO requests have been moved out of transaction commit to a worker thread, improving commit latency
实际的丢弃 IO 请求已从事务提交移出到工作线程,提高了提交延迟IO rate and request size can be tuned by sysfs files, for now enabled only with CONFIG_BTRFS_DEBUG as we might need to add/delete the files and don’t have a stable-ish ABI for general use, defaults are conservative
IO 速率和请求大小可以通过 sysfs 文件进行调整,目前仅在启用 CONFIG_BTRFS_DEBUG 时可用,因为我们可能需要添加/删除文件,并且没有稳定的通用使用的 ABI,默认值是保守的
export device state info in sysfs, e.g. missing, writeable
在 sysfs 中导出设备状态信息,例如缺失,可写no discard of extents known to be untouched on disk (e.g. after reservation)
在磁盘上已知未被触及的范围不会被丢弃(例如,在保留后)device stats reset is logged with process name and PID that called the ioctl
设备统计信息重置将记录调用 ioctl 的进程名称和 PID
Core changes: 核心变更:
qgroup assign returns ENOTCONN when quotas not enabled, used to return EINVAL that was confusing
当未启用配额时,qgroup 分配返回 ENOTCONN,以前返回 EINVAL,这很令人困惑device closing does not need to allocate memory anymore
设备关闭不再需要分配内存snapshot aware code got removed, disabled for years due to performance problems, reimplmentation will allow to select wheter defrag breaks or does not break COW on shared extents
快照感知代码已被移除,由于性能问题已被禁用多年,重新实现将允许选择是否在共享范围上打破或不打破 COWtree-checker: 树检查器:
check leaf chunk item size, cross check against number of stripes
检查叶块项大小,与条带数量进行交叉检查verify location keys for DIR_ITEM, DIR_INDEX and XATTR items
验证 DIR_ITEM、DIR_INDEX 和 XATTR 项的位置键new self test for physical -> logical mapping code, used for super block range exclusion
用于超级块范围排除的物理 -> 逻辑映射代码的新自检
Fixes: 修复:
fix missing hole after hole punching and fsync when using NO_HOLES
在使用 NO_HOLES 时修复打孔和 fsync 后缺失的孔writeback: range cyclic mode could miss some dirty pages and lead to OOM
writeback:范围循环模式可能会错过一些脏页并导致 OOMtwo more corner cases for metadata_uuid change after power loss during the change
在更改 metadata_uuid 后断电期间的两个更多边缘情况fix infinite loop during fsync after mix of rename operations
修复在重命名操作混合后 fsync 期间的无限循环
5.7 (May 2020) 5.7(2020 年 5 月)
Pull requests:
v5.7-rc1,
v5.7-rc2,
v5.7-rc2,
v5.7-rc4,
v5.7-rc4
拉取请求:v5.7-rc1,v5.7-rc2,v5.7-rc2,v5.7-rc4,v5.7-rc4
Hilights: 亮点:
v2 of ioctl to delete subvolumes, allowing to delete by id and more future extensions
v2 版本的 ioctl 可以删除子卷,允许按 ID 删除以及更多未来扩展removal of obsolete ioctl flag BTRFS_SUBVOL_CREATE_ASYNC
移除过时的 ioctl 标志 BTRFS_SUBVOL_CREATE_ASYNCmore responsive balance cancel
更快的响应平衡取消speedup of extent back reference resolution
扩展后向引用分辨率的加速reflink/clone_range works on inline extents
reflink/clone_range 在内联扩展上运行lots of othe core changes, see the [https://git.kernel.org/linus/15c981d16d70e8a5be297fa4af07a64ab7e080ed pull request]
许多其他核心更改,请参阅[https://git.kernel.org/linus/15c981d16d70e8a5be297fa4af07a64ab7e080ed 拉取请求]
5.8 (Aug 2020) 5.8(2020 年 8 月)
Pull requests:
v5.8-rc1,
v5.8-rc1,
v5.8-rc3,
v5.8-rc5,
v5.8-rc5,
v5.8-rc7
拉取请求:v5.8-rc1,v5.8-rc1,v5.8-rc3,v5.8-rc5,v5.8-rc5,v5.8-rc7
Hilights: 亮点:
speedup dead root detection during orphan cleanup
在孤立清理期间加快死根检测速度send will emit file capabilities after chown
在更改所有者后,send 将发出文件功能
Core changes: 核心变更:
improved global block reserve utilization
改进全局块保留利用率direct io cleanups and fixes
直接 I/O 清理和修复refactored block group reading code
重构的块组读取代码
5.9 (Oct 2020) 5.9(2020 年 10 月)
Pull requests:
v5.9-rc1,
v5.9-rc1,
v5.9-rc3,
v5.9-rc4,
v5.9-rc4,
v5.9-rc5,
v5.9-rc6,
v5.9-rc7,
v5.9-rc8
拉取请求:v5.9-rc1,v5.9-rc1,v5.9-rc3,v5.9-rc4,v5.9-rc4,v5.9-rc5,v5.9-rc6,v5.9-rc7,v5.9-rc8
Hilights: 亮点:
add mount option ‘’rescue’’ to unify options for various recovery tasks on a mounted filesystems
在挂载的文件系统上为各种恢复任务添加挂载选项“rescue”以统一选项mount option ‘’inode_cache’’ is deprecated and will be removed in 5.11
挂载选项“inode_cache”已被弃用,并将在 5.11 中移除removed deprecated options ‘’alloc_start’’ and ‘’subvolrootid’’
移除了已弃用的选项“alloc_start”和“subvolrootid”sysfs exports information about qgroups and relations
sysfs 导出有关 qgroups 和关系的信息FS_INFO ioctl exports more information from the filesystem (notably type of checksum)
FS_INFO ioctl 从文件系统中导出更多信息(特别是校验和类型)running balance detects Ctrl-C too
运行余额也检测到 Ctrl-Cperformance improvements in fsync
fsync 中的性能改进mount-time prefetch of chunk tree
挂载时对块树进行预取
5.10 (Dec 2020) 5.10(2020 年 12 月)
Pull requests:
v5.10-rc1,
v5.10-rc2,
v5.10-rc4,
v5.10-rc6
拉取请求:v5.10-rc1,v5.10-rc2,v5.10-rc4,v5.10-rc6
Hilights: 亮点:
performance improvements in fsync (dbench workload: higher throughput, lower latency)
fsync 中的性能改进(dbench 工作负载:吞吐量更高,延迟更低)sysfs exports current exclusive operataion (balance, resize, device add/del/…)
sysfs 导出当前的独占操作(平衡、调整大小、设备添加/删除等)sysfs exports supported send stream version
sysfs 导出支持的发送流版本
Core: 核心:
direct io uses iomap infrastructure (no more ‘’struct buffer_head’’)
直接 io 使用 iomap 基础设施(不再使用“struct buffer_head”)space reservations for data now use ticket infrastructure
数据的空间保留现在使用票务基础设施cleanups, refactoring, preparatory work
清理,重构,准备工作error handling improvements
错误处理改进fixes 修复
5.11 (Feb 2021) 5.11(2021 年 2 月)
Pull requests:
v5.11-rc1,
v5.11-rc3,
v5.11-rc4,
v5.11-rc5,
v5.11-rc6,
v5.11
拉取请求:v5.11-rc1,v5.11-rc3,v5.11-rc4,v5.11-rc5,v5.11-rc6,v5.11
new mount option ‘’rescue’’, various modes how to access a damaged filesystem
新的挂载选项“rescue”,各种模式如何访问损坏的文件系统sysfs updates: filesystem generation, supported ‘’rescue’’ modes, read mirror policy
sysfs 更新:文件系统生成,支持“救援”模式,读取镜像策略removed feature: ‘’mount -o inode_cache’’
移除功能:“mount -o inode_cache”free space tree fixes, v1 cache removed during conversion
空闲空间树修复,转换期间移除 v1 缓存
Core: 核心:
locking switched to standard rw semaphores
锁定切换为标准的读写信号量direct IO ported to iomap infrastructure
直接 IO 移植到 iomap 基础设施zoned allocation mode preparation
区域分配模式准备subpage blocksize preparation
子页面块大小准备various performance improvements (skipping unnecessary work)
各种性能改进(跳过不必要的工作)
5.12 (Apr 2021) 5.12(2021 年 4 月)
Pull requests:
v5.12-rc1,
v5.12-rc1,
v5.12-rc2,
v5.12-rc2,
v5.12-rc2,
v5.12-rc4,
v5.12-rc5,
v5.12-rc7
拉取请求:v5.12-rc1,v5.12-rc1,v5.12-rc2,v5.12-rc2,v5.12-rc2,v5.12-rc4,v5.12-rc5,v5.12-rc7
Features: 特性:
zoned mode (SMR/ZBC/ZNS friendly allocation mode), first working version with limitations
分区模式(SMR/ZBC/ZNS 友好分配模式),带有限制的第一个工作版本misc performance improvements
杂项性能改进flushing and ticket space reservations
刷新和票据空间预留preemptive background flushing
预防性后台刷新less lock contention for delayed refs
延迟引用的锁争用减少dbench-like workload (+7% throughput, -20% latency)
类似 dbench 的工作负载(吞吐量增加 7%,延迟降低 20%)
Core changes: 核心变更:
subpage block size support peparations
子页面块大小支持准备工作
Fixes: 修复:
swapfile fixes (vs scrub, activation vs snapshot creation)
交换文件修复(与清洗、激活与快照创建相比)
5.13 (Jun 2021) 5.13(2021 年 6 月)
Pull requests:
v5.13-rc1,
v5.13-rc2,
v5.13-rc2,
v5.13-rc3,
v5.13-rc3,
v5.13-rc5,
v5.13-rc6,
v5.13-rc7
拉取请求:v5.13-rc1、v5.13-rc2、v5.13-rc2、v5.13-rc3、v5.13-rc3、v5.13-rc5、v5.13-rc6、v5.13-rc7
User visible improvements
用户可见的改进
readahead for send, improving run time of full send by 10% and for incremental by 25%
为发送添加预读,将完整发送的运行时间提高了 10%,增量发送提高了 25%make reflinks respect O_SYNC, O_DSYNC and S_SYNC flags
使 reflinks 遵守 O_SYNC、O_DSYNC 和 S_SYNC 标志export supported sectorsize values in sysfs (currently only page size, more once full subpage support lands)
在 sysfs 中导出支持的扇区大小值(目前仅支持页面大小,更多内容将在完整的子页面支持到位后提供)more graceful errors and warnings on 32bit systems when logical addresses for metadata reach the limit posed by unsigned long in page::index
当 32 位系统中用于元数据的逻辑地址达到 page::index 中无符号长整型所限制的极限时,提供更加优雅的错误和警告error: fail mount if there’s a metadata block beyond the limit
错误:如果存在超出限制的元数据块,则挂载失败error: new metadata block would be at unreachable address
错误:新的元数据块将位于无法访问的地址warn when 5/8th of the limit is reached, for 4K page systems it’s 10T, for 64K page it’s 160T
当达到限制的 5/8 时发出警告,对于 4K 页面系统,限制为 10T,对于 64K 页面,限制为 160T
zoned mode 分区模式
relocated zones get reset at the end instead of discard
重新定位的区域在结束时重置而不是丢弃automatic background reclaim of zones that have 75%+ of unusable space, the threshold is tunable in sysfs
具有 75%以上不可用空间的区域的自动后台回收,阈值可在 sysfs 中调整
Fixes 修复
fix inefficient preemptive reclaim calculations
修复低效的抢占式回收计算fix exhaustion of the system chunk array due to concurrent allocations
修复由于并发分配导致系统块数组耗尽的问题fix fallback to no compression when racing with remount
修复与重新挂载竞争时回退到无压缩的问题fix unmountable seed device after fstrim
修复 fstrim 后无法卸载的种子设备fix fiemap to print extents that could get misreported due to internal extent splitting and logical merging for fiemap output
修复 fiemap 以打印可能由于内部范围分割和逻辑合并而被错误报告的范围,用于 fiemap 输出preemptive fix for dm-crypt on zoned device that does not properly advertise zoned support
针对不正确地宣传分区支持的分区设备上的 dm-crypt 的预防性修复
Core changes 核心更改
add inode lock to synchronize mmap and other block updates (e.g. deduplication, fallocate, fsync)
添加 inode 锁以同步 mmap 和其他块更新(例如去重、fallocate、fsync)subpage support update: metadata changes now support read and write
子页面支持更新:元数据更改现在支持读和写error handling through out relocation call paths
通过重定位调用路径进行错误处理many other cleanups and code simplifications
许多其他清理和代码简化
5.14 (Aug 2021) 5.14(2021 年 8 月)
Pull requests:
v5.14-rc1,
v5.14-rc2,
v5.14-rc3,
v5.14-rc4,
v5.14-rc7,
v5.14
拉取请求:v5.14-rc1,v5.14-rc2,v5.14-rc3,v5.14-rc4,v5.14-rc7,v5.14
Hilights: 亮点:
new sysfs knob to limit scrub IO bandwidth per device
新的 sysfs 旋钮,用于限制每个设备的扫描 IO 带宽device stats are also available in /sys/fs/btrfs/FSID/devinfo/DEVID/error_stats
设备统计信息也可以在 /sys/fs/btrfs/FSID/devinfo/DEVID/error_stats 中找到support cancellable resize and device delete ioctls
支持可取消的调整大小和设备删除 ioctlschange how the empty value is interpreted when setting a property, so far we have only ‘btrfs.compression’ and we need to distinguish a reset to defaults and setting “do not compress”, in general the empty value will always mean ‘reset to defaults’ for any other property, for compression it’s either ‘no’ or ‘none’ to forbid compression
更改设置属性时如何解释空值,到目前为止我们只有 'btrfs.compression',我们需要区分重置为默认值和设置“不压缩”,通常空值对于任何其他属性都意味着“重置为默认值”,对于压缩来说,要么是 'no' 要么是 'none' 来禁止压缩performance improvements (xattrs, truncate)
性能改进(xattrs,截断)space handling improvements, preemptive flushing
空间处理改进,预防性刷新more subpage support preparation
更多子页面支持准备工作
5.15 (Nov 2021) 5.15(2021 年 11 月)
Pull requests:
v5.15-rc1,
v5.15-rc1,
v5.15-rc3,
v5.15-rc6,
v5.15
拉取请求:v5.15-rc1,v5.15-rc1,v5.15-rc3,v5.15-rc6,v5.15
Features: 特性:
fs-verity support, using standard ioctls, backward compatible with read-only limitation on inodes with previously enabled fs-verity
fs-verity 支持,使用标准的 ioctls,在以前启用 fs-verity 的 inode 上向后兼容的只读限制idmapped mount support 支持 idmapped 挂载
make mount with rescue=ibadroots more tolerant to partially damaged trees
使 rescue=ibadroots 挂载更容忍部分损坏的树allow raid0 on a single device and raid10 on two devices, degenerate cases but might be useful as an intermediate step during conversion to other profiles
允许在单个设备上进行 raid0 和在两个设备上进行 raid10,退化情况但在转换为其他配置文件时可能有用作为中间步骤zoned mode block group auto reclaim can be disabled via sysfs knob
区域模式块组自动回收可以通过 sysfs 旋钮禁用
Performance improvements:
性能改进:
continue readahead of node siblings even if target node is in memory, could speed up full send (on sample test +11%)
即使目标节点在内存中,也可以继续预读节点兄弟,可能会加快完整发送速度(在示例测试中 +11%)batching of delayed items can speed up creating many files
延迟项目的批处理可以加快创建许多文件的速度fsync/tree-log speedups fsync/tree-log 速度提升
avoid unnecessary work (gains +2% throughput, -2% run time on sample load)
避免不必要的工作(吞吐量增加 2%,样本负载运行时间减少 2%)reduced lock contention on renames (on dbench +4% throughput, up to -30% latency)
减少重命名时的锁争用(在 dbench 上 +4% 的吞吐量,最多减少 -30% 的延迟)
Fixes: 修复:
various zoned mode fixes 各种分区模式修复
preemptive flushing threshold tuning, avoid excessive work on almost full filesystems
预防性刷新阈值调整,避免在几乎满文件系统上进行过多工作
Core: 核心:
continued subpage support, preparation for implementing remaining features like compression and defragmentation; with some limitations, write is now enabled on 64K page systems with 4K sectors, still considered experimental
持续支持子页面,为实现剩余功能如压缩和碎片整理做准备;带有一些限制,现在在具有 4K 扇区的 64K 页面系统上启用了写入,仍被视为实验性no readahead on compressed reads
压缩读取时没有预读inline extents disabled 禁用内联范围
disabled raid56 profile conversion and mount
禁用 RAID56 配置文件转换和挂载
improved flushing logic, fixing early ENOSPC on some workloads
改进的刷新逻辑,修复某些工作负载上早期的 ENOSPC 问题inode flags have been internally split to read-only and read-write incompat bit parts, used by fs-verity
i 节点标志已在内部分为只读和读写不兼容位部分,被 fs-verity 使用new tree items for fs-verity: descriptor item, Merkle tree item
fs-verity 的新树项:描述符项,默克尔树项inode operations extended to be namespace-aware
inode 操作扩展为命名空间感知cleanups and refactoring 清理和重构
5.16 (Jan 2022) 5.16(2022 年 1 月)
Pull requests:
v5.16-rc1,
v5.16-rc1,
v5.16-rc2,
v5.16-rc3,
v5.16-rc5,
v5.16-rc6
拉取请求:v5.16-rc1,v5.16-rc1,v5.16-rc2,v5.16-rc3,v5.16-rc5,v5.16-rc6
Related projects: kernel port of zstd 1.4.10 also
[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c8c109546a19613d323a319d0c921cb1f317e629
released] in 5.16
相关项目:zstd 1.4.10 内核移植也在 5.16 中发布 [ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c8c109546a19613d323a319d0c921cb1f317e629]
Performance related: 性能相关:
misc small inode logging improvements (+3% throughput, -11% latency on sample dbench workload)
杂项小的 inode 记录改进(+3% 吞吐量,-11% 延迟在示例 dbench 工作负载上)more efficient directory logging: bulk item insertion, less tree searches and locking
更高效的目录日志记录:批量项目插入,减少树搜索和锁定speed up bulk insertion of items into a b-tree, which is used when logging directories, when running delayed items for directories (fsync and transaction commits) and when running the slow path (full sync) of an fsync (bulk creation run time -4%, deletion -12%)
加快将项目批量插入到 b 树中,用于记录目录时,运行延迟项目以进行目录操作(fsync 和事务提交),以及运行 fsync 的慢路径(全同步)时(批量创建运行时间减少 4%,删除减少 12%)
Core: 核心:
continued subpage support
继续支持子页面make defragmentation work
使碎片整理工作make compression write work
使压缩写入工作
zoned mode 分区模式
support ZNS (zoned namespaces), zone capacity is number of usable blocks in each zone
支持 ZNS(分区命名空间),每个分区中可用块的数量是区域容量add dedicated block group (zoned) for relocation, to prevent out of order writes in some cases
添加专用块组(分区)用于重定位,以防止某些情况下的乱序写入greedy block group reclaim, pick the ones with least usable space first
贪婪块组回收,首先选择可用空间最少的块组
preparatory work for send protocol updates
发送协议更新的准备工作error handling improvements
错误处理改进cleanups and refactoring 清理和重构
5.17 (Mar 2022) 5.17(2022 年 3 月)
Pull requests:
v5.17-rc1,
v5.17-rc2,
v5.17-rc3,
v5.17-rc5,
v5.17-rc6,
v5.17-rc7
拉取请求: v5.17-rc1, v5.17-rc2, v5.17-rc3, v5.17-rc5, v5.17-rc6, v5.17-rc7
Features: 特性:
make send work with concurrent block group relocation
使发送与并发块组重定位一起工作new exclusive operation ‘balance paused’ to allow adding a device to filesystem with paused balance
新的独占操作“平衡暂停”,允许在暂停平衡的情况下向文件系统添加设备new sysfs file for fsid stored in the per-device directory to help distinguish devices when seeding is enabled
新的 sysfs 文件用于存储在每个设备目录中的 fsid,以帮助在启用种子时区分设备
Performance: 性能:
less metadata needed for directory logging, directory deletion is 20-40% faster
目录日志记录所需的元数据较少,目录删除速度提高了 20-40%in zoned mode, cache zone information during mount to speed up repeated queries (about 50% speedup)
在分区模式下,在挂载期间缓存分区信息以加快重复查询的速度(约 50%的加速)free space tree entries get indexed and searched by size (latency -30%, search run time -30%)
空闲空间树条目按大小进行索引和搜索(延迟减少 30%,搜索运行时间减少 30%)less contention in tree node locking when inserting a key and no splits are needed (files/sec in fsmark improves by 1-20%)
在插入键时,如果不需要拆分,则树节点锁定中的争用较少(fsmark 中的文件/秒提高了 1-20%)
Fixes: 修复:
defrag rewrite from 5.16 fixed
从 5.16 版本开始的碎片整理重写get rid of warning when mounted with flushoncommit
当挂载时消除警告
Core: 核心:
global reserve stealing got simplified and cleaned up in evict
全局保留窃取在驱逐中得到简化和清理more preparatory work for extent tree v2
为 extent tree v2 做更多的准备工作remove readahead framework
移除预读框架error handling improvements
错误处理改进for other changes see the [https://git.kernel.org/linus/d601e58c5f2901783428bc1181e83ff783592b6b pull request]
查看其他更改请参阅[https://git.kernel.org/linus/d601e58c5f2901783428bc1181e83ff783592b6b 拉取请求]
5.18 (May 2022) 5.18(2022 年 5 月)
Pull requests:
v5.18-rc1,
v5.18-rc2,
v5.18-rc3,
v5.18-rc5,
v5.18-rc6,
v5.18-rc6
拉取请求:v5.18-rc1,v5.18-rc2,v5.18-rc3,v5.18-rc5,v5.18-rc6
encoded read/write ioctls, allows user space to read or write raw data directly to extents (now compressed, encrypted in the future), will be used by send/receive v2 where it saves processing time
编码读/写 ioctls,允许用户空间直接读取或写入原始数据到 extents(现在压缩,将来加密),将被发送/接收 v2 使用,以节省处理时间zoned mode now works with metadata DUP (the mkfs.btrfs default)
分区模式现在与元数据 DUP(mkfs.btrfs 默认值)配合使用allow reflinks/deduplication from two different mounts of the same filesystem
允许从同一文件系统的两个不同挂载点进行重定向/去重复操作error message header updates:
错误消息标题更新:print error state: transaction abort, other error, log tree errors
打印错误状态:事务中止,其他错误,日志树错误print transient filesystem state: remount, device replace, ignored checksum verifications
打印瞬态文件系统状态:重新挂载,设备替换,忽略校验和验证
tree-checker: verify the transaction id of the to-be-written dirty extent buffer
tree-checker: 验证待写入的脏扩展缓冲区的事务 IDfsync speedups fsync 速度提升
directory logging speedups (up to -90% run time)
目录日志速度提升(运行时间减少至-90%)avoid logging all directory changes during renames (up to -60% run time)
避免在重命名过程中记录所有目录更改(运行时间减少高达-60%)avoid inode logging during rename and link when possible (up to -60% run time)
在可能的情况下,避免在重命名和链接过程中记录索引节点更改(运行时间减少高达-60%)prepare extents to be logged before locking a log tree path (throughput +7%)
在锁定日志树路径之前准备要记录的范围(吞吐量增加 7%)stop copying old file extents when doing a full fsync ()
在执行完整的 fsync() 时停止复制旧文件范围improved logging of old extents after truncate
在截断后改进旧范围的日志记录
remove balance v1 ioctl, superseded by v2 in 2012
删除 balance v1 ioctl,2012 年被 v2 取代
Core, fixes: 核心,修复:
continued extent tree v2 preparatory work
继续扩展树 v2 的准备工作disable features that won’t work yet
禁用尚未工作的功能add wrappers and abstractions for new tree roots
为新的树根添加包装和抽象
prevent deleting subvolume with active swapfile
防止删除具有活动交换文件的子卷remove device count in superblock and its item in one transaction so they cant’t get out of sync
在一个事务中删除超级块中的设备计数及其项目,以防止它们不同步for subpage, force the free space v2 mount to avoid a warning and make it easy to switch a filesystem on different page size systems
为子页面,强制使用 free space v2 挂载,以避免警告并使在不同页面大小系统上切换文件系统变得更容易export sysfs status of exclusive operation ‘balance paused’, so the user space tools can recognize it and allow adding a device with paused balance
导出独占操作“平衡暂停”的 sysfs 状态,以便用户空间工具可以识别并允许添加一个暂停平衡的设备
5.19 (Jul 2022) 5.19(2022 年 7 月)
Pull requests:
v5.19-rc1,
v5.19-rc4,
v5.19-rc4,
v5.19-rc7,
v5.19-rc7
拉取请求:v5.19-rc1,v5.19-rc4,v5.19-rc4,v5.19-rc7,v5.19-rc7
Features: 特性:
subpage: 子页面:
support on PAGE_SIZE > 4K (previously only 64K)
支持 PAGE_SIZE > 4K(之前仅支持 64K)make it work with raid56
使其与 raid56 兼容prevent remount with v1 space cache
防止使用 v1 空间缓存重新挂载
repair super block num_devices automatically if it does not match the number of device items
如果超级块 num_devices 与设备项数不匹配,则自动修复defrag can convert inline extents to regular extents, up to now inline files were skipped but the setting of mount option max_inline could affect the decision logic
defrag 可以将内联范围转换为常规范围,到目前为止,内联文件被跳过,但挂载选项 max_inline 的设置可能会影响决策逻辑zoned: 分区:
minimal accepted zone size is explicitly set to 4MiB
明确将最小接受区域大小设置为 4MiBmake zone reclaim less aggressive and don’t reclaim if there are enough free zones
使区域回收不那么激进,如果有足够的空闲区域,则不回收add per-profile sysfs tunable of the reclaim threshold
添加每个配置文件的 sysfs 可调整的回收阈值
allow automatic block group reclaim for non-zoned filesystems, with sysfs tunables
允许非分区文件系统自动块组回收,使用 sysfs 可调参数tree-checker: new check, compare extent buffer owner against owner rootid
tree-checker: 新检查,比较范围缓冲区所有者与所有者 rootid
Performance: 性能:
avoid blocking on space reservation when doing nowait direct io writes, (+7% throughput for reads and writes)
在进行无等待直接 io 写入时避免在空间保留上阻塞,(读写吞吐量增加 7%)NOCOW write throughput improvement due to refined locking (+3%)
由于锁定精炼,NOCOW 写入吞吐量提高(+3%)send: reduce pressure to page cache by dropping extent pages right after they’re processed
发送:通过在处理完后立即丢弃范围页减少对页面缓存的压力
4.x
4.0 (Apr 2015) 4.0(2015 年 4 月)
file creation time is stored (no easy interface to read it yet)
文件创建时间已存储(尚无易于读取的接口)fsync and log replay fixes
fsync 和日志重放修复lots of cleanups and other fixes
大量清理和其他修复
4.1 (Jun 2015) 4.1(2015 年 6 月)
Fixes: 修复:
regression in chunk removal, conversion to raid1 possible again
在块移除中的回归,再次转换为 raid1 可能log tree corruption fix with ‘’-o discard’’ mount
使用 ‘’-o discard’’ 挂载修复日志树损坏bare xattr namespace attribute is not accepted
不接受裸 xattr 命名空间属性orphan cleanup is started for implicitly mounted default subvolume
针对隐式挂载的默认子卷开始孤立清理send fixes 发送修复
cloning within same file 在同一文件内进行克隆
EXTENT_SAME ioctl infinite loop fix
EXTENT_SAME ioctl 无限循环修复avoid more ENOSPC in delayed-iput context
避免延迟 iput 上下文中更多的 ENOSPCa few ENOMEM fixes 几个 ENOMEM 修复
‘automatic empty block group removal’ fixups
自动清空块组修复
Speedups: 速度提升:
large file deletion: run delayed refs more often
大文件删除:更频繁运行延迟引用large file deletion: don’t build up too much work from crc
大文件删除:不要在 crc 中累积太多工作transaction commit latency improved
事务提交延迟改善block group cache writeout
块组缓存写出
Qgroup:
limits are shared upon snapshot
限制在快照上共享allow to remove qgroup which has parent but no child
允许删除具有父项但没有子项的 qgroupfix status of qgroup consistency after rescan
修复重新扫描后的 qgroup 一致性状态fix quota status bits after dsiabling
修复禁用后的配额状态位mark qgroups inconsistent after assign/delete actions
在分配/删除操作后标记 qgroups 不一致code cleanups 代码清理
4.2 (Aug 2015) 4.2(2015 年 8 月)
Enhancements: 增强功能:
transaction abort now reports the caller, not the helper function
事务中止现在报告调用者,而不是辅助函数INO_LOOKUP ioctl: unprivileged if used to just get the rootid (aka. subvolume id)
INO_LOOKUP ioctl:如果仅用于获取根 ID(也称为子卷 ID),则无需特权unified ‘’subvol=’’ and ‘’subvolid=’’ mounting, show the mounted subvol in mount options; also, ‘’/proc/self/mountinfo’’ now always correctly shows the mounted subvolume
统一了 'subvol=' 和 'subvolid=' 挂载,显示挂载的子卷在挂载选项中;另外,'/proc/self/mountinfo' 现在始终正确显示已挂载的子卷reworked internal qgroup logic
重新设计了内部 qgroup 逻辑send: use received_uuid of parent during send
send: 在发送过程中使用父级的 received_uuidsysfs: preparatory works for exporting more stats about devices
sysfs:准备工作,用于导出有关设备更多统计信息deduplication on the same inode works
相同索引节点上的重复数据删除有效deduplication does not change mtime/ctime
重复数据删除不会更改修改时间/创建时间
Fixes: 修复:
in send: cloning, renames, orphans
在发送中:克隆、重命名、孤立few more ENOSPC fixes in case of block group creation/removal
在块组创建/移除时修复了更多的 ENOSPC 问题fix hang during inode eviction due to concurrent readahead
修复由于并发预读取导致的索引节点逐出挂起问题EXTENT_SAME ioctl: handle unaligned length
EXTENT_SAME ioctl:处理不对齐的长度more fixes around automatic block group removal
关于自动块组移除的更多修复deadlock with EXTENT_SAME and readahead
使用 EXTENT_SAME 和 readahead 时死锁for feature NO_HOLES: fsync, truncate
对于 NO_HOLES 功能:fsync,truncate
4.3 (Nov 2015) 4.3(2015 年 11 月)
fix raid56 rebuild with missing device
修复 RAID56 重建时缺失设备的问题discard ioctl will return the number of bytes
丢弃 ioctl 将返回字节数more bugfixes and cleanups
更多的错误修复和清理工作
4.4 (Jan 2016) 4.4(2016 年 1 月)
send fixes: cloning, sending with parent
发送修复:克隆,使用父级发送improved handling of framgented space using bitmaps
改进了使用位图处理碎片空间new mount option for debugging: fragment=data|metadata|all
用于调试的新挂载选项: fragment=data|metadata|allupdated balance filters: limit, stripes, usage
更新的余额过滤器: 限制,条纹,使用情况more bugfixes and cleanups
更多的错误修复和清理工作
4.5 (Mar 2016) 4.5(2016 年 3 月)
free space cache v2: an incompat feature to track the free space cache as a b-tree
free space cache v2:一项不兼容的功能,用于将空闲空间缓存作为 B 树进行跟踪balance: - ‘-dconvert=dup’ supported - continue but warn if metadata have lower redundancy than data
balance:-支持'-dconvert=dup' - 如果元数据的冗余性低于数据,则继续但发出警告fix: trim does not overwrite bootloader area (introduced in 4.3, fixed in 4.4.x stable kernels)
修复:修剪不会覆盖引导加载程序区域(在 4.3 中引入,在 4.4.x 稳定内核中修复)assorted bugfixes, improvements or cleanups
各种错误修复,改进或清理
4.6 (May 2016) 4.6(2016 年 5 月)
mount options: 挂载选项:
usebackuproot - replace ‘recovery’ (works but is deprecated)
usebackuproot - 替换 'recovery'(可用但已被弃用)logreplay, nologreplay - disable log replay at mount time, does no writes to the device
logreplay, nologreplay - 在挂载时禁用日志重放,不对设备进行写操作norecovery - synthetic option to disable recovery at mount time and disable writes (now does: nologreplay)
norecovery - 在挂载时禁用恢复和禁用写入的合成选项(现在为:nologreplay)
default inline limit is now 2048 (instead of page size, usually 4096)
默认的内联限制现在为 2048(而不是页面大小,通常为 4096)/dev/btrfs-control now understands the GET_SUPPORTE_FEATURES ioctl
/dev/btrfs-control 现在理解 GET_SUPPORTE_FEATURES ioctlget rid of harmless message “’’could not find root %llu’’”
摆脱无害消息“’’无法找到根 %llu’’”preparatory work for subpage-blocksize patchset
为子页面块大小补丁集做准备工作fix bug when using overlayfs
修复在使用 overlayfs 时的错误fixes in readahead, log replay, fsync, and more
修复了预读、日志重放、fsync 等问题
4.7 (Jul 2016) 4.7(2016 年 7 月)
allow balancing to dup with multi-device
允许在多设备上进行重复平衡device deletion by id (additionally to by path)
按 ID 删除设备(另外还可以按路径删除)renameat2: add support for RENAME_EXCHANGE and RENAME_WHITEOUT
renameat2:增加对 RENAME_EXCHANGE 和 RENAME_WHITEOUT 的支持enhanced selftests 增强的自检
more preparatory work for “blocksize < page size”
“块大小 < 页大小” 的更多准备工作more validation checks of superblock (discovered by fuzzing)
超级块的更多验证检查(由模糊测试发现)advertise which crc32c implementation is being used at module load
在模块加载时广告正在使用的 crc32c 实现fixed space report by ‘’df’’ with mixed block groups
通过“df”修复了混合块组的固定空间报告log replay fixes 日志重放修复
device replace fixes 设备替换修复
4.8 (Oct 2016) 4.8(2016 年 10 月)
space reservations and handling uses ticketed system, this should improve latency and fairness in case when there are several threads blocked on flushing
空间预留和处理使用了带票系统,这应该提高了延迟和公平性,尤其是在有多个线程在刷新时被阻塞的情况下fixes of bugs triggered by fuzzed images
修复了由模糊图像触发的错误global ratelmit of all printed messages
所有打印消息的全局速率限制several send, qgroup fixes
几个发送,qgroup 修复cleanups 清理工作
4.9 (Dec 2016) 4.9(2016 年 12 月)
improved performance of extent sharing detection in FIEMAP
提高了 FIEMAP 中范围共享检测的性能
Fixes: 修复:
device delete hang at the end of the operation
设备删除在操作结束时挂起free space tree bitmap endianity fixed on big-endian machines
在大端机器上固定的空闲空间树位图字节序parallel incremental send and balance issue fixed
并行增量发送和平衡问题已修复cloning ioctl can be interrupted by a fatal signal
克隆 ioctl 可能会被致命信号中断other stability fixes or cleanups
其他稳定性修复或清理
4.10 (Feb 2017) 4.10(2017 年 2 月)
balance: human readable block group descripion in the log
平衡:日志中的可读块组描述balance: fix storing of stripes_min, stripes_max filters to the on-disk item
修复将 stripes_min、stripes_max 过滤器存储到磁盘项的平衡问题qgroup: fix accounting bug during concurrent balance run
修复并发平衡运行期间的会计错误better worker thread resource limit checks
改进工作线程资源限制检查fix ENOSPC during hole punching
在戳洞过程中修复 ENOSPCfix ENOSPC when reflinking a heavily fragmented file
修复在对高度碎片化的文件进行重定向时出现的 ENOSPCfix crash when certain tracepoints are enabled
修复启用某些跟踪点时崩溃的问题fix compat ioctl calls on non-compat systems
修复非兼容系统上的兼容 ioctl 调用improved delayed ref iteration performance
改进延迟引用迭代性能many cleanups 许多清理工作
4.11 (May 2017) 4.11(2017 年 5 月)
mostly a cleanup release 主要是一次清理发布
improved csum mismatch messages
改进了校验和不匹配的消息move some qgroup work out of transaction commit
将一些 qgroup 工作移出事务提交let unlink temporarily exceed quotas
允许解除链接暂时超出配额fix truncate and lockless DIO writes
修复截断和无锁 DIO 写入incremental send fixes 增量发送修复
fix remount using ssd and nossd combinations
修复使用 ssd 和 nossd 组合重新挂载
4.12 (Jul 2017) 4.12(2017 年 7 月)
new tracepoints: file item
新的跟踪点:文件项fix qgoup accounting when inode_cache is in use
在使用 inode_cache 时修复 qgoup 记账fix incorrect number report in stat::t_blocks under certain conditions
修复在某些条件下 stat::t_blocks 报告的不正确数字raid56 fixes: raid56 修复:
enable auto-repair during read (ie. similar to what raid1 and raid10 do)
在读取过程中启用自动修复(即类似于 raid1 和 raid10 的操作)fix potential crash with concurrent scrub and dev-replace
修复可能发生的并发 scrub 和 dev-replace 引起的崩溃fix potential crash when cancelling dev-replace
取消 dev-replace 时修复潜在崩溃问题fix false reports during scrub when it’s possible to do repair
修复在可能进行修复时进行 scrub 时出现错误报告的问题fix wrong mirror report during repair
修复修复过程中错误的镜像报告
many cleanups 许多清理工作
4.13 (Sep 2017) 4.13(2017 年 9 月)
deprecated: mount option ‘’alloc_start’’
弃用:挂载选项“alloc_start”qgroups: new sysctl to allow temporary quota override with CAP_SYS_RESOURCE
qgroups: 新的 sysctl 允许使用 CAP_SYS_RESOURCE 临时覆盖配额statx syscall support statx 系统调用支持
nowait AIO support nowait AIO 支持
lots of cleanups around bio processing and error handling
围绕生物处理和错误处理进行了大量清理memory allocation constraint cleanups and improvements
内存分配约束的清理和改进more sanity checks (for dir_item)
更多的合理性检查(针对 dir_item)compression will be skipped if there’s no improvement (at least one block)
如果没有改进(至少一个块),则将跳过压缩fix invalid extent maps due to hole punching
修复由于打孔而导致的无效范围映射fix: sgid not cleared when changing acls
修复:更改 ACL 时未清除 sgidsome enospc corner case fixes
一些 enospc 角落案例修复send fixes 发送修复
other cleanups 其他清理工作
4.14 (Nov 2017) 4.14(2017 年 11 月)
added zstd compression 添加了 zstd 压缩
fine-grained check for degraded mount (verify raid constraints on chunk level, not device level)
对降级挂载进行了细粒度检查(在块级别而不是设备级别验证 RAID 约束)userspace transaction ioctl has been deprecated, scheduled for removal in 4.17
用户空间事务 ioctl 已被弃用,计划在 4.17 版本中移除foundation code for compression heuristics
用于压缩启发式算法的基础代码mount option ‘ssd’ does not force block allocation alignments
挂载选项 'ssd' 不会强制块分配对齐
Fixes: 修复:
potential raid repair and compression crash
潜在的阵列修复和压缩崩溃prevent to set invalid default subvolid
防止设置无效的默认 subvolidresume qgroup rescan on rw remount
在读写重新挂载时恢复 qgroup 重新扫描better reporting of detected checksum mismatches for DIO
DIO 检测到的校验和不匹配问题的更好报告compression for defrag vs per-file behaves as expected, respecting the requested value
与每个文件的压缩相比,碎片整理的行为符合预期,尊重请求的值possible deadlock with readdir and pagefault
readdir 和 pagefault 可能会导致死锁emission of invalid clone operations in send
发送无效克隆操作的发射cleanups and refactoring 清理和重构
4.15 (Jan 2018) 4.15(2018 年 1 月)
New features: 新功能:
extend mount options to specify zlib compression level, <i>-o compress=zlib:9</i>
扩展挂载选项以指定 zlib 压缩级别,<i>-o compress=zlib:9</i>v2 of ioctl “extent to inode mapping”
ioctl 的 v2 版本“范围到索引节点映射”populate compression heuristics logic
填充压缩启发式逻辑enable indexing for btrfs as lower filesystem in overlayfs
在 overlayfs 中将 btrfs 作为底层文件系统启用索引speedup page cache readahead during send on large files
在大文件上加速页面缓存预读取
Internal changes: 内部更改:
more sanity checks of b-tree items when reading them from disk
从磁盘读取 B 树项时进行更多的健全性检查more EINVAL/EUCLEAN fixups, missing BLK_STS_* conversion, other errno or error handling fixes
更多的 EINVAL/EUCLEAN 修复,缺少的 BLK_STS_* 转换,其他 errno 或错误处理修复remove some homegrown IO-related logic, that’s been obsoleted by core block layer changes (batching, plug/unplug, own counters)
移除一些自制的与 IO 相关的逻辑,这些逻辑已经被核心块层更改所淘汰(批处理,插入/拔出,自有计数器)add ref-verify, optional debugging feature to verify extent reference accounting
添加 ref-verify,可选的调试功能来验证范围引用计数simplify code handling outstanding extents, make it more clear where and how the accounting is done
简化代码处理未完成的范围,使得在哪里以及如何进行计算更加清晰make delalloc reservations per-inode, simplify the code and make the logic more straightforward
按照每个 inode 进行 delalloc 预留,简化代码并使逻辑更加直观extensive cleanup of delayed refs code
延迟引用代码的大规模清理fix send ioctl on 32bit with 64bit kernel
修复在 32 位系统上使用 64 位内核发送 ioctl 的问题
4.16 (Apr 2018) 4.16 (2018 年 4 月)
fallocate: implement zero range mode
fallocate: 实现零范围模式avoid losing data raid profile when deleting a device
删除设备时避免丢失数据 RAID 配置文件tree item checker: more checks for directory items and xattrs
树项目检查器: 对目录项目和扩展属性进行更多检查raid56 recovery: don’t use cached stripes, that could be potentially changed and a later RMW or recovery would lead to corruptions or failures
raid56 恢复:不要使用缓存条带,因为这可能会被更改,后续的 RMW 或恢复可能导致损坏或失败let raid56 try harder to rebuild damaged data, reading from all stripes if necessary
让 raid56 更努力地重建损坏的数据,必要时从所有条带读取fix scrub to repair raid56 in a similar way as in the case above
修复 scrub 以类似的方式修复 raid56,就像上面的情况一样cleanups: device freeing, removed some call indirections, redundant bio_put/_get, unused parameters, refactorings and renames
清理:设备释放,删除一些调用间接性,冗余的 bio_put/_get,未使用的参数,重构和重命名RCU list traversal fixups
RCU 列表遍历修复simplify mount callchain, remove recursing back when mounting a subvolume
简化挂载调用链,当挂载子卷时删除递归返回plug for fsync, may improve bio merging on multiple devices
用于 fsync 的插件,可能会改善在多个设备上的生物合并compression heuristic: replace heap sort with radix sort, gains some performance
压缩启发式:用基数排序替换堆排序,提高一些性能add extent map selftests, buffered write vs dio
添加范围映射自测,缓冲写入 vs 直接 I/Osee [https://git.kernel.org/linus/31466f3ed710e5761077190809e694f55aed5deb pull request]
查看[https://git.kernel.org/linus/31466f3ed710e5761077190809e694f55aed5deb 拉取请求]
4.17 (Jun 2018) 4.17(2018 年 6 月)
mount options: new nossd_spread; subvolid will detect junk after the number and fail the mount
挂载选项:新的 nossd_spread;subvolid 将检测数字后面的垃圾并导致挂载失败add message after cancelled device replace
取消设备替换后添加消息direct module dependency on libcrc32, removed own crc wrappers
直接模块依赖于 libcrc32,移除自己的 crc 包装器removed user space transaction ioctls
移除用户空间事务 ioctlsuse lighter locking when reading /proc/self/mounts (RCU)
在读取 /proc/self/mounts 时使用更轻的锁定(RCU)skip writeback of last page when truncating file to same size
在将文件截断到相同大小时跳过最后一页的写回send: do not issue unnecessary truncate operations
发送:不要发出不必要的截断操作selftests: more tree block validation
自检:更多树块验证fix fsync after hole punching when using no-holes feature
在使用无孔特性时修复戳孔后的 fsyncraid56:
make sure target is identical to source when raid56 rebuild fails after dev-replace
确保在 RAID56 重建失败后进行 dev-replace 时,目标与源相同faster rebuild during scrub, batch by stripes and not block-by-block
在 scrub 过程中更快地重建,按条带批处理而不是逐块处理make more use of cached data when rebuilding from a missing device
在从缺失设备重建时更多地利用缓存数据
[https://git.kernel.org/linus/94514bbe9e5c402c4232af158a295a8fdfd72a2c pull request]
[https://git.kernel.org/linus/94514bbe9e5c402c4232af158a295a8fdfd72a2c 拉取请求]
4.18 (Aug 2018) 4.18(2018 年 8 月)
added support for the ioctl FS_IOC_FSGETXATTR, per-inode flags, successor of GET/SETFLAGS; now supports only existing flags: append, immutable, noatime, nodump, sync
增加对 ioctl FS_IOC_FSGETXATTR、每个 inode 的标志、GET/SETFLAGS 的后继支持;现在仅支持现有标志:append、immutable、noatime、nodump、sync3 new unprivileged ioctls to allow users to enumerate subvolumes
允许用户枚举子卷的 3 个新的非特权 ioctlsdedupe syscall implementation does not restrict the range to 16MiB, though it still splits the whole range to 16MiB chunks
去重系统调用的实现没有限制范围为 16MiB,尽管它仍然将整个范围分割为 16MiB 块on user demand, rmdir() is able to delete an empty subvolume, export the capability in sysfs
根据用户需求,rmdir() 能够删除一个空的子卷,在 sysfs 中导出该功能fix inode number types in tracepoints, other cleanups
修复跟踪点中的索引节点编号类型,其他清理工作send: improved speed when dealing with a large removed directory, measurements show decrease from 2000 minutes to 2 minutes on a directory with 2 million entries
发送:在处理大型已删除目录时提高速度,测量显示在具有 200 万条目的目录上,从 2000 分钟减少到 2 分钟pre-commit check of superblock to detect a mysterious in-memory corruption
针对超级块的预提交检查,以检测内存中的神秘损坏log message updates 日志消息更新
[https://git.kernel.org/linus/704996566f97e0e24c97052f81678060c213c260 pull request]
[https://git.kernel.org/linus/704996566f97e0e24c97052f81678060c213c260 拉取请求]
4.19 (Oct 2018) 4.19(2018 年 10 月)
Hilights, no big changes in this releaase:
本次发布中没有太大的变化:
allow defrag on opened read-only files that have rw permissions
允许对已打开的只读文件进行碎片整理,且具有读写权限tree checker improvements, reported by fuzzing
树检查器改进,由模糊测试报告send, fix incorrect file layout after hole punching beyond eof
在戳洞超出文件结尾后修复不正确的文件布局reset on-disk device stats value after replace
在替换后重置磁盘设备统计值assorted fixes, cleanups and dead code removal
各种修复、清理和删除死代码[https://git.kernel.org/linus/318b067a5dd649d198c2ba00cf7408d778fc00b4 pull request]
[https://git.kernel.org/linus/318b067a5dd649d198c2ba00cf7408d778fc00b4 拉取请求]
4.20 (Dec 2018) 4.20(2018 年 12 月)
Performance improvements:
性能改进:
fewer wakeups and blocking during b-tree traversals, improved latencies and scalability
b 树遍历过程中减少唤醒和阻塞,提高延迟和可伸缩性qgroups: 30+% run time improvement during balance, no accounting on unchanged subtrees (continued)
qgroups:平衡期间运行时间提高 30%以上,对未更改的子树不进行记账(续)use a cached variant of rb-tree, speeds up traversal in some cases
使用 rb-tree 的缓存变体,在某些情况下加快遍历速度
Fixes: 修复:
trim: 修剪:
could miss some block groups, if logical offset was too high and did not fit the range
如果逻辑偏移量过高且不适合范围,则可能会错过一些块组better error reporting, continue as far as possible
更好的错误报告,尽可能继续less interaction with transaction commit
与事务提交的交互更少
fsync: fix log replay and O_TMPFILE warnings
fsync:修复日志重放和 O_TMPFILE 警告qgroups: fix rescan that might misc some dirty groups
qgroups: 修复可能会错过一些脏组的重新扫描don’t clean dirty pages during buffered writes, this could lead to lost updates in some corner cases
在缓冲写入期间不清理脏页,这可能会导致某些极端情况下的更新丢失some block groups could have been delayed in creation, if the allocation triggered another one
一些块组可能在创建时被延迟,如果分配触发了另一个分配error handling improvements
错误处理改进other cleanups and refactoring
其他清理和重构[https://git.kernel.org/linus/a1a4f841ec4585185c0e75bfae43a18b282dd316 pull request]
[https://git.kernel.org/linus/a1a4f841ec4585185c0e75bfae43a18b282dd316 拉取请求]
3.x
3.0 (Jul 2011) 3.0(2011 年 7 月)
Filesystem scrub 文件系统扫描
Auto-defragmentation (autodefrag mount option)
自动碎片整理(autodefrag 挂载选项)Improved block allocator 改进的块分配器
Sped up file creation/deletion by delayed operation
通过延迟操作加快文件的创建/删除速度
3.1 (Oct 2011) 3.1(2011 年 10 月)
Stability fixes (lots of them, really), notably fixing early ENOSPC, improved handling of a few error paths and corner cases, fix for the crash during log replay.
稳定性修复(很多),特别是修复早期的 ENOSPC,改进了一些错误路径和边缘情况的处理,修复了在日志重放期间崩溃的问题。
3.2 (Jan 2012) 3.2(2012 年 1 月)
Log of past roots to aid recovery (option ‘’recovery’’)
用于辅助恢复的过去根目录日志(选项“recovery”)Subvolumes mountable by full path
可通过完整路径挂载的子卷Added ‘’nospace_cache’’ option
添加了 'nospace_cache' 选项Lots of space accounting fixes
大量的空间计算修复Improved scrub performance thanks to new read-ahead infrastructure
由于新的预读基础设施,改进了擦除性能Scrub prints paths of corrupted files
擦除打印损坏文件的路径ioctl for resolving logical->inode and inode->path
用于解析逻辑->inode 和 inode->路径的 ioctlIntegrated raid-repair (if possible)
集成的 RAID 修复(如果可能的话)Data corruption fix for parallel snapshot creation
并行快照创建的数据损坏修复Write barriers for multiple devices were fixed to be more resistant in case of power failure
多设备的写屏障已修复,以提高在断电情况下的抗性
3.3 (Mar 2012) 3.3(2012 年 3 月)
restriper - infrastructure to change btrfs raid profiles on the fly via balance
restriper - 通过平衡在运行时更改 btrfs raid 配置文件的基础设施optional integrity checker infrastructure ([http://lwn.net/Articles/466493/ details])
可选完整性检查基础设施([ http://lwn.net/Articles/466493/ 详情])fixed a few corner cases where TRIM did not process some blocks
修复了一些 TRIM 未处理某些块的特殊情况cluster allocator improvements (less fragmentation, some speedups)
集群分配器改进(减少碎片,一些加速)
3.4 (May 2012) 3.4(2012 年 5 月)
Allow metadata blocks larger than the page size (4K). This allows metadata blocks up to 64KB in size. In practice 16K and 32K seem to work best. For workloads with lots of metadata, this cuts down the size of the extent allocation tree dramatically and fragments much less. (Chris Mason)
允许元数据块大于页面大小(4K)。这允许元数据块的大小达到 64KB。在实践中,16K 和 32K 似乎效果最好。对于具有大量元数据的工作负载,这显著减少了范围分配树的大小,并且碎片化更少。(Chris Mason)Improved error handling (IO errors). This gives Btrfs the ability to abort transactions and go read-only on errors other than internal logic errors and ENOMEM more gracefully instead of crashing. (Jeff Mahoney)
改进的错误处理(IO 错误)。这使得 Btrfs 能够在除了内部逻辑错误和 ENOMEM 之外的错误上更优雅地中止事务并进入只读模式,而不是崩溃。(Jeff Mahoney)Reworked the way in which metadata interacts with the page cache. page->private now points to the btrfs extent_buffer object, which makes everything faster. The code was changed so it now writes a whole extent buffer at a time instead of allowing individual pages to go down. It is now more aggressive about dropping pages for metadata blocks that were freed due to COW. Overall, metadata caching is much faster now. (Josef Bacik)
重新设计了元数据与页面缓存交互的方式。page->private 现在指向 btrfs extent_buffer 对象,这使得一切都更快。代码已更改,现在一次写入整个范围缓冲区,而不是允许单个页面下降。现在更积极地删除由于 COW 而释放的元数据块的页面。总体而言,元数据缓存现在快得多。(Josef Bacik)
3.5 (Jun 2012) 3.5(2012 年 6 月)
collect device statistics (read/write failures, checksum errors, corrupted blocks)
收集设备统计信息(读/写失败、校验和错误、损坏的块)integrity checker (3.3+) supports bigblocks (3.4+)
完整性检查器(3.3+)支持大块(3.4+)more friendly NFS support (native ‘’i_version’’)
更友好的 NFS 支持(本地“i_version”)‘’thread_pool’’ mount option tunable via remount
通过重新挂载调整“thread_pool”挂载选项‘’fsync’’ speed improvements
“fsync”速度改进several fixes related to read-only mounts
与只读挂载相关的几个修复scrub thread priority lowered to idle
降低了清洗线程的优先级为闲置preparatory works for 3.6 features (‘’tree_mod_log’’)
为 3.6 特性(“tree_mod_log”)做准备
3.6 (Sep 2012) 3.6(2012 年 9 月)
subvolume-aware quotas (‘’qgroups’’)
子卷感知配额(“qgroups”)support for send/receive between snapshot changes ([http://lwn.net/Articles/506244/ LWN article])
支持在快照更改之间发送/接收([http://lwn.net/Articles/506244/ LWN 文章])‘’atime’’ is not updated on read-only snapshots ([http://lwn.net/Articles/499293/ LWN article])
“atime” 在只读快照上不会更新([ http://lwn.net/Articles/499293/ LWN 文章])allowed cross-subvolume file clone (aka. reflink)
允许跨子卷文件克隆(又名 reflink)remount with ‘’no’’ compression possible
重新挂载时可以使用“no”压缩new ioctl to read device readiness status
用于读取设备就绪状态的新 ioctlspeed improvement for concurrent multithreaded reads
并发多线程读取的速度提升
3.7 (Dec 2012) 3.7(2012 年 12 月)
‘’fsync’’ speedups 'fsync' 速度提升
removed limitation of number of hardlinks in a single directory
移除单个目录中硬链接数量的限制file hole punching ([http://lwn.net/Articles/415889/ LWN article])
文件空洞打孔([ http://lwn.net/Articles/415889/ LWN 文章])per-file ‘’NOCOW’’ 每个文件的“NOCOW”
fixes to send/receive 修复发送/接收
3.8 (Feb 2013) 3.8(2013 年 2 月)
ability to replace devices at runtime in an effective way ([http://lwn.net/Articles/524589/ description])
在运行时以有效的方式替换设备的能力([ http://lwn.net/Articles/524589/ 描述])speed improvements (cumulative effect of many small improvements)
速度改进(许多小改进的累积效果)a few more bugfixes 几个更多的错误修复
3.9 (Apr 2013) 3.9(2013 年 4 月)
preliminary Raid 5/6 support (details in the [http://www.spinics.net/lists/linux-btrfs/msg22169.html announcement])
初步的 Raid 5/6 支持(详细信息请参阅[http://www.spinics.net/lists/linux-btrfs/msg22169.html 公告])snapshot-aware defrag 快照感知碎片整理
a mode of ‘’send’’ to avoid transferring file data
一种“发送”模式,以避免传输文件数据direct IO speedup ([https://patchwork.kernel.org/patch/2114921/ numbers])
直接 IO 加速([ https://patchwork.kernel.org/patch/2114921/ 数字])new ‘’ioctl’’s to set/get filesystem label
新的用于设置/获取文件系统标签的“ioctl”defrag is cancellable 碎片整理可取消
3.10 (Jun 2013) 3.10(2013 年 6 月)
reduced size of metadata by so-called skinny extents [http://git.kernel.org/linus/3173a18f70554fe7880bb2d85c7da566e364eb3c]
通过所谓的瘦瘦范围减小了元数据的大小 [http://git.kernel.org/linus/3173a18f70554fe7880bb2d85c7da566e364eb3c]enhanced syslog message format [http://permalink.gmane.org/gmane.comp.file-systems.btrfs/24330]
增强的 syslog 消息格式 [http://permalink.gmane.org/gmane.comp.file-systems.btrfs/24330]the mount option ‘’subvolrootid’’ is deprecated
挂载选项‘’subvolrootid’’已弃用lots of stability improvements, removed many< BUG_ONs
大量的稳定性改进,移除了许多<BUG_ONs>qgroups are automatically created when quotas are enabled [http://git.kernel.org/linus/7708f029dca5f1b9e9d6ea01ab10cd83e4c74ff2]
当启用配额时,qgroups 会自动创建 [ http://git.kernel.org/linus/7708f029dca5f1b9e9d6ea01ab10cd83e4c74ff2]qgroups are able to ‘’rescan’’ current filesystem and sync the quota state with the existing subvolumes
qgroups 能够‘’重新扫描‘’当前文件系统,并与现有的子卷同步配额状态enhanced ‘’send/recv ‘’ format for multiplexing more data into one stream [http://git.kernel.org/linus/c2c71324ecb471c932bc1ff59e46ffcf82f274fc]
增强的‘’发送/接收‘’格式,用于将更多数据多路复用到一个流中 [ http://git.kernel.org/linus/c2c71324ecb471c932bc1ff59e46ffcf82f274fc]various unsorted code cleanups, minor performance updates
各种未分类的代码清理,轻微的性能更新
3.11 (Sep 2013) 3.11(2013 年 9 月)
extent cloning within one file
文件内的扩展克隆ioctl to wait for quota rescan completion
使用 ioctl 等待配额重新扫描完成device deletion returns error code to userspace (not in syslog anymore)
设备删除将错误代码返回给用户空间(不再记录在 syslog 中)usual load of small fixes and improvements
通常加载了一些小修复和改进
3.12 (Nov 2013) 3.12(2013 年 11 月)
Major performance improvement for send/receive with large numbers of subvolumes
大幅提升发送/接收大量子卷的性能Support for batch deduplication (userspace tools required)
支持批量去重(需要用户空间工具)new mount option ‘’commit’’ to set the commit interval
设置提交间隔的新挂载选项“commit”Lots of stability and bugfix patches
大量的稳定性和错误修复补丁
3.13 (Jan 2014) 3.13(2014 年 1 月)
‘’fiemap’’ exports information about shared extents
''fiemap'' 导出有关共享范围的信息bugfix and stability foucsed release
修复错误并关注稳定性的发布
3.14 (Mar 2014) 3.14(2014 年 3 月)
optional incompat disk format improvement aiming at speedup, removing file hole representation, named ‘’no-holes’’
旨在加快速度,删除文件空洞表示,名为“无空洞”的可选不兼容磁盘格式改进ioctl to query/change feature bits (e.g. switching on extended refs on-line now possible)
ioctl 查询/更改功能位(例如,现在可以在线切换扩展引用)export filesystem info through sysfs: features, allocation profiles
通过 sysfs 导出文件系统信息:功能,分配配置文件added pairing mount options (for remount)
添加了配对挂载选项(用于重新挂载)heap of small performance optimizations
大量小型性能优化snapshot-aware defrag was disabled due to problems
由于问题,快照感知碎片整理已禁用
3.15 (Jun 2014) 3.15(2014 年 6 月)
pile of ‘’send’’ fixes (stability, speed)
一堆“发送”修复(稳定性,速度)worker threads now use kernel workqueues
工作线程现在使用内核工作队列
3.16 (Aug 2014) 3.16(2014 年 8 月)
‘’O_TMPFILE’’ support [http://kernelnewbies.org/Linux_3.11#head-8be09d59438b31c2a724547838f234cb33c40357]
‘’O_TMPFILE’’ 支持 [ http://kernelnewbies.org/Linux_3.11#head-8be09d59438b31c2a724547838f234cb33c40357]reworked qgroup accounting, to fix negative numbers after subvol deletion
重新设计的 qgroup 记账,以修复子卷删除后出现的负数SEARCH_TREE ioctl v2, extended for retrieving more data [http://www.spinics.net/lists/linux-btrfs/msg31213.html]
SEARCH_TREE ioctl v2,扩展以检索更多数据 [ http://www.spinics.net/lists/linux-btrfs/msg31213.html]new balance filter ‘’limit’’ for more finegrained balancing [http://www.spinics.net/lists/linux-btrfs/msg33872.html]
新的平衡过滤器“limit”用于更精细的平衡 [ http://www.spinics.net/lists/linux-btrfs/msg33872.html]ioctl FS_INFO and it’s sysfs counterpart export information about ‘’nodesize’’, ‘’sectorsize’’ and ‘’clone_alignment’’
ioctl FS_INFO 及其 sysfs 对应项导出关于“nodesize”、“sectorsize”和“clone_alignment”的信息snapshots are protected during send
快照在发送过程中受到保护
3.17 (Oct 2014) 3.17(2014 年 10 月)
fix for the infamous deadlock [https://git.kernel.org/linus/9e0af23764344f7f1b68e4eefbe7dc865018b63d]
解决了臭名昭著的死锁问题 [https://git.kernel.org/linus/9e0af23764344f7f1b68e4eefbe7dc865018b63d]fixed longstanding bug in qgroups accounting after snapshot deletion [https://git.kernel.org/linus/1152651a081720ef6a8c76bb7da676e8c900ac30]
修复了快照删除后 qgroups 计数的长期存在的 bug [https://git.kernel.org/linus/1152651a081720ef6a8c76bb7da676e8c900ac30]updated (less inaccurate) ‘’df’’ numbers [https://git.kernel.org/linus/ba7b6e62f420f5a8832bc161ab0c7ba767f65b3d]
更新(更准确的)‘’df’’ 数字 [https://git.kernel.org/linus/ba7b6e62f420f5a8832bc161ab0c7ba767f65b3d]speedup for ‘’rename’’ and ‘’truncate’’, less strict flushes [https://git.kernel.org/linus/8d875f95da43c6a8f18f77869f2ef26e9594fecc]
‘’重命名’’和‘’截断’’的加速,更宽松的刷新 [https://git.kernel.org/linus/8d875f95da43c6a8f18f77869f2ef26e9594fecc]updated and fixes to the ‘’seeding’’ feature
对“种子”功能进行了更新和修复
3.17 (Oct 2014) 3.17(2014 年 10 月)
fix for the infamous deadlock [https://git.kernel.org/linus/9e0af23764344f7f1b68e4eefbe7dc865018b63d]
解决了臭名昭著的死锁问题 [https://git.kernel.org/linus/9e0af23764344f7f1b68e4eefbe7dc865018b63d]fixed longstanding bug in qgroups accounting after snapshot deletion [https://git.kernel.org/linus/1152651a081720ef6a8c76bb7da676e8c900ac30]
修复了快照删除后 qgroups 计数的长期存在的 bug [https://git.kernel.org/linus/1152651a081720ef6a8c76bb7da676e8c900ac30]updated (less inaccurate) ‘’df’’ numbers [https://git.kernel.org/linus/ba7b6e62f420f5a8832bc161ab0c7ba767f65b3d]
更新(更准确的)‘’df’’ 数字 [https://git.kernel.org/linus/ba7b6e62f420f5a8832bc161ab0c7ba767f65b3d]speedup for ‘’rename’’ and ‘’truncate’’, less strict flushes [https://git.kernel.org/linus/8d875f95da43c6a8f18f77869f2ef26e9594fecc]
‘’重命名’’和‘’截断’’的加速,更宽松的刷新 [https://git.kernel.org/linus/8d875f95da43c6a8f18f77869f2ef26e9594fecc]updated and fixes to the ‘’seeding’’ feature
对“种子”功能进行了更新和修复
3.18 (Dec 2014) 3.18(2014 年 12 月)
3.19 (Feb 2015) 3.19(2015 年 2 月)
raid56 supports scrub and device replace
raid56 支持擦除和设备替换
2.6.x
2.6.39 (May 2011) 2.6.39(2011 年 5 月)
Per-file compression and NOCOW control. Support for bulk TRIM on SSDs.
每个文件的压缩和 NOCOW 控制。支持 SSD 上的批量 TRIM。
2.6.38 (March 2011) 2.6.38(2011 年 3 月)
Added LZO compression method, FIEMAP bugfixes with delalloc, subvol flags
get/set ioctl, allow compression during defrag.
添加了 LZO 压缩方法,修复了与 delalloc 相关的 FIEMAP 错误,子卷标志的获取/设置 ioctl,在碎片整理期间允许压缩。
2.6.37 (January 2011) 2.6.37(2011 年 1 月)
On-disk free space cache, asynchronous snapshots, unprivileged subvolume
deletion, extent buffer switches from a rbtree with spinlocks to a radix tree
with RCU. (Explanations of these features are described in
[http://www.linux-mag.com/id/7945 this] article [registration needed]).
磁盘上的空闲空间缓存,异步快照,非特权子卷删除,从带自旋锁的红黑树切换到带 RCU 的基数树的范围缓冲区交换。(这些功能的说明在[ http://www.linux-mag.com/id/7945 这篇]文章中描述[需要注册])。
2.6.35 (August 2010) 2.6.35(2010 年 8 月)
Direct I/O support and -ENOSPC handling of volume management operations,
completing the -ENOSPC support.
直接 I/O 支持和卷管理操作的 -ENOSPC 处理,完成 -ENOSPC 支持。
2.6.34 (May 2010) 2.6.34(2010 年 5 月)
Support for changing the default subvolume, a new userspace tool (btrfs), an
ioctl that lists all subvolumes, an ioctl to allow improved df math, and other
improvements.
支持更改默认子卷,一个新的用户空间工具(btrfs),一个列出所有子卷的 ioctl,一个允许改进 df 数学的 ioctl,以及其他改进。
2.6.33 (February 2010) 2.6.33(2010 年 2 月)
Some minor -ENOSPC improvements.
一些轻微的-ENOSPC 改进。
2.6.32 (December 2009) 2.6.32(2009 年 12 月)
ENOSPC 没有空间
Btrfs has not had serious -ENOSPC (“no space”) handling, the COW oriented
design makes handling such situations more difficult than filesystems that just
rewrite the blocks. In this release Josef Bacik (Red Hat) has added the
necessary infrastructure to fix that problem. Note: The filesystem may run out
of space and still show some free space. That space comes from a data/metadata
chunk that can’t get filled because there’s not space left to create its
metadata/data counterpart chunk. This is unrelated to the -ENOSPC handling and
will be fixed in the future. Code:
[http://git.kernel.org/linus/9ed74f2dba6ebf9f30b80554290bfc73cc3ef083 (commit)]
Btrfs 还没有严重的 -ENOSPC(“没有空间”)处理,COW 导向的设计使得处理这种情况比那些只重写块的文件系统更困难。在这个版本中,Josef Bacik(红帽公司)添加了必要的基础设施来解决这个问题。注意:文件系统可能会耗尽空间,但仍然显示一些可用空间。这些空间来自一个无法填满的数据/元数据块,因为没有空间来创建其元数据/数据对应块。这与 -ENOSPC 处理无关,将在未来修复。代码:[http://git.kernel.org/linus/9ed74f2dba6ebf9f30b80554290bfc73cc3ef083(提交)]
Proper snapshot and subvolume deletion
适当的快照和子卷删除
In the last btrfs-progs version you have options that allow to delete snapshots
and subvolumes without having to use rm. This is much faster because it does
the deletion via btree walking. It’s also now possible to rename snapshots and
subvols. Work done by Yan Zheng (Oracle). Code:
[http://git.kernel.org/linus/4df27c4d5cc1dda54ed7d0a8389347f2df359cf9 (commit
1)], [http://git.kernel.org/linus/76dda93c6ae2c1dc3e6cde34569d6aca26b0c918 2)]
在最新的 btrfs-progs 版本中,您有选项可以删除快照和子卷,而无需使用 rm。这样做要快得多,因为它通过 btree 遍历来执行删除操作。现在还可以重命名快照和子卷。由 Yan Zheng(Oracle)完成的工作。代码:[ http://git.kernel.org/linus/4df27c4d5cc1dda54ed7d0a8389347f2df359cf9(提交 1)],[ http://git.kernel.org/linus/76dda93c6ae2c1dc3e6cde34569d6aca26b0c918(提交 2)]
Performance improvements
性能改进
Streaming writes on very fast hardware were previously CPU bound at around
400MB/s. Chris Mason (Oracle) has improved the code so that now it can push
over 1GB/s while using the same CPU as XFS (factoring out checksums). There are
also improvements for writing large portions of extents, and other workloads.
Multidevice setups are also much faster due to the per-BDI writeback changes.
The performance of fsync() was greatly improved, which fixed a severe slowdown
while using yum in Fedora 11.
在非常快速的硬件上进行流式写入以前受到 CPU 的限制,速度约为 400MB/s。Chris Mason(Oracle)改进了代码,现在可以在使用与 XFS 相同的 CPU 的情况下推动超过 1GB/s,而不包括校验和。还有针对大块范围的写入和其他工作负载的改进。由于每个 BDI 写回更改,多设备设置也变得更快。fsync() 的性能得到了极大改进,这解决了在 Fedora 11 中使用 yum 时出现的严重减速问题。
Support for “discard” operation on SSD devices
SSD 设备上“丢弃”操作的支持
“Discard” support is a way to telling SSD devices which blocks are free so that
the underlying firmware knows that it’s safe to do some optimizations
[http://git.kernel.org/linus/e244a0aeb6a599c19a7c802cda6e2d67c847b154
(commit)],
[http://git.kernel.org/linus/0634857488ec6e28fa22920cd0bee3c2ac07ccfd (commit)]
“丢弃”支持是一种告诉 SSD 设备哪些块是空闲的方式,以便底层固件知道可以进行一些优化 [ http://git.kernel.org/linus/e244a0aeb6a599c19a7c802cda6e2d67c847b154 (commit)], [ http://git.kernel.org/linus/0634857488ec6e28fa22920cd0bee3c2ac07ccfd (commit)]
0.x
0.13 and older 0.13 及更早版本
Copy on write FS 写时复制文件系统
Checksumming 校验码
Transactions 交易
Snapshotting 快照
Subvolumes 子卷
0.14 (April 30, 2008)
0.14(2008 年 4 月 30 日)
Support for multiple devices
支持多设备raid0, raid1 and raid10, single spindle metadata duplication
raid0,raid1 和 raid10,单轴心数据复制
0.15 (May 29, 2008)
0.15(2008 年 5 月 29 日)
Metadata back references 元数据反向引用
Online growing and shrinking
在线增长和收缩Conversion program from Ext3
从 Ext3 的转换程序data=ordered support data=ordered 支持
COW-free data writes. 无 COW 数据写入
focus on stability fixes for the multiple device code
专注于多设备代码的稳定性修复
0.16 (August 2008) 0.16(2008 年 8 月)
v0.16 does change the disk format from v0.15, and it includes a long list of
performance and stability updates.
v0.16 确实改变了磁盘格式,从 v0.15 开始,并包含了一长串性能和稳定性更新。
Fine grained Btree locking
细粒度的 B 树锁定
Locking is now done in a top down fashion while searching the btree, and higher
level locks are freed when they are no longer required. Extent allocations
still have a coarse grained lock, but that will be improved in the next
release.
现在在搜索 B 树时以自顶向下的方式进行锁定,当不再需要时,会释放更高级别的锁定。范围分配仍然具有粗粒度锁定,但这将在下一个版本中得到改进。
Improved data=ordered 改进了 data=ordered
Ordered data mode loosely means any system that prevents garbage or stale data
blocks after a crash. It was previously implemented the same way ext3 does it,
which is to force pending data writes down before a transaction commits.
有序数据模式宽松地意味着在崩溃后阻止垃圾或陈旧数据块的任何系统。以前实现方式与 ext3 相同,即在事务提交之前强制将挂起的数据写入磁盘。
The data=ordered code was changed to only modify metadata in the btree after
data extents are fully written on disk. This allows a transaction commit to
proceed without waiting for all the data writes on the FS to finish.
data=ordered 代码已更改为仅在数据范围完全写入磁盘后修改 btree 中的元数据。这使得事务提交可以继续进行,而无需等待所有数据写入文件系统完成。
A single fsync or synchronous write no longer forces all the dirty data on the
FS to disk, as it does in ext3 and reiserfsv3.
单个 fsync 或同步写不再强制将文件系统上的所有脏数据写入磁盘,就像在 ext3 和 reiserfsv3 中那样。
Although it is not implemented yet, the new data=ordered code would allow
atomic writes of almost any size to a single file to be exported to userland.
尽管尚未实施,但新的 data=ordered 代码将允许将几乎任何大小的原子写入单个文件并导出到用户空间。
ACL support (Josef Bacik)
ACL 支持(Josef Bacik)
ACLs are implemented and enabled by default.
ACL 已实施并默认启用。
Lost file prevention (Josef Bacik)
防止丢失文件(Josef Bacik)
The VFS and posix APIs force filesystems allow files to be unlinked from a
directory before they are deleted from the FS. If the system crashes between
the unlink and the deletion, the file is still consuming space on disk, but not
listed in any directory.
VFS 和 posix API 强制文件系统允许在文件从文件系统中删除之前从目录中取消链接文件。如果在取消链接和删除之间系统崩溃,文件仍然占用磁盘空间,但不在任何目录中列出。
Btrfs now tracks these files and makes sure they are reclaimed if the system
crashes before they are fully deleted.
Btrfs 现在跟踪这些文件,并确保在完全删除之前系统崩溃时它们被回收。
New directory index format (Josef Bacik)
新目录索引格式(Josef Bacik)
Btrfs indexes directories in two ways. The first index allows fast name
lookups, and the second is optimized to return inodes in something close to
disk order for readdir. The second index is an important part of good
performance for full filesystem backups.
Btrfs 以两种方式索引目录。第一个索引允许快速查找名称,第二个则经过优化,以接近磁盘顺序返回 inode 以供 readdir 使用。第二个索引是完整文件系统备份性能的重要组成部分。
A per-directory sequence number is now used for the second index, removing some
worst case conditions around files that are hard linked into the same directory
many times.
现在为第二个索引使用每个目录的序列号,消除了围绕多次硬链接到同一目录中的文件的最坏情况条件。
Faster unmount times (Yan Zheng)
更快的卸载时间(严正)
Btrfs waits for old transactions to be completely removed from the FS before
unmount finishes. A new reference count cache was added to make this much less
IO intensive, improving FS performance in all workloads.
在卸载完成之前,Btrfs 等待旧事务完全从文件系统中移除。添加了一个新的引用计数缓存,使得这个过程的 IO 负担大大减轻,提高了所有工作负载下的文件系统性能。
Improved streaming reads and writes
改进了流式读取和写入
The new data=ordered code makes streaming writes much faster. Streaming reads
are improved by tuning the thread pools used to process data checksums after
the read is done. On machines with sufficient CPU power to keep up with the
disks, data checksumming is able to run as fast as nodatasum mounts.
新的数据有序代码使流式写入速度更快。通过调整用于在读取完成后处理数据校验和的线程池,可以改善流式读取。在具有足够 CPU 功率以跟上磁盘速度的计算机上,数据校验能够像无数据校验挂载一样快速运行。
0.17 (January 2009) 0.17(2009 年 1 月)
Btrfs is now in 2.6.29-rc1!
Btrfs 现在已经在 2.6.29-rc1 中!
v0.17 has a new disk format since v0.16. Future releases will try to maintain
backwards compatibility with this new format.
v0.17 自 v0.16 起有了新的磁盘格式。未来的版本将尝试与这种新格式保持向后兼容性。
Compression 压缩
Transparent zlib compression of file data is enabled by mount -o compress.
通过 mount -o compress 启用文件数据的透明 zlib 压缩。
Improved block allocation routines (Josef Bacik)
改进了块分配例程(Josef Bacik)。
Many performance problems in the allocator are addressed in this release
在此版本中解决了分配器中的许多性能问题
Improved block sharing while moving extents (Yan Zheng)
在移动范围时改进了块共享(Yan Zheng)
The btrfs-vol commands to add, remove and balance space across devices triggers
a COW of metadata and data blocks. This release is much better at maintaining
shared blocks between snapshots when that COW happens.
添加、删除和在设备之间平衡空间的 btrfs-vol 命令会触发元数据和数据块的 COW。在发生 COW 时,此版本在维护快照之间共享块方面表现得更好。
Seed Device support 种子设备支持
It is now possible to create a filesystem to seed other Btrfs filesystems. The
original filesystem and devices are included as a readonly starting point to
the new FS. All modifications go onto different devices and the COW machinery
makes sure the original is unchanged.
现在可以创建一个文件系统来种子其他 Btrfs 文件系统。原始文件系统和设备被包含为只读的起点到新的文件系统。所有修改都会放在不同的设备上,COW 机制确保原始文件系统不会改变。
Many bug fixes and performance improvements
许多错误修复和性能改进
0.18 (January 2009) 0.18(2009 年 1 月)
v0.18 has the same disk format as 0.17, but a bug was found in the ioctl
interface shared between 32 bit and 64 bit programs. This was fixed by changing
the ioctl interface. Anyone using 2.6.29-rc2 will need to update to v0.18 of
the btrfs progs.
v0.18 与 0.17 具有相同的磁盘格式,但在 32 位和 64 位程序之间共享的 ioctl 接口中发现了一个错误。这个问题通过更改 ioctl 接口来解决。使用 2.6.29-rc2 的任何人都需要更新到 btrfs progs 的 v0.18 版本。
There is no need to reformat though, the disk format is still compatible.
但无需重新格式化,磁盘格式仍然兼容。
0.19 (June 2009) 0.19(2009 年 6 月)
v0.19 is a forward rolling format change, which means that it can read the
v0.18 disk format but older kernels and older btrfs-progs code will not be able
to read filesystems created with v0.19. The new code changes the way that
extent back references are recorded, making them significantly more efficient.
In general, v0.19 is a dramatic speed improvement over v0.18 in almost every
workload.
v0.19 是一种向前滚动的格式更改,这意味着它可以读取 v0.18 磁盘格式,但旧内核和旧的 btrfs-progs 代码将无法读取使用 v0.19 创建的文件系统。新代码改变了记录范围反向引用的方式,使其更加高效。总的来说,v0.19 在几乎每种工作负载中都比 v0.18 有显著的速度提升。
The v0.19 utilities are meant for use with kernels 2.6.31-rc1 and higher. Git
trees are available with the new format code for 2.6.30 kernels, please see the
download section for details.
v0.19 实用程序适用于内核 2.6.31-rc1 及更高版本。对于 2.6.30 内核,可以通过 Git 树获取新格式代码,请参阅下载部分获取详细信息。
If you do not wish to roll forward to the new disk format, use the v0.18 utilities.
如果您不希望将磁盘格式升级到新版本,请使用 v0.18 实用工具。