KDE 中的 Btrfs 快照集成

Lobsters Hottest 工具

摘要

KIOSnapshot 是一个新发布的 KDE 工具,使用户能够直接从 Dolphin 等文件浏览器访问 Btrfs 快照,为文件和子卷提供时间旅行功能,类似于 Windows 的“以前的版本”或 macOS Time Machine。

<p><a href="https://lobste.rs/s/umey8v/btrfs_snapshot_integration_kde">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/08/21 06:52

# KDE中的Btrfs快照集成 来源:https://bharadwajraju.com/posts/btrfs-snapshots-in-kde/ 我一直致力于将Btrfs快照集成到KDE软件中。这项工作的核心部分以KIOSnapshot(https://invent.kde.org/system/kio-snapshot)的形式得以实现,该版本刚刚发布。本文将探讨它的功能、运作方式、开发过程以及KDE社区的相关工作。 ## 背景 (https://bharadwajraju.com/posts/btrfs-snapshots-in-kde/#background) Btrfs的关键特性之一是能够对子卷进行高效的*快照*操作。(子卷是文件系统中可独立管理的目录树。你可以对子卷进行原子性、独立的快照或回滚,而不会影响文件系统的其余部分。快照本质上是子卷的特殊形态。)其高效性在于Btrfs会让快照与原始文件共享文件范围,因此快照仅在与原始数据存在差异的部分才占用额外空间。这意味着你可以频繁创建快照而无需担忧磁盘空间消耗。 该特性可用于构建对用户极为便捷的通用“撤销”或“时间旅行”功能。尽管目前已有如Btrfs Assistant(https://gitlab.com/btrfs-assistant/btrfs-assistant)等图形化Btrfs快照管理工具,但这些工具独立于常规文件浏览流程,且侧重于快照编排的技术层面。在Linux环境中,尚未出现像Windows“以前的版本”或macOS的Time Machine那样,将快照直接集成到文件浏览器中以支持日常用户操作的功能。KIOSnapshot的目标正是为KDE实现这种直接集成。 ## 功能定位 (https://bharadwajraju.com/posts/btrfs-snapshots-in-kde/#what-it-is) KIOSnapshot使Dolphin(实际上支持任何KDE软件)能够列出并访问文件或子卷的Btrfs快照。 你可以右键单击文件,进入文件夹视图,查看该文件在快照中保存的所有不同历史版本。(最初我为文件快照功能设计了带“打开”或“恢复”按钮的对话框,类似Windows“以前的版本”功能,但后来改为完整的虚拟文件夹形式——这提供了更大的灵活性:用户现在可以选取多个历史版本并在对比工具中打开,或将其复制到其他位置,或便捷地检查元数据,或执行任何其他所需操作。) ![显示文件快照KIO工作程序的截图,列出文件的各个版本](描述:截图显示文件快照KIO工作程序,列出文件的各个版本) 你还可以查看子卷在不同快照下的完整目录树视图。 ![显示快照KIO工作程序的截图,列出子卷的所有快照](描述:截图显示快照KIO工作程序,列出子卷的所有快照) 请注意,它*不会*创建快照,仅提供访问功能。要创建快照,你需要手动操作或通过Snapper(https://snapper.io/)等编排工具完成。(如果你*正在*使用Snapper,应在Snapper配置的`ALLOW_USERS`设置中添加你的用户名,并开启`SYNC_ACL=yes`,以允许非root用户访问你的快照。详情请参阅Snapper-Configs(5)(http://snapper.io/manpages/snapper-configs.html)和Snapper(8) § 权限(http://snapper.io/manpages/snapper.html#permissions)。) ## 工作原理 (https://bharadwajraju.com/posts/btrfs-snapshots-in-kde/#how-it-works) 它主要使用btrfs-progs中的libbtrfsutil(https://github.com/kdave/btrfs-progs/tree/master/libbtrfsutil)与文件系统交互,并通过KDE Frameworks的Solid(https://develop.kde.org/docs/features/solid/)在更高元层级查询文件系统和挂载信息。 然而,Btrfs API对非超级用户的操作权限限制相当严格。即使是“此路径位于哪个子卷中?”这类看似简单的问题,非root用户也无法直接获取答案。因此在我最初尝试构建此集成时,不得不创建一个系统级DBus服务组件,以便用户查询自身拥有的文件的这类信息。 幸运的是,Méven Car的提示让我意识到,通过某些变通方法,完全可以在无需root权限的情况下实现所有功能。例如,虽然Btrfs不情愿提供路径与子卷ID的相互查询,但它会乐于返回指定路径下(用户可访问的)子卷列表。由此即可推导出所有必要信息。 基于此,KIOSnapshot实现了一个提供`snapshot://`协议的KIO工作程序,所有使用KDE Frameworks的程序都将识别此协议。该协议通过两个维度提供对文件系统快照的虚拟视图:指定子卷的所有快照(每个快照本身都是可浏览的目录树),以及指定文件在其所属子卷所有快照中的版本记录。 ## 相关工作 (https://bharadwajraju.com/posts/btrfs-snapshots-in-kde/#allied-work) 除KIOSnapshot本身外,我还为支持该功能在KDE其他组件中进行了若干改进: - 修复KIO中导致Dolphin地址栏行为不一致的缺陷:KIOMR#2305(https://invent.kde.org/frameworks/kio/-/merge_requests/2305) - 修正Solid处理KDE Linux所采用的Btrfs布局的方式:SolidMR#261(https://invent.kde.org/frameworks/solid/-/merge_requests/261) - 为Dolphin中KIOSnapshot视图设置特殊默认视图参数:DolphinMR#1347(https://invent.kde.org/system/dolphin/-/merge_requests/1347) - 实验性地在Solid中增加Btrfs子卷支持——这仅是初步概念验证,可能更适合在上游UDisks中实现——但作为进展记录:Solid分支btrfs-subvolumes(https://invent.kde.org/frameworks/solid/-/tree/work/bharadwaj/btrfs-subvolumes?ref_type=heads) ## KDE Linux集成 (https://bharadwajraju.com/posts/btrfs-snapshots-in-kde/#kde-linux) KDE Linux即将内置Snapper和KIOSnapshot。 Hadi Chokr在此完成了大量出色的集成工作:将文件系统布局迁移至所有用户主目录均为子卷的结构(https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/475),并为所有用户自动集成配置Snapper(https://invent.kde.org/kde-linux/kde-linux/-/merge_requests/613),实现无缝体验。 这是KDE Linux更广泛数据备份与恢复系统改进计划(https://invent.kde.org/kde-linux/kde-linux/-/work_items/666)的组成部分,该计划也促进了其他领域的改进,例如Kup备份系统的升级。 ## 发布说明 (https://bharadwajraju.com/posts/btrfs-snapshots-in-kde/#release) 首个稳定版(https://download.kde.org/stable/kio-snapshot/)已于今日发布(感谢Bhushan Shah协助发布流程)。得益于KDE项目的基础设施支持,它应会很快被各发行版打包收录。即使尚未收录,从源码编译也相当简便。请试用并反馈问题与建议(https://bugs.kde.org/enter_bug.cgi?product=kio-snapshot&component=general),谢谢!

