源卷中变化的 B 与 D chunk 指向有限经典 COW 异常存储里保存的原值。

LVM 快照在时间上定格一块块设备

经典 LVM 快照是在源逻辑卷上附加写时复制异常存储。lvcreate -s -L 5G -n snap vg/data 请求五 GiB 存储,实际分配还受卷组空闲容量和分配粒度约束。创建时不需要复制整份源卷,但不代表完全没有工作或必然瞬时完成。thin 快照使用另一种共享池机制,不能把经典快照的独立异常存储套到所有 LVM 快照上。 异常存储要覆盖整个保留窗口内发生变化的不同 chunk 及其元数据,包括备份复制期间的写入。突发负载可能比安静时估算更早耗尽容量。经典存储满后快照会失效,读取开始返回错误。应提前观察有效状态和增长趋势,留下扩容或结束备份的时间;只规定一个百分比告警,而没有响应能力与空闲空间,不能形成可靠恢复计划。 异常存储,不是副本 源使用 snapshot-origin 目标,snapshot 则把未变化的源 chunk 与保存的异常组合成视图。直接写快照的数据进入它自己的 COW 设备。对已保存异常的同一 chunk 反复修改,不需要为这份快照再保存一次原始内容。原文一百万次写入、十六个热块却只有十五个异常的数字,没有找回轨迹;若十六个不同 chunk 都写过,就需十六份数据异常,另加元数据。 lvs -a -o lv_name,lv_attr,origin,data_percent,lv_size 展示类型、状态和用量。swi-a-s--- 只是示意,不是所有快照固定的属性串;第五位 I 表示无效快照。告警应覆盖实际增长速率和处理时间。lvextend 需要 VG 中有可分配空间;lvchange --monitor y 只启用监控,自动扩容还依赖 dmeventd、有效扩容策略及足够容量,并不是一个开关就能保证成功。 ...

四月 10, 2028 · 1 分钟 · XB Field Notes
数据集历史线从快照分支到克隆;另一快照上的独立锁形表示用户 hold。

ZFS 快照给文件系统一个回退键

ZFS 快照通过写时复制引用保留某一时点的数据集视图,不需要把全部数据另复制一遍。只要还有引用需要旧块,它们就继续保留。但创建仍涉及元数据与同步工作,不能承诺零分配,也不能把在提示符重画之前返回当作实测保证。本次没有运行 ZFS,保留文件中也未找到原文所称实验的原始输出,所以数值与运行效果必须单独限定来源。 这样的历史适合本地恢复,但 tank/data 的快照仍位于同一个池。让池不可用的故障,也可能让全部快照不可用。这描述的是共享故障边界,不是断言每次控制器故障都会原子地毁掉所有块。独立备份或复制还需要自己的保留策略及恢复验证,不能仅因另一处存在相同名字,就宣布已经获得完整灾难恢复能力。 为一个一致的树命名 快照原子地捕获数据集的文件系统状态;递归 -r 会让后代数据集在同一时刻建立快照。不递归时,子数据集被遗漏,并不是自动晚一点另拍一份。文件系统一致不等于应用检查点:数据库缓冲、日志以及选定数据集之外的文件,仍需遵循应用支持的备份或崩溃恢复流程。必须协调所有必要部分,才能把整组状态作为可恢复对象。 tank/data@daily-2026-09-16 这样的名字可以辅助保留策略,还应结合创建时间、属性与备份记录;名字本身不是删除资格的证明。zfs list -t snapshot -o name,used,refer,creation -s creation 用于观察快照及空间统计,真正清理之前还要检查依赖和 hold。自动命名也可以被可靠管理,关键是保留规则有明确、可追溯的依据。 空间在哪里:zfs list -o space zfs list -o space tank/data 选择 NAME、AVAIL、USED、USEDSNAP、USEDDS、USEDREFRESERV 与 USEDCHILD,不包含 REFER。USED 分解为四项 used-by 类别,不能写成 REFER 加 USEDSNAP。REFER 表示数据集可访问的数据,其中也可能有共享块。单份快照的 USED 统计其独有引用,删除其他快照还会改变这个值,所以逐份相加不等于整体可回收空间。 ...

三月 21, 2028 · 2 分钟 · XB Field Notes
同一文件系统内,快照根与源根指向共享未改 extent,并在分岔后分别指向旧数据与新数据。

Btrfs 快照是写时复制,不是复制

Btrfs 快照是带有源初始内容的新子卷,通过共享已有文件 extent 保留视图,而不是逐块复制全部数据。创建会复制根部元数据,也可能等待源中的脏数据刷出,因此不能承诺无论大小都在毫秒内完成。同一 extent 还可能同时被多个快照或 reflink 引用,不存在固定只能引用两次的规则。共享数据与完全没有创建成本,是不同的判断。 快照让本地恢复点较为经济,但成本包含元数据以及后续分岔保留下来的旧块。它与源共用整个文件系统的存储池,而文件系统可能跨多块设备,并不一定只在一块磁盘上。快照数量持续增加时,已删除或覆盖的数据仍可能被保留。即使设置为只读,同一文件系统内的快照也不是独立备份,不能把版本数量当作故障隔离程度。 共享 extent,而不是复制数据块 快照是有独立根的子卷。示例 btrfs subvolume snapshot -r "$src" "$snap" 请求只读快照,普通快照则可以写入。只读标志限制通过这个子卷进行的普通修改,不防管理员删除或底层损坏。快照不是递归操作:嵌套子卷在其中只是空的占位目录,其内部文件不会自动包含进来。恢复计划必须另行处理这些子卷,不能只检查顶层目录是否存在。 共享 extent 被修改时,写时复制为其余引用保留旧内容。实际分配受到 extent 布局、压缩、元数据和后续快照影响,不能简单等同于应用写了多少字节。原文中的 APFS 克隆数字不是 Btrfs 测量,本次也没有找到其原始轨迹;不能用它们证明创建零成本,或同一范围第二次覆盖时 Btrfs 一定不再分配。跨文件系统类比只能解释思路,不能替代本系统验证。 空间到底去了哪里 btrfs filesystem du 通过 FIEMAP 报告文件 extent 的 Total、Exclusive 和 Set shared。每个参数各自定义递归扫描的文件集合,Set shared 统计该集合引用的共享范围并处理重叠,并非只统计与其他命令行参数之间的共享。compsize 显示面向压缩的 Disk Usage、Uncompressed 与 Referenced,不是相同三列。qgroup 则要求先启用配额并保持统计一致,不能把缺失统计解释成零占用。 ...

十一月 14, 2027 · 1 分钟 · XB Field Notes