BTRFS 核心功能与实践笔记

2025-09-22 奥古斯宏

BTRFS 的核心是写时复制 (Copy-on-Write, CoW) 机制。它在修改数据时不原地覆盖,而是将新数据写入空闲块,然后更新元数据指针。这是其所有高级功能的基础。

子卷和快照

子卷和快照是 BTRFS 的关键特性。子卷可以看作文件系统内的一个轻量级分区,而快照是子卷在特定时间点的副本。创建快照几乎是瞬间完成的,并且初始不占用额外空间,只有当数据发生变化时,新数据才会占用空间。这使得创建系统备份点变得非常高效,TimeshiftSnapper 是实现自动化快照管理的常用工具。

# 创建一个只读快照
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 存在已知问题,不应在生产环境中使用。

版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。


最近浏览
IP用户:148.113.*.*
1 小时前 aHrefs Bot
IP用户:43.153.*.*
1 小时前 Chrome Windows 10
IP用户:49.51.*.*
2 小时前 Mobile Safari iOS 13.2
IP用户:66.249.*.*
3 小时前 Googlebot
IP用户:66.249.*.*
3 小时前 Googlebot
IP用户:220.181.*.*
3 小时前 Baidu Spider
IP用户:8.134.*.*
4 小时前 Chrome Windows XP
IP用户:66.249.*.*
4 小时前 Googlebot
IP用户:39.76.*.*
4 小时前 Firefox Windows 10
累计浏览次数:13
评论
点击登录
phpreturn,PHP武器库,专注PHP领域的项目和资讯,收录和介绍PHP相关项目。
最近浏览 点击登录
累计浏览次数:251425
一周浏览次数:2277
今日浏览次数:105

本站所有权利归 phpreturn.com 所有

举报/反馈/投稿邮箱:phpreturn@ulthon.com

鲁ICP备19027671号-2