备注:本文翻译自 IBM Research Report BTRFS - Linux Btree Filesystem

在写的时候,碎片整理以两种不同方式解决。为了碎片整理一个文件,它被读取,COWed,并在下一个检查点写入磁盘。这可能会使他更加顺序,因为分配器尝试在尽可能少的extents里写出来。缺点是与旧快照的共享丢失了。在许多情况下,这个简单的算法是有效的。在一些情况下,一个更加复杂的算法维持共享是需要的。

当缩减文件系统的时候,或者从磁盘删除数据,重新分配会被使用。这是一种算法扫描一个chunk和移动实时数据,同时保持共享。重新分配是复杂的程序,无论怎么样,在我们试图减少空间消耗的时候,无视共享可能会导致空间使用量的增加。

迁移通过chunks basis 工作在一个chunk上。一般的方案是:

1.迁走所有实时的extents(在chunk中)

2.找到所有引用发到chunks中。

3.在保持共享时修复引用

写时复制方法被贯穿使用;引用永远不会更新到位。表1 展示了一个简单的例子。一个数据extent,蓝色,需要被移动。

表1:在extent tree下进行范围内的查找,在chunk中找到所有的extents,拷贝所有的实时extents到新的位置。

为了加速一些引用跟踪,我们跟随back-references去找到所有顶层树块直接或者间接地引用chunk。结果存储在一个叫做backref_cache的DIAG类的数据结构。

表2:上层节点存储在一个backref_cache.

子卷树列表从backref_cache中引用的chunk被计算;这些树被顺序的克隆,看表3。这个操作有两种影响:(1)及时冻结子卷的状态。(2)它允许在为用户提供持续操作的同时对子卷进行即时修改。

表3:迁移树。这个例子中,子卷被克隆。可以对克隆尽心更改。

接下来,所有chunks的引用都被遵循, 使用back-references。COW在reloc tree中被用于更新。看表4。

表4:使用COW去修复在reloc树中的引用

最后一步是合并reloc trees和原始的。我们遍历树。我们找到在reloc树中被修改但是对应的部分在fs tree中没有被修改的子树。这些在reloc tree中的子树与fs树中的老同行交换。最终结果是新的fs-trees。最后,我们丢弃reloc trees,他们不再需要了。表5是一个例子。

合并reloc树和对应的fs树,然后drop掉reloc树。

新的文件系统DIAG在内存中,有正确的共享结构。它和原始的使用一样的数量,这就意味着文件系统空间使用时一样的。将DIAG写出到磁盘可以在连续的范围内完成,从而提高序列性。一旦完成,老的chunk可以被丢弃。

本文翻译自:IBM Research Report - BTRFS

BTRFS Defragmentation相关推荐

  1. A Beginner's Guide To btrfs

    写得很好,原文被墙,转载过来收藏. 原文:http://www.howtoforge.com/a-beginners-guide-to-btrfs Version 1.0  Author: Falko ...

  2. 下一代Linux文件系统,存储那些事儿(二): 下一代Linux文件系统BTRFS简介

    BTRFS,通常念成 Butter FS,Better FS 或B-tree FS.下一代的Linux文件系统. 它基于写时拷贝(copy-on-write),支持高效的snapshot和clone. ...

  3. btrfs的介绍与使用

    源文献:http://www.ibm.com/developerworks/cn/linux/l-cn-btrfs/index.html#ibm-pcon 简单看了一下这篇文章,对其中一些机制的实现还 ...

  4. 镁光ssd管理工具 linux,在 SSD 上使用 Btrfs 文件系统的相关优化

    优化挂载参数 在 Linux 中挂载 SSD 上的 btrfs,可以采用各种参数进行优化: # UUID=/btrfs defaults,ssd,discard,noatime,compress=lz ...

  5. LVM逻辑卷的缩减与删除,LVM逻辑卷快照,btrfs文件系统,网络管理

    逻辑卷缩减 缩减的时候要注意缩减的空间不要超过文件系统的空间,不然缩减的时候会损坏文件系统. 第一步要先取消挂载(必须) 第二部检查文件完整性(必须) e2fsck -f /dev/vg0/lv0 第 ...

  6. 新一代 Linux 文件系统 btrfs 简介

    btrfs 的特性和使用 Btrfs 被称为是下一代 Linux 文件系统.近年来 ext2/3 遇到越来越多的扩展性问题,在期待 ext4 的同时,人们发现了 btrfs,据说它采用了很多先进的文件 ...

  7. Btrfs入门(一)

    一.LVS和btrfs     btrfs自己就支持动态扩展,所以不必建立lvm     1.LVS         pv-->vg--->lv             PE:由PE指定, ...

  8. linux中的软RAID实现,逻辑卷和btrfs文件系统

    RAID: Redundant Arrays of Inexpensive Disks,廉价磁盘冗余阵列:              Redundant Arrays of Independent D ...

  9. 资料收集新一代 Linux 文件系统 btrfs 简介

    来自: http://www.ibm.com/developerworks/cn/linux/l-cn-btrfs/ Btrfs 简介 文件系统似乎是内核中比较稳定的部分,多年来,人们一直使用 ext ...

  10. 红帽企业版linux 7.4更新启动,红帽Linux企业版7.4 淘汰Btrfs文件系统

    我们不得不承认Btrfs是一种古老的文件系统,当初(2007年)是由甲骨文宣布并进行中的COW(copy-on-write式)文件系统,意图取代Linux的ext.但是天不遂人愿,2011年8月9日, ...

最新文章

  1. 将整数拆分为2的幂次方
  2. 51Nod:1085 背包问题
  3. Sublime-text
  4. vue --- http拦截,登录登出的逻辑设计
  5. Docker系列之一:入门介绍
  6. Spring Boot中表格的请求以及表格界面的显示
  7. 开启docker中MongoDB的认证授权
  8. 代码款空题 包的使用
  9. mysql查询字段变慢,MySQL Query IN()子句在索引列上变慢
  10. CSS中可以通过哪些属性定义,使得一个DOM元素不显示在浏览器可视范围内?
  11. 题解【luogu2045 方格取数游戏加强版】
  12. L3-017 森森快递 (30 分)-PAT 团体程序设计天梯赛 GPLT
  13. double精度丢失问题
  14. idea的使用记录一
  15. python vecm_用Eviews处理有关VARVECM模型的几个问题
  16. python输出实时时间
  17. String类练习:我国的居民身份证号码,由由十七位数字本体码和一位数字校验码组成。
  18. eMule中的server无法连接问题
  19. java ora 01002,ORA-01002 提取违反顺序
  20. 代谢组与转录组联合分析方法介绍

热门文章

  1. 虚拟机配置opc服务器,组态王怎么配置成opc服务器
  2. python并发与网络编程
  3. Halcon创建文件夹
  4. 轻量级服务器和ECS云服务器有什么区别?
  5. (转)一些jbx的配置
  6. TMS320C5509A 控制DDS AD9854芯片进行AM幅度调制时的FIR滤波处理
  7. 怎样设定目标(三)—— 目标设定前的准备
  8. 《MFC添加语音功能》
  9. skynet mysql 携程_有哪些小型后台服务端开源项目?
  10. 1小时学会通过Java Swing Design设计java图形化