Btrfs是下一代写时复制文件系统, 支持很多高级存储技术, 使得它非常适合Docker, Btrfs在Linux内核主线上, 它的磁盘格式已经比较稳定, 但许多特性都处于开发阶段.
Btrfs的特性包括hin provisioning, 写时复制和快照.
Btrfs的未来
Btrfs一直被称颂为Linux文件系统的未来, 内核中全面支持Btrfs, 稳定的磁盘格式, 在稳定性上活跃的开发活动, 使其成为Linux文件系统的未来更接近现实.
在写磁盘时, devicemapper被认为更加安全和稳定, 更适用于生产环境, 你只有对Btrfs有很好的理解并且有btrfs的使用经验才可以将其用于生产环境.
使用Btrfs进行镜像分层和共享
Btrfs使用子卷和快照管理镜像和容器层的磁盘上的组件, Btrfs的子卷看起来就像一个普通的Unix文件系统, 它们可以有自己的内部目录结构.
子卷在本地是写时复制的, 当底层存储池发出请求时就会分配存储空间.
子卷也可以嵌套或者被快照.
快照是某个读写时间点时整个子卷的副本, 它们就存在于创建它们的子卷下, 也可以创建快照的快照.
快照是Btrfs文件系统里的一等公民, 它们和普通的子卷看起来和操作起来没什么不同, 创建快照的技术内建于Btrfs文件系统, 所以Btrfs快照空间利用率很高, 并且很小的性能影响.
Btrfs存储驱动使用Btrfs子卷或者快照存储每一个镜像和容器.
-
镜像的基础层存储于下面目录
/var/lib/docker/btrfs/subvolumes -
其他镜像层使用它父层的子卷或快照的快照进行存储
镜像和容器在磁盘上的构建
在Ubuntu14.04LTS上配置Btrfs
Btrfs与Docker性能
-
页缓存
Btrfs不支持页缓存共享, 所以它不太适合PaaS, 也不适合容器密度很高的场景 -
少量写(small writes)
如果容器执行大量的small writes将导致Btrfs块使用不良, 最终导致空间不足并且docker停止工作, 这是当前版本的Btrfs的主要缺点. -
顺序写
Btrfs使用日志技术进行顺序写, 可能影响顺序写, 性能可能降低为原来的50% -
碎片化
磁盘碎片是使用写时复制技术的副产品, 很多小的随机写入就能导致碎片问题,
挂载选项autodefrag尝试着修复碎片化问题, 但使用之前需要仔细测试, 因为有证据表明它会降低性能. -
SSD
Btrfs有为SSD原生做的优化, 挂载选项中提供-o ssd. 通过避免对SSD无效的seek优化从而提高了SSD写性能.Btrfs也支持TRIM/DISCARD原语, 通过使用 -o discard挂载选项, 但是使用前需要自己做好测试. -
使用数据卷
尽量将大量的写入操作通过数据卷实现 -
平衡的Btrfs
使用一个cron任务重新平衡Btrfs设备.
网友评论