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
    发送协议更新到版本 2

    • new 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
    实现紧急刷新保留,以避免由于延迟引用或延迟分配过多而导致的几乎所有不必要的事务中止情况下的 ENOSPC

  • skip 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
    适当拒绝未知标志的擦洗 ioctl

  • fix 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
    在未重放日志的文件系统上没有 trim

  • see [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
    在更多的架构上使用硬件辅助的 crc32c

  • the 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/iversion

  • fsync 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_ASYNC

  • qgroup 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 个副本的新块组配置文件:RAID1

    • RAID1 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
    错误消息改进:设备扫描打印进程名称和 PID

  • new 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
    快照感知代码已被移除,由于性能问题已被禁用多年,重新实现将允许选择是否在共享范围上打破或不打破 COW

  • tree-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:范围循环模式可能会错过一些脏页并导致 OOM

  • two 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_ASYNC

  • more 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-C

  • performance 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
    支持可取消的调整大小和设备删除 ioctls

  • change 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: 验证待写入的脏扩展缓冲区的事务 ID

  • fsync 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
      明确将最小接受区域大小设置为 4MiB

    • make 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 上下文中更多的 ENOSPC

  • a 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
    允许删除具有父项但没有子项的 qgroup

  • fix 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_uuid

  • sysfs: 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|all

  • updated 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 ioctl

  • get 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
    在戳洞过程中修复 ENOSPC

  • fix ENOSPC when reflinking a heavily fragmented file
    修复在对高度碎片化的文件进行重定向时出现的 ENOSPC

  • fix 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 时未清除 sgid

  • some 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
    防止设置无效的默认 subvolid

  • resume 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/O

  • see [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
    移除用户空间事务 ioctls

  • use 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
    在使用无孔特性时修复戳孔后的 fsync

  • raid56:

    • 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、sync

  • 3 new unprivileged ioctls to allow users to enumerate subvolumes
    允许用户枚举子卷的 3 个新的非特权 ioctls

  • dedupe 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->路径的 ioctl

  • Integrated 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
    用于读取设备就绪状态的新 ioctl

  • speed 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 月)

3.17 (Oct 2014) 3.17(2014 年 10 月)

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 实用工具。