btrfs的精简总结版

Btrfs 也有一个重要的缺点,当 BTree 中某个节点出现错误时,文件系统将失去该节点之下的所有的文件信息。而 ext2/3 却避免了这种被称为”错误扩散”的问题。

扩展性:extent、B-Tree、动态inode等特性保证了btrfs在大型机器上仍有卓越表象,整体性能不会随着系统容量的增加而降低。

数据一致性:才用COW事物技术来保证文件系统的一致性。btrfs还支持checksum,避免了silent corrupt的出现。而传统文件系统无法做到这一点。

其它设备管理特性:快照,克隆,管理多个物理设备

最小单位:extent:一些连续的block,一个extent由起始的block加上长度进行定义。

动态inode:因为ext2/3使用预先分配inode的机制导致文件数量受inode数量的限制。而btrfs使用了动态inode分配机制,每一个 inode只是B-Tree中的一个节点,用户可以无限制地任意插入新的inode,其物理存储位置是动态分配的。所以 btrfs 没有对文件个数的限制。

对SSD固态硬盘进行优化的文件系统,btrfs 用户可以使用 mount 参数打开对 SSD 的特殊优化处理。
Btrfs 的 COW 技术从根本上避免了对同一个物理单元的反复写操作。如果用户打开了 SSD 优化选项,btrfs 将在底层的块空间分配策略上进行优化:将多次磁盘空间分配请求聚合成一个大小为 2M 的连续的块。大块连续地址的 IO 能够让固化在 SSD 内部的微代码更好的进行读写优化,从而提高 IO 性能。

COW 事务:
理解 COW 事务,必须首先理解 COW 和事务这两个术语。
什么是 COW?
所谓 COW,即每次写磁盘数据时,先将更新数据写入一个新的 block,当新数据写入成功之后,再更新相关的数据结构指向新 block 。
什么是事务?
COW 只能保证单一数据更新的原子性。但文件系统中很多操作需要更新多个不同的元数据,比如创建文件需要修改以下这些元数据:
修改 extent tree,分配一段磁盘空间
创建一个新的 inode,并插入 FS Tree 中
增加一个目录项,插入到 FS Tree 中
任何一个步骤出错,文件便不能创建成功,因此可以定义为一个事务。
COW 事务能够保证文件系统的一致性,并且系统 Reboot 之后不需要执行 fsck 。

Checksum:
Checksum 技术保证了数据的可靠性,避免 silent corruption 现象。由于硬件原因,从磁盘上读出的数据会出错。比如 block A 中存放的数据为 0x55,但读取出来的数据变是 0x54,因为读取操作并未报错,所以这种错误不能被上层软件所察觉。
解决这个问题的方法是保存数据的校验和,在读取数据后检查校验和。如果不符合,便知道数据出现了错误。
ext2/3 没有校验和,对磁盘完全信任。而不幸的是,磁盘的错误始终存在,不仅发生在廉价的 IDE 硬盘上,昂贵的 RAID 也存在 silent corruption 问题。而且随着存储网络的发展,即使数据从磁盘读出正确,也很难确保能够安全地穿越网络设备。
btrfs 在读取数据的同时会读取其相应的 checksum 。如果最终从磁盘读取出来的数据和 checksum 不相同,btrfs 会首先尝试读取数据的镜像备份,如果数据没有镜像备份,btrfs 将返回错误。写入磁盘数据之前,btrfs 计算数据的 checksum 。然后将 checksum 和数据同时写入磁盘。

多设备管理:
动态增加设备,动态扩容
Btrfs 支持动态添加设备。用户在系统中增加新的磁盘之后,可以使用 btrfs 的命令将该设备添加到文件系统中。
为了灵活利用设备空间,Btrfs 将磁盘空间划分为多个 chunk 。每个 chunk 可以使用不同的磁盘空间分配策略。比如某些 chunk 只存放 metadata,某些 chunk 只存放数据。一些 chunk 可以配置为 mirror,而另一些 chunk 则可以配置为 stripe 。这为用户提供了非常灵活的配置可能性。

