BTRFS 的核心是写时复制 (Copy-on-Write, CoW) 机制。它在修改数据时不原地覆盖,而是将新数据写入空闲块,然后更新元数据指针。这是其所有高级功能的基础。
子卷和快照
子卷和快照是 BTRFS 的关键特性。子卷可以看作文件系统内的一个轻量级分区,而快照是子卷在特定时间点的副本。创建快照几乎是瞬间完成的,并且初始不占用额外空间,只有当数据发生变化时,新数据才会占用空间。这使得创建系统备份点变得非常高效,Timeshift
和Snapper
是实现自动化快照管理的常用工具。
# 创建一个只读快照
sudo btrfs subvolume snapshot -r <source_path> <snapshot_path>
透明压缩
BTRFS 支持透明压缩,但默认关闭。启用后,数据在写入时自动压缩,读取时自动解压,对应用程序透明。推荐在/etc/fstab
的挂载选项中添加compress=zstd
来启用。此设置只对新文件生效,要压缩现有数据,需执行defragment
命令。
# 压缩现有文件
sudo btrfs filesystem defragment -r -czstd <path>
数据库特殊配置
在数据库(如 MySQL)等随机写密集型应用上,CoW 机制会导致性能下降和文件碎片化。解决方案是必须为数据库的数据目录禁用 CoW。这需要在一个空目录上执行chattr +C
命令。对于性能敏感的生产数据库,XFS 或 EXT4 仍是更稳妥的选择。
# 为目录禁用
CoWsudo chattr +C /path/to/database/data
搭配docker
BTRFS 可作为 Docker 的存储驱动,利用子卷和快照高效管理镜像层和容器,能提升空间效率和容器启停速度。在/etc/docker/daemon.json
中设置"storage-driver": "btrfs"
即可启用。
实际空间
在空间管理方面,由于快照的存在,df
命令无法准确反映真实可用空间。应使用btrfs filesystem usage
命令来查看详细的空间分配情况。规划磁盘时,需要根据数据变化率和快照保留策略,为快照预留足够的缓冲空间。
# 查看空间使用详情
sudo btrfs filesystem usage <mount_point>
内置RAID配置
BTRFS 内置了 RAID 功能。其中 RAID 0, RAID 1, RAID 10 被认为是稳定可靠的。但 RAID 5 和 RAID 6 存在已知问题,不应在生产环境中使用。
原文标题: BTRFS 核心功能与实践笔记
原文地址: https://phpreturn.com/index/a68d0a460d103e.html
原文平台: PHP武器库
版权声明: 本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。