Loading... <p><strong>Btrfs</strong>,也可称为B-tree,Butter FS,Better FS,是CentOS7中一种新型的文件系统。</p> <p><strong>核心特性</strong>:</p> <p><span class="Apple-tab-span"> </span>1.多物理卷支持,可由多个物理卷(pv)组成,支持raid,以联机添加删除</p> <p><span class="Apple-tab-span"> </span>2.支持写实复制(Copy on Write,Cow)<span class="Apple-tab-span"> </span></p> <p><span class="Apple-tab-span"> </span>复制一份修改,改好之后用指针替换,出错时指回原本文件。而不是就地修改</p> <p><span class="Apple-tab-span"> </span>3.数据及元数据校验码:checksum</p> <p><span class="Apple-tab-span"> </span>4.子卷:Sub_volume</p> <p><span class="Apple-tab-span"> </span>5.快照,基于写实复制,支持快照的快照,能实现增量快照</p> <p><span class="Apple-tab-span"> </span>6.透明压缩</p> <p></p> <p><strong>格式化:</strong></p> <p>mkfs.btrfs -L LABEL /dev/device1 /dev/device2</p> <pre class="brush:bash;toolbar:false">mkfs.btrfs -L #label -d <type> #date,数据保存的类型,raid0,raid5,raid6,raid10,single -m,metadata #元数据保存类型 raid0,raid5,raid6,raid10,single,dup(冗余) -O #功能选项,特性,在格式化时生效 mkfsbtrfs -O list-all查看支持的格式化选项。 由于不同版本内核可能功能不一样,所以用这个命令查看</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180730-57.png" title="1458924797205402.png" alt="feature.png" /></p> <p></p> <p>用blkid /dev/device1和device2查看信息的时候,两个硬盘的pv的主uuid一样,副uuid不一样</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180730-70.png" title="1458920042657709.png" alt="QQ截图20160326003401.png" /></p> <p>注意:虽然这两个设备是放在一起格式化了,但是并不是子卷的关系。只是将两个硬盘设备格式化成一个btrfs设备</p> <p></p> <p><strong>btrfs的子命令以及详细用法介绍</strong></p> <p></p> <p><strong>1.filesystem </strong>管理命令</p> <pre class="brush:bash;toolbar:false">btrfs filesystem show #显示详细信息 btrfs filesystem df <挂载点> #已挂载分区使用状况 btrfs filesystem resize [+?G|max] <挂载点> #增减容量 btrfs filesystem defragment #碎片整理</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180730-76.png" title="1458920748326829.png" alt="filesystem.png" /></p> <p><strong>2.device </strong>#添加到已有的挂载点上使用add之后,第二个被添加的就会绑定在一起。</p> <p><span class="Apple-tab-span"> </span>#下一次挂载的时候依然是绑定的,所以要用delete来拆除设备才能分开。</p> <pre class="brush:bash;toolbar:false">btrfs device add <需要添加的设备> <挂载点> btrfs device delete <需要添加的设备> <挂载点></pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180730-95.png" title="1458921022564058.png" alt="device.png" /></p> <p>在这里我们可以看见这两块硬盘是独自的btrfs。</p> <p>我们可以通过device子命令来添加,将两个空的btrfs硬盘合并成一个</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180730-95-1.png" title="1458921157213380.png" alt="device add.png" /></p> <p>合并之后,他们的主uuid一样,副uuid不一样。</p> <p>容量为两个20G硬盘合并的40G。</p> <p></p> <p><strong>3.balance </strong>均衡</p> <pre class="brush:bash;toolbar:false">btrfs balance start <挂载点> #开始 -mconvert=raid[0,1,5,10] BTRFS_LABEL metadata -dconvert=raid[0,1,5,10] BTRFS_LABEL data #convert之类的选项,可以通过man文档中的filter字段查到 btrfs balance pause #暂停 btrfs balance status #状态</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180730-72.png" title="1458921302719750.png" alt="balance.png" /></p> <p>使用device子命令增加容量后,再使用balance子命令。</p> <p>可以把文件转移一部分到新的pv上,能为其他硬盘减少读写压力。<span class="Apple-tab-span"></span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180730-9.png" title="1458921527384131.png" alt="balance1.png" /></p> <p>假如在格式化的时候没有指定数据和元数据的raid类型,也可以通过balance来修改。</p> <p></p> <p><strong>4.subvolume </strong>子卷命令</p> <pre class="brush:bash;toolbar:false">#子卷是什么?举个简单的例子,我们可以想象根目录是一个主卷。而下面的/usr,/bin,/sbin等文件夹都能设置成子卷。 #而需要的时候,可以只挂载子卷。但是如果挂载了主卷,下面的子卷都会全部挂载 #想要单独挂载子卷,而不挂载上级卷的话,要指定id或者label</pre> <pre class="brush:bash;toolbar:false">btrfs volume create 主卷下的挂载点 btrfs volume delete 主卷下的挂载点</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180730-78.png" title="1458922027108474.png" alt="subvolume.png" /></p> <p><span class="Apple-tab-span"> </span> snapshot</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180730-88.png" title="1458922035891401.png" alt="snapshot1.png" /></p> <pre class="brush:bash;toolbar:false">#注意:创建快照,是对创建快照一个瞬间的状态进行定格。 #也就是说,sub1里面没有文件的时候创建快照的。用快照还原的话,sub1就是个空分区。 #如果sub1里面有一个文件。在创建快照之后,没修改的那一份保留在sub1_snapshot中 #往后如果sub1中的文件遭到多次修改,sub1_snapshot中的数据也不会改变,因为我们做的快照只是这一瞬间的。 #第二次修改的那个瞬间就不管。</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180730-18.png" title="1458922135833407.png" alt="snapshot_对比.png" /></p> <p>例如:我们给空的sub1创建一个sub1_snapshot快照,我们复制进去一个conf配置文件。snapshot子卷下面一点变化也没有</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180730-11.png" title="1458922289349013.png" alt="issu.png" /></p> <pre class="brush:bash;toolbar:false">#而我们复制一个issue文件进去,再创建一个快照2的时候,snapshot2里面就会有一个issue文件。 #而这个时候,我们怎么修改sub1内的issue文件,snapshot2的issue文件也不会改变。 #因为快照只对那一瞬间的issue进行了定格。</pre> <p></p> <p><span class="Apple-tab-span"> </span> list BTRFS_LABEL_NAME<span class="Apple-tab-span"> </span>列出指定btrfs下的子卷及其id</p> <pre class="brush:bash;toolbar:false"> [root@localhost ~]# btrfs subvolume list /media/btrfs/ ID 261 gen 54 top level 5 path sub1 ID 262 gen 53 top level 5 path sub2 ID 263 gen 54 top level 5 path sub1_snapshot</pre> <p>只挂载子卷(假如操作系统是btrfs,如brtfs的/下的子卷是/usr/,/lib等)</p> <p><span class="Apple-tab-span"></span>mount -o subvolid=ID MOUNT_POINT</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180730-6.png" title="1458922746519498.png" alt="挂载子卷.png" /></p> <p></p> <p>对单独文件创建快照</p> <p><span class="Apple-tab-span"></span> cp –reflink</p> <p></p> <p><strong>转换</strong></p> <pre class="brush:bash;toolbar:false">btrfs-convert EXT4_DEVICEext4转换成btrfs btrfs-convert -r BTRFS_DEVICE此前为ext4的btrfs转换回ext4</pre> <p></p> <p>透明压缩机制:</p> <p><span class="Apple-tab-span"> </span>mount -o compress=[lzo|zlib] DEVICE /MOUNT_POINT</p> <p><span class="Apple-tab-span"> </span>由于读写的时候都要压缩,所以要占用CPU来压缩和解压</p> <p></p> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信