subvolume:
Subvolume 是很优雅的一个概念。即把文件系统的一部分配置为一个完整的子文件系统,称之为 subvolume 。
采用 subvolume,一个大的文件系统可以被划分为多个子文件系统,这些子文件系统共享底层的设备空间,在需要磁盘空间时便从底层设备中分配。这种模型有很多优点,比如可以充分利用 disk 的带宽,可以简化磁盘空间的管理等。
所谓充分利用 disk 的带宽,指文件系统可以并行读写底层的多个 disk,这是因为每个文件系统都可以访问所有的 disk 。传统的文件系统不能共享底层的 disk 设备,无论是物理的还是逻辑的,因此无法做到并行读写。
所谓简化管理,是相对于 LVM 等卷管理软件而言。采用存储池模型,每个文件系统的大小都可以自动调节。而使用 LVM,如果一个文件系统的空间不够了,该文件系统并不能自动使用其他磁盘设备上的空闲空间,而必须使用 LVM 的管理命令手动调节。
Subvolume 可以作为根目录挂载到任意 mount 点。 subvolume 是非常有趣的一个特性,有很多应用。
假如管理员只希望某些用户访问文件系统的一部分,比如希望用户只能访问 /var/test/ 下面的所有内容,而不能访问 /var/ 下面其他的内容。那么便可以将 /var/test 做成一个 subvolume 。 /var/test 这个 subvolume 便是一个完整的文件系统,可以用 mount 命令挂载。比如挂载到 /test 目录下,给用户访问 /test 的权限,那么用户便只能访问 /var/test 下面的内容了。

快照和克隆:
利用快照,管理员可以在时间点 T1 将数据库停止,对系统建立一个快照。这个过程一般只需要几秒钟,然后就可以立即重新恢复数据库服务。此后在任何时候,管理员都可以对快照的内容进行备份操 作,而此时用户对数据库的修改不会影响快照中的内容。当备份完成,管理员便可以删除快照,释放磁盘空间。
快照一般是只读的,当系统支持可写快照,那么这种可写快照便被称为克隆。克隆技术也有很多应用。比如在一个系统中安装好基本的软件,然后为不同的用户做不同的克隆,每个用户使用自己的克隆而不会影响其他用户的磁盘空间。非常类似于虚拟机。
如前所述 Btrfs 采用 COW 事务技术,从图 1-10 可以看到,COW 事务结束后,如果不删除原来的节点 A,C,E,那么 A,C,E,D,F 依然完整的表示着事务开始之前的文件系统。这就是 snapshot 实现的基本原理。
Btrfs 采用引用计数决定是否在事务 commit 之后删除原有节点。对每一个节点,btrfs 维护一个引用计数。当该节点被别的节点引用时,该计数加一,当该节点不再被别的节点引用时,该计数减一。当引用计数归零时,该节点被删除。对于普通的 Tree Root, 引用计数在创建时被加一,因为 Superblock 会引用这个 Root block 。很明显,初始情况下这棵树中的所有其他节点的引用计数都为一。当 COW 事务 commit 时,superblock 被修改指向新的 Root A ’’,原来 Root block A 的引用计数被减一,变为零,因此 A 节点被删除。 A 节点的删除会引发其子孙节点的引用计数也减一,其下的子孙节点的 比如B,C 节点的引用计数因此也变成了 0,从而被删除。 D,E 节点在 COW 时,因为被 A ’’所引用,计数器加一,因此计数器这时并未归零,从而没有被删除。
创建 Snapshot 时,btrfs 将的 Root A 节点复制到 sA,并将 sA 的引用计数设置为 2 。在事务 commit 的时候,sA 节点的引用计数不会归零,从而不会被删除,因此用户可以继续通过 Root sA 访问 snapshot 中的文件。

软件RAID:
Btrfs 缺省情况下对 metadata 进行 RAID1 保护。前面已经提及 btrfs 将设备空间划分为 chunk,一些 chunk 被配置为 metadata,即只存储 metadata 。对于这类 chunk,btrfs 将 chunk 分成两个条带,写 metadata 的时候,会同时写入两个条带内,从而实现对 metadata 的保护。

其他特性:
Btrfs 主页上罗列的其他特性不容易分类,这些特性都是现代文件系统中比较先进的技术,能够提高文件系统的时间或空间效率。