相似文章

让KIO快速复制大量文件

Lobsters Hottest

一位KDE开发者优化了KIO,显著加快了复制大量小文件的速度,通过消除socket往返和使用进程内线程来减少开销,实现了接近rsync的性能。

thundersnap v0.01:一个可以撤销所有操作的按钮

Lobsters Hottest

Thundersnap 是 Tailscale 开发的一个实验性分布式文件系统,它利用 btrfs 快照和 Tailscale 网络来提供类似撤销的功能,并在计算机之间高效复制。目前它只是一个实验品,尚未达到生产就绪状态。

KDE企业版需要强大的PIM基础设施

Lobsters Hottest

主权技术基金投资支持KDE加强其PIM基础设施(包括Akonadi),在质量、协议支持和企业采用易用性方面进行改进。

KDE Linux 本月更新:2026 年 6 月

Lobsters Hottest

KDE Linux 2026 年 6 月更新包括 QA 测试进展、改进的 ISO 安装、更好的音频 CD 抓取、日志收集工具、开发者模式以及 CJKV 输入文档。

KDE Linux 本月动态:2026年7月

Lobsters Hottest

2026年7月KDE Linux更新月度摘要,涵盖新的QA/集成测试、内核加固、性能调整,以及通过Flatpak下载扩展Java和DOS应用的软件兼容性。