初识Btrfs文件系统

Btrfs 也有一个重要的缺点 , 当 BTree 中某个节点出现错误时 , 文件系统将失去该节点之下的所有的文件信息 。而 ext2/3 却避免了这种被称为”错误扩散”的问题 。
Btrfs相关介绍:
Btrfs 是一个 linux 中的新的写时复制(copy-on-write (COW))的文件系统 , 目的是实现高级功能的同时着重与容错功能 , 修复功能以及易于管理 。目前由Oracle, Red Hat, 富士通, Intel, SUSE以及其他组织共同开发 , 在 GPL 许可证下发行 , 同时向任何人公开代码 。
Btrfs核心特性:
【初识Btrfs文件系统】多物理卷支持:btrfs可由多个底层物理卷组成;支持RAID , 以联机“添加”、“移除”、“修改”;
写时复制更新机制(CoW):复制、更新及替换指针 , 而非“就地”更新;在文件进行修改的时候 , 首先将文件复制一份出来 , 在复制出来的文件上进行修改 , 修改完成之后 , 将指向原有文件的指针修改指向到修改完成的文件上 , 若修改完成的文件出现了错误 , 则我们可以通过原文件进行修复
数据及元数据校验码:checksum ,当存储某个文件时 , checksum会将数据的源数据和数据的校验码 , 分别通过文件的属性扩展进行保存 , 当我们再次读取数据时可以方便的检测数据是否受损 , 如果文件受损系统可以完成自动修复;
子卷:sub_volume , 在一个卷上创建多个子卷 , 在每一个子卷上创建文件系统 , 并挂载使用;
快照:支持快照的快照;因此可以实现类似增量快照的机制
透明压缩 :如果我们在存储文件时 , 进行压缩存储 , 那么在文件发往btrfs时 , 会自动的占用时钟周期 , 完成数据的压缩存放 , 而用户并不知道 , 在用户读取文件时 , 会自动的进行文件的解压缩 , 可以实现节约磁盘空间 。但是压缩和解压缩会占用时钟周期;
Btrfs文件系统如何创建:
mkfs.btrfs-L ‘LABEL‘:指定文件系统的卷标;-d <type>: raid0, raid1, raid5, raid6, raid10, single 指明数据的存放方式 , 支持RAID机制;-m <profile>: raid0, raid1, raid5, raid6, raid10, single, dup 指明元数据的存放方式 , 是否可跨越多个物理卷 , 支持RAID机制;-O <feature>:在格式化文件系统的时候 , 是否直接开启文件系统的某些特性;-O list-all: 列出支持的所有特性;[root@centos7 ~]# fdisk -l #有三块硬盘sdb,sdc,sdd 用于创建btrfs 文件系统 , 大小均为20GDisk /dev/sdd: 21.5 GB, 21474836480 bytes, 41943040 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytes[root@centos7 ~]# mkfs.btrfs -L mydata /dev/sdb /dev/sdc #将sdb,sdc创建为btrfs文件系统Btrfs v3.16.2See http://btrfs.wiki.kernel.org for more information.Turning ON incompat feature ‘extref‘: increased hardlink limit per file to 65536adding device /dev/sdc id 2fs created label mydata on /dev/sdbnodesize 16384 leafsize 16384 sectorsize 4096 size 40.00GiB[root@centos7 ~]# btrfs filesystem show #查看系统上的所有btrfs文件系统Label: ‘mydata‘ uuid: 70cf9f41-8977-4265-bf27-ca38b6459940Total devices 2 FS bytes used 112.00KiBdevid 1 size 20.00GiB used 2.03GiB path /dev/sdbdevid 2 size 20.00GiB used 2.01GiB path /dev/sdc[root@centos7 ~]# blkid /dev/sdb #查看设备sdb的属性/dev/sdb: LABEL="mydata" UUID="70cf9f41-8977-4265-bf27-ca38b6459940" UUID_SUB="b8c340e2-6165-4b31-90df-278b5ac77a2f" TYPE="btrfs"[root@centos7 ~]# blkid /dev/sdc #查看设备sdc的属性/dev/sdc: LABEL="mydata" UUID="70cf9f41-8977-4265-bf27-ca38b6459940" UUID_SUB="a80e87bb-9564-488a-9c8f-a403d0e4090a" TYPE="btrfs"可见/sdb,/sdc UUID一直 , 子卷UUID不同[root@centos7 ~]# mkdir /mydata #创建挂载点/mydata[root@centos7 ~]# mount /dev/sdb /mydata #挂载刚刚创建的文件系统 , 此时挂载/dev/sdc是一样的效果[root@centos7 ~]# mount | grep /mydata #挂载成功/dev/sdb on /mydata type btrfs (rw,relatime,seclabel,space_cache)#man btrfs filesystem 可用来查看命令帮助文档


推荐阅读