Delay allocation:
在文件系统中,小块空间频繁的分配和释放会造成碎片。延迟分配是这样一种技术,当用户需要磁盘空间时,先将数据保存在内存中。并将磁盘分配需求发送给磁盘空间分配器,磁盘空间分配器并不立即分配真正的磁盘空间。只是记录下这个请求便返回。
磁盘空间分配请求可能很频繁,所以在延迟分配的一段时间内,磁盘分配器可以收到很多的分配请求,一些请求也许可以合并,一些请求在这段延迟期间甚至可能被取消。通过这样的“等待”,往往能够减少不必要的分配,也有可能将多个小的分配请求合并为一个大的请求,从而提高 IO 效率。

Inline file:
系统中往往存在大量的小文件,比如几百个字节或者更小。如果为其分配单独的数据 block,便会引起内部碎片,浪费磁盘空间。 btrfs 将小文件的内容保存在元数据中,不再额外分配存放文件数据的磁盘块。改善了内部碎片问题,也增加了文件的访问效率。
得益于 inline file 技术,btrfs 处理小文件的效率非常高,也避免了磁盘碎片问题。

目录索引 Directory index:
当一个目录下的文件数目巨大时,目录索引可以显著提高文件搜索时间。 Btrfs 本身采用 BTree 存储目录项,所以在给定目录下搜索文件的效率是非常高的。

压缩:
大家都曾使用过 zip,winrar 等压缩软件,将一个大文件进行压缩可以有效节约磁盘空间。 Btrfs 内置了压缩功能。
通常人们认为将数据写入磁盘之前进行压缩会占用很多的 CPU 计算时间,必然降低文件系统的读写效率。但随着硬件技术的发展,CPU 处理时间和磁盘 IO 时间的差距不断加大。在某些情况下,花费一定的 CPU 时间和一些内存,但却能大大节约磁盘 IO 的数量,这反而能够增加整体的效率。
比如一个文件不经过压缩的情况下需要 100 次磁盘 IO 。但花费少量 CPU 时间进行压缩后,只需要 10 次磁盘 IO 就可以将压缩后的文件写入磁盘。在这种情况下,IO 效率反而提高了。当然,这取决于压缩率。目前 btrfs 采用 zlib 提供的 DEFALTE/INFLATE 算法进行压缩和解压。在将来,btrfs 应该可以支持更多的压缩算法,满足不同用户的不同需求。
对于某些类型的文件,比如 jpeg 文件,已经无法再进行压缩。尝试对其压缩将纯粹浪费 CPU 。为此,当对某文件的若干个 block 压缩后发现压缩率不佳,btrfs 将不会再对文件的其余部分进行压缩操作。这个特性在某种程度上提高了文件系统的 IO 效率。

预分配:
很多应用程序有预先分配磁盘空间的需要。他们可以通过 posix_fallocate 接口告诉文件系统在磁盘上预留一部分空间,但暂时并不写入数据。如果底层文件系统不支持 fallocate,那么应用程序只有使用 write 预先写一些无用信息以便为自己预留足够的磁盘空间。
由文件系统来支持预留空间更加有效,而且能够减少磁盘碎片,因为所有的空间都是一次分配,因而更有可能使用连续的空间。 Btrfs 支持 posix_fallocate 。

总结:
至此,我们对 btrfs 的很多特性进行了较为详细的探讨,但 btrfs 能提供的特性却并不止这些。 btrfs 正处于试验开发阶段,还将有更多的特性。
Btrfs 也有一个重要的缺点,当 BTree 中某个节点出现错误时,文件系统将失去该节点之下的所有的文件信息。而 ext2/3 却避免了这种被称为”错误扩散”的问题。
但无论怎样,希望您和我一样,开始认同 btrfs 将是 Linux 未来最有希望的文件系统。

文件系统创建:
mkfs.btrfs
-L ‘LABEL‘
-d <type>: raid0, raid1, raid5, raid6, raid10, single
-m <profile>: raid0, raid1, raid5, raid6, raid10, single, dup
-O <feature>
-O list-all: 列出支持的所有feature;
属性查看:
btrfs filesystem show
挂载文件系统:
mount -t btrfs /dev/sdb MOUNT_POINT

透明压缩机制(拷贝过来一个文件查看大小也完全一样,这个压缩内部理论有待研究):
mount -o compress={lzo|zlib} DEVICE MOUNT_POINT

