Linux怎么使用Btrfs快照_Linux如何创建文件系统快照【方法】

云明君_7495

云明君_7495

2026-04-01

848人浏览

原创

btrfs快照必须在同一子卷内创建,不可跨子卷、设备或挂载点;源须为已存在子卷,目标父目录需有写权限且预先创建;命令格式为btrfs subvolume snapshot ,顺序不可颠倒。

linux怎么使用btrfs快照_linux如何创建文件系统快照【方法】

快照必须在同一个Btrfs子卷内创建

你不能跨子卷、跨设备、甚至不能跨挂载点做快照。比如 /mnt/data 是一个独立挂载的 Btrfs 子卷,而 / 是另一个,那从 / 下执行 btrfs subvolume snapshot /mnt/data /backup 会报错 Invalid cross-device link —— 这不是权限问题,是设计限制。

实操建议:

  • 先确认目标路径属于哪个子卷:btrfs subvolume list -a / 或 btrfs filesystem show
  • 快照源和目标必须在同一个挂载点下,且目标父目录需有写权限
  • 快照本身是只读还是可写,取决于是否加 -r 参数;不加默认可写,但修改它不会影响原数据(COW 机制保证)

btrfs subvolume snapshot 命令的路径参数容易搞反

命令格式是 btrfs subvolume snapshot <source><dest></dest></source>,但很多人把顺序记成「目标在前、源在后」,结果报错 No such file or directory —— 实际上是 <source></source> 找不到,因为输反了。

常见错误现象:

  • 输入 btrfs subvolume snapshot /snap/my-snap /data,提示 /snap/my-snap: No such file or directory(其实是把快照名当源了)
  • 目标路径的父目录不存在,也会报同个错误,需提前 mkdir -p
  • <source></source> 必须是已存在的子卷(btrfs subvolume list 能列出来),普通目录不行

正确示例:btrfs subvolume snapshot /data /data/snap-20240520

快照不等于备份:删原卷后快照还能用吗?

能,但有前提。Btrfs 快照共享底层 extent,只要没执行 btrfs subvolume delete 且没触发自动清理(如启用 space_cache=v2 且反复写满又清空),快照里的文件就还在。

不过要注意:

  • 如果原子卷被 delete,快照仍可访问,但无法再通过 subvolume sync 强制刷新其引用计数,极端空间压力下可能被误回收(罕见但可能)
  • 快照本身也是子卷,要长期保留就得单独备份(比如用 btrfs send + btrfs receive 流式导出到另一设备)
  • 别依赖快照防误删:用户 rm -rf 快照目录,就真没了;它不是回收站

只读快照 + 定时清理是生产环境常见组合

日常做系统更新或配置变更前打个只读快照,既避免意外写入污染,也方便比对差异。但没人手动删旧快照,所以得脚本化清理。

实操要点:

  • 创建只读快照:btrfs subvolume snapshot -r / /snap/root-$(date +%Y%m%d-%H%M)
  • 按时间排序并保留最近 7 个:btrfs subvolume list -t / | awk '$4 ~ /^root-/ {print $4}' | sort | head -n -7 | xargs -r -I{} btrfs subvolume delete "/snap/{}"
  • 注意 btrfs subvolume delete 是同步阻塞操作,大快照可能卡几秒到几分钟,别在 cron 里高频跑
  • 某些发行版(如 openSUSE)的 Snapper 已封装好这套逻辑,但底层仍是调 btrfs subvolume 系列命令

最易被忽略的一点:快照目录的挂载选项不影响其内容一致性——哪怕源子卷正在被 rsync 或数据库写入,快照那一刻的状态就是原子的;但如果你在快照过程中 umount 源,就可能中断 COW 导致损坏。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.27

2620

5

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

2026.02.03

249

24

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

2023.09.04

1118

7

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

2023.11.13

2731

4

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.12.29

845

3

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

2023.06.29

2525

3

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2023.08.14

3781

10

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

2023.08.31

2751

3

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.05

907

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习