btrfs子卷快照备份与回滚的核心是将应用目录独立为子卷后秒级创建只读快照,通过挂载快照或切换默认子卷实现恢复,无需复制文件、不依赖外部工具;需先卸载原路径并用btrfs subvolume create新建子卷,再挂载更新fstab,确认btrfs subvolume list可见;快照命令为sudo btrfs subvolume snapshot -r /@www /.snapshots/www_$(date +%y%m%d_%h%m%s),回滚支持临时挂载取文件、动态切换服务根目录或设默认子卷重启生效,须配合应用停写确保一致性,并定期清理旧快照释放空间。

用Btrfs子卷快照做应用数据备份与回滚,核心是把应用目录独立为子卷,再对它秒级创建只读快照——不是复制全部文件,而是建立一个指向原始数据块的轻量视图。恢复时挂载快照或切换默认子卷即可,整个过程不依赖外部工具、不中断服务(只要应用支持热挂载)。
先划出专用子卷:让应用数据可隔离、可快照
快照只能在子卷间操作,所以不能直接对/var/www或/opt/myapp这类普通目录建快照。必须先把它变成独立子卷:
- 卸载原路径(如/var/www),用btrfs subvolume create /@www新建子卷
- 将/@www挂载到/var/www,并更新/etc/fstab确保重启生效
- 确认结构:运行btrfs subvolume list /,应看到@www出现在列表中,且挂载点正确
常见应用推荐子卷划分:@db(数据库数据目录)、@web_root(Web根目录)、@config(配置中心目录)。每个子卷互不影响,快照和恢复都可单独操作。
秒级创建只读快照:升级/发布前必做的一步
应用变更前执行快照,命令瞬间完成,无论目录大小:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- sudo btrfs subvolume snapshot -r /@www /.snapshots/www_$(date +%Y%m%d_%H%M%S)
- -r参数强制只读,防止误写破坏快照一致性
- 快照路径/.snapshots/本身也需是同一Btrfs设备上的子卷(如@snapshots),不能跨分区
注意:不要在应用正在大量写入时创建快照——虽然Btrfs能保证文件系统层面一致,但若应用自身无事务或锁机制(如未关闭MySQL写入),快照可能包含半写状态的文件。建议配合应用停写指令(如mysql -e "FLUSH TABLES WITH READ LOCK")后再快照。
按需回滚:三种常用方式对应不同场景
快照本身是子卷,因此恢复方式灵活:
- 临时查看或取文件:直接挂载快照目录,例如sudo mount -o subvol=@www_20260509_103000 /mnt/old,然后从/mnt/old复制需要的配置或数据库文件
- 整站回退(不停机):若Web服务器支持动态切换文档根目录(如Nginx reload),可修改配置指向快照路径(如/mnt/old),再重载服务
- 彻底回滚到某状态(需重启或切换默认子卷):用btrfs subvolume set-default设快照ID为默认子卷,然后重启或重新挂载/;适合系统级应用(如容器运行时根目录)
自动清理与空间管理:避免快照吃光磁盘
快照不删除,其共享的数据块就无法释放。必须定期清理旧快照:
- 保留策略示例:每日快照留7天,每周快照留4周
- 清理命令:find /.snapshots -maxdepth 1 -name 'www_*' -type d -mtime +7 -delete
- 检查空间占用:sudo btrfs filesystem usage /看Data和System使用率;用sudo btrfs filesystem du -s /.snapshots/看各快照实际独占空间
不复杂但容易忽略:快照只是指针,真正释放空间要等所有引用它的快照都被删除,且执行过btrfs filesystem sync后才生效。