缩小文件系统(我在测试的时候,两个20G的硬盘,我仅仅只能减去17G,再多就报错了):
btrfs filesystem resize -13G /mydata
扩容文件系统:
btrfs filesystem resize +13G /mydata
或者(扩充到最大)
btrfs filesystem resize max /mydata
添加一个硬盘:
btrfs device add /dev/sdd /mydata
把/mydata中其它的数据,均衡(移动到)到新添加的磁盘中(会占用io资源):
btrfs balance start /mydata
btrfs balance status #查看状态
注意:如果数据量过大的时候,这个时间可能就会很久
balance也有暂停(pause),继续(resume),取消(cancel)等操作,可以通过man btrfs-balance去查看下
移除一个物理卷(btrfs会自动把数据先挪走再拆除):
btrfs device delete /dev/sdb /mydata

修改raid级别(有点晕,需要查一下这几个组织机制的关系)
修改数据的组织机制:act on data chunks
btrfs balance -dconvert=raid0 /mydata
修改元数据的组织机制:act on metadata chunks
btrfs balance -mconvert=raid1 /mydata
修改系统的组织机制:act on system chunks
btrfs balance -sconvert=raid5 /mydata
btrfs的子命令:
filesystem
device
balance
subvolume #子卷的管理命令

创建一个子卷cache:
btrfs subvolume create /mydata/cache
挂在子卷
mount -o subvol=cache /dev/sdb /mnt
也可以使用subid挂载
mount -o subvolid=268 /dev/sdb /mnt
查看volid:
btrfs subvolume list /mydata

删除子卷(注意:请先挂在父卷):
btrfs subvolume dalete /mydata/cache

创建快照(快照卷必须与原卷在同一个卷组中):
btrfs subvolume snapshot /mydata/logs /mydata/logs_snapshot
删除快照:
btrfs subvolume dalete /mydata/logs_snapshot
对单个文件创建快照:
cp --reflink file.txt file.txt_snapshot
把其它文件系统转换成btrfs(这里拿ext4做的测试,其它文件系统请一定要事前严格测试下):
强制检测下:
fsck -f /dev/sdd1
转换(数据没丢):
btrfs-convert /dev/sdd1
查看有没有生效:
btrfs filesystem show
回滚到之前的文件系统(之前是ext4):
btrfs-convert -r /dev/sdd1
查看:
blkid /dev/sdd1

时间: 2024-10-19 12:29:48

btrfs的精简总结版的相关文章

搜狗拼音输入法 v8.5e 去广告精简优化版

搜狗拼音输入法8.5 正式版例行更新!最新字母代号为e,详细版本号v8.5.0.1322:新版颜文字大改版,优化智能模糊音.输入统计.搜狗拼音输入法是电脑装机必备软件,版本有传统版和智慧版之分,其打字超准.词库超大.速度飞快.外观漂亮,因此使得输入操作变得事半功倍.精简的版本用着舒适! zd423.大水牛:专注精简优化,彻底免升级更新,砍掉了多余功能.无微门户弹窗.无勋章相关推荐.无推广软件渣行为,无多余干扰提示,无多余进程驻留,可选安装个人中心和联网组件,让你安心舒适的打字!删除了云候选程序.

AutoCAD2018精简优化版_32/64位下载_附注册机激活程序_附CAD2018安装图解教程[百度云盘]

cad2018精简版是由"珊瑚の海"基于官方原版的autocad2018而精简的一个cad制图软件,该版本精简了多余组件,保留必须的VB.VC..Net 4.5.2.DirectX运行库,保留Express扩展工具可以自行选择安装,完善一些字体库,屏蔽并删除AutoCAD通讯中心,屏蔽AutoCADFTP中心,默认为AutoCAD经典空间,体积大幅度的缩减,并且软件包中集成注册机含激活说明,能够给用户最实用的绘图体验. 需要注意的是:本站提供的autocad2018 64位精简优化版功

天天看 高清影视 6.7.9.12 去广告精简 安装版

天天看高清影视是一款可在线欣赏视频的客户端软件,让用户可以在线享受丰富多彩的直播和点播节目:全新视界,无限精彩,百万高清视频想看就看. 更新日志: 1.全新的下载模块,好看更好用: 2.修复设置选项多窗口打开的问题: 3.修复20366部无法播放的快播资源: 4.解决V6.5中其他一些Bug: 此版特点: #基于官方 v6.7.9.12 正式版精简制作,删除部分非必要文件,缩小安装包体积: #去除菜单多余项: #去除程序自校验: #去除右下角Flash弹窗广告: #去除播放器下方式滚动文字: #

mariadb最新精简压缩版win64解压即用1tvdgj

勃缙燠擞 H部淼葬 洪水冲夺游人路--我曾观潮更观瀑瀑下静立一白鹿.霎时人鹿两相望南唐东越或西 暑ゑ狱埕 她说道:"很难想像你是当年那个在芦苇荡杀人的世子殿下." 蓣ㄜ铀ス 白煜突然问了一个不合时宜的问题"先生可知道赵勾头目到底是何人?" 愤腩攵技 岌滕镊 像姬扰桨 惦呋甍诠 帽奈疰氪 官棋子繁多星罗密布美事就没预想中那般妙不可言了另外一座小巧玲珑的佛掌湖冷 明知眼前这位高不可攀的年轻藩王注定不可能是那个人但她在这一刻很不合时宜地想 鲛宀帽戥 于公于私北莽南朝骑军

IBM Personal Communications 软件:精简绿色版TN3270终端模拟器:经测试可以在 (winxp、win2003、win764)上运行

全系列版本啊!耗费了我大量的时间和精力,深夜熬到3点! 注意:如何使用?解压后,里面有个reg注册表文件,以管理员权限用户双击加载即可. http://files.cnblogs.com/files/jinzhenshui/pcom_6.0.14_green.zip http://files.cnblogs.com/files/jinzhenshui/Pcom_6.0.10_Green.zip http://files.cnblogs.com/files/jinzhenshui/Pcom_5.9

酷狗音乐 v 8.1.45.19805 精简优化版

专属VIP身份标识(登录都为豪华VIP)去电台右侧广告位,破解MV弹幕限制下载自动VIP加速去界面所有Tips去菜单多余项,去游戏.消息按钮去播放MV缓冲.暂停广告,其他广告,去弹窗禁后台下载生成广告程序.应用推广包 https://pan.baidu.com/s/1qYVo9VA

TCP的三次握手和四次挥手精简易懂版

先上个TCP三次握手和四次分手的图 网上好多都是错的,只能自己画了,一个正确的图的确可以方便理解. 详解如下,上图传递过程中出现的几个字符(SYN,ACK,FIN,seq,ack)各代表什么意思 SYN,ACK,FIN存放在TCP的标志位,一共有6个字符,这里就介绍这三个: SYN:代表请求创建连接,所以在三次握手中前两次要SYN=1,表示这两次用于建立连接,至于第三次什么用,在疑问三里解答. FIN:表示请求关闭连接,在四次分手时,我们发现FIN发了两遍.这是因为TCP的连接是双向的,所以一次

[转]仿World Wind构造自己的C#版插件框架——WW插件机制精简改造

很久没自己写东西啦,早该好好总结一下啦!一个大师说过“一个问题不应该被解决两次!”,除了一个好脑筋,再就是要坚持总结. 最近需要搞个系统的插件式框架,我参照World Wind的插件方式构建了个插件框架,可以参照<WorldWind学习系列五:插件加载过程全解析>,下面与大家分享一下. 初始化时,加载前面两个插件,可以动态加载KeyBoarderLoader,如下图: 该插件框架是WW插件框架的精简改造版,非常适用于插件式系统开发,也希望帮助大家学习一下WW的插件加载机制. 缺陷在于:未实现事

Windows 64位 安装Oracle instantclient 官方绿色版和PL/SQL Developer 总结

原文: http://blog.csdn.net/kimsoft/article/details/8751267 操作系统:Windows 7 64位旗舰 要求,安装PL/SQL Developer用于开发 一.下载Oracle官方精简绿色版 http://www.oracle.com/technetwork/topics/winsoft-085727.html 特别注意,要下载32位的,因为PL/SQL Developer目前只有32位的版本 二.安装配置instantclient 下载后,解