下面介绍的是两种特殊文件、RAID、LVM2、逻辑卷的快照等的内容

一、两种特殊文件

1、两种特殊文件包括设备文件、符号链接文件两类。

2、特殊文件的部分概念如下:

设备文件:mknod 

符号链接文件:链接内容即为路径

链接:就是访问一个文件的不同路径。

      链接分为硬连接、软链接。

硬连接:数据块指针指向同一个数据块的文件。

      硬连接不能跨越文件系统创建硬连接,不能对目录文件创建硬连接;每次创建链接都会增加inode的引用计数。

符号链接(软连接):用于存储被链接文件的路径文件。

      可以跨文件系统创建;也可以对目录进行创建;每次都必须进行两组路径的查找。


3、ln命令

ln - make links between files

ln [OPTION]... TARGET... DIRECTORY  

  -s,--symbolic:创建符号链接,省略该选项,即创建硬连接。

  -v:显示链接创建的过程。

注意:创建符号链接时,如果想要保证该链接文件被复制或移动到其他路径中依然可以,最好链接至被链接文件的【绝对路径】。

例如:ln -s /root/mnt/test file1


实例:

可以进行版本管理,例如apache的2.2、2.4相互切换。

将不同的版本的软件分别放置于不同的目录中,使用符号链接,将软件链接的一个统一路径,具体如下:

/usr/local/apache-2.2

/usr/local/apache-2.4

#切换至2.2

/usr/local/apache --> /usr/local/apache-2.2

再切换至2.4

/usr/local/apache --> /usr/local/apache-2.4


实例:比如调用多套脚本:

user1.sh

user2.sh

user3.sh

#切换至user1

user.sh --> user1.sh

#再切换至user2

user.sh --> user2.sh



二、RAID

RAID:Redundant Array of Inexpensive Disks 【廉价磁盘冗余阵列】

RAID:Redundant Array of Independent Disks 独立磁盘冗余阵列

1、RAID功能

RAID主要有两个功能,即提高IO能力、提高耐用性。

 (1)、提高IO能力(实现方式):使多个磁盘实现并行读写、磁盘条带化(chunk)。

 (2)、提高耐用性(实现方式):磁盘冗余实现。磁盘冗余中,即使磁盘发生故障或损坏,也不会影响数据。

2、RAID的实现方式:

 (1)、硬件实现:a、通过RAID控制器或适配器,将所需的磁盘组织成RAID,而后安装OS。

                  b、BIOS程序

 (2)、软件模拟实现:操作系统通过系统调用的方式模拟RAID实现。


3、RAID的操作级别

 (1)、RAID0

    RAID0至少有2块磁盘;2、2+

    RAID0是条带卷(strip),提高了IO的性能;

    RAID没有冗余容错能力;没有存储空间浪费,要求每个磁盘必须提供相同大小的存储空间。

 (2)、RAID1:镜像卷(mirror)

    RAID1需要2块磁盘。2、2+

    2块磁盘的数据一模一样,先将数据存入主盘,然后再将数据存入从盘,提高了高可用性;

    RAID1写入效率较低,略微提高了读效率;

    RAID1磁盘的整体利用率为50%;

    RAID1有冗余容错能力。

 (3)、RAID2

 (4)、RAID3(不常用)

 (5)、RAID4

    RAID4多块磁盘进行异或运算,得到校验值,并且使用专门的一块磁盘存放校验值;

    RAID4即使一块磁盘损坏,也不会丢失数据;

    RAID4校验盘IO压力巨大,很容易形成性能瓶颈。

 (6)、【RAID5】

    RAID5至少需要3块磁盘;3、3+

    RAID5多块磁盘进行循环冗余校验,将【校验值随机分配到不同磁盘的条带中】;

    RAID5读、写IO性能均明显提升,有不会出现性能瓶颈;

    RAID5磁盘利用率为=(n-1)/n*100%;

    RAID5有冗余容错能力。

 (7)、RAID6

    RAID6至少需要4块磁盘;4、4+

    RAID6多块磁盘进行【两轮循环冗余校验】,将校验值随机分配到不同磁盘的条带中;

    RAID6读、写IO性能均明显提升,有不会出现性能瓶颈;

    RAID6最多运行两块磁盘,出现故障或损坏依然保证数据可用;

    RAID6的代价就是增加了计算校验值的时间。

 (8)、RAID7


4、RAID混合级别:

 (1)、RAID01

    先做RAID0,再做RAID1

 (2)、RAID10(较好)

    先做RAID1,再做RAID0

 (3)、RAID50

 (4)、RAID7

    RAID7可以理解为一个计算机,自带操作系统以及相应的管理工具,可以独立运行。


5、IBOD:Just a Bunch Of Disks(仅仅就是一组磁盘)

  IBOD功能:就是将多块磁盘的存储空间连接到一起,合并一个大的连续空间使用,顺序存放数据。

  可用空间为求和:sum(S1,S2,...)

常用级别:RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD


6、在Centos上实现RAID

(1)、内核提供一个md模板(multi disks、multi devices)

    用户空间需要mdadm的工具,来设置和修改md内核模块参数。

(2)、mdadm模式化工具:

(mdadm - manage MD devices aka Linux Software RAID)

mdadm [mode] <raiddevice> [options] <component-devices>

mdadm的模式包括创建模式、装配模式、管理模式和杂项,具体解释如下:

  创建模式:-C

      -n #:使用#块磁盘创建RAID设备

      -l #:指示RAID的级别

      -a {yes/no}:允许系统或不允许系统创建md设备文件

      -c CHUNK_SIZE:指定CHUNK的大小(即磁盘条带化的大小)

      -x #:指定在阵列中空闲磁盘的数量

  装配模式:-A

      根据/etc/mdadm.conf指示的RAID进行装配

  管理模式:-a、-r(移除)、-f

  杂项;-D --scan 显示RAID设备的详细信息

          例如:mdadm -D --scan > /etc/mdadm.conf  该配置文件用于RAID设备的再次装配

        -S:停止RAID的设备

mdadm部分命令如下:

mdadm -D --scan >> /etc/mdadm.conf

mdadm -S /dev/md2

mdadm -S /dev/md0

mdadm -C -n 2 -l 0 /dev/sdc /dev/sdf

mdadm -A /dev/md2

mdadm /dev/md2 -a /dev/md0


观察md的状态命令:cat /proc/mkstat


7、watch命令:

    -n #:刷新时间间隔,单位为秒,默认为1秒;

watch -n # 'COMMAND'


例如:# mdadm -C /dev/md0 -n 4 -l 0 -a yes /dev/sd{b,c,d,e}

      # mke2fs -t ext4 /dev/md0

      # mkdir /media/md0

      # blkid

      # mount /dev/md0 /media/md0

      # df -hT  查看挂载信息:df -h/-hT/-hTP



8、dd命令

dd - convert and copy a file 转换和拷贝文件

dd [OPERAND]...

dd OPTION

  if=FILE  read from FILE instead of stdin

  bs=BYTES  read and write up to BYTES bytes at a time

  count=N   copy only N input blocks

测试磁盘的IO速度:(读的速度比写的速度快,因为读不需要作校验)

例如:# dd if=/dev/zero of=./test bs=1024 count=100,0000

      # cd /media/md0/

      # dd if=/dev/zero of=./test1 bs=1024 count=1000,0000

      # cd /media/md0/

      # ls -lh

      # mdadm -D /dev/md0

      # mdadm -r /dev/md0 /dev/sde

      # mdadm -f /dev/md0 /dev/sde

      # fuser -v /dev/md0

      # umont /media/md0

      # cat /proc/mdstat

      # mdadm -C /dev/md0 -l 1 -n 2 -x 1 /dev/sdb /dev/sdc /dev/sdd

      # cat /proc/mdstat

      # watch 'cat /proc/mdstat'    刷新时间间隔

      # watch -n 2 'cat /proc/mdstat'  2秒更新一次

      # watch -n 1 'cat /proc/mdstat'  1秒更新一次

      # mdadm -D --scan /dev/md0

      # mdadm -D --scan /dev/md0 > /etc/mdadm.conf

      # mdadm -D /dev/md0




写一个脚本,模拟Linux登录界面:

(1)、将用户名和密码(明文即可)存放于/tmp/userinfo文件中,格式为username:password;

(2)、运行脚本后提示用户输入用户名和密码;

(3)、用户输入完成后,判断用户输入的是否正确;

   a)、如果输入错误的用户名,直接提示用户重新输入正确的用户名;

   b)、如果用户名正确,密码错误,提示用户重新输入密码,三次连续输错,则让用户重新输入用户名。

#!/bin/bash

#

while : ; do

  read -p "login: " GET_USERNAME

  if ! grep -q "^\<$GET_USERNAME\>" /tmp/userinfo ; then

    continue

  fi

  COUNT=0

  until false ; do

    if [ $COUNT -eq 3 ] ; then

      break

    fi

    read -p "password: " GET_PASSWORD

    PASSWORD=$(grep "^\<$GET_USERNAME\>" /tmp/userinfo| cut -d: -f2)

    if [ "$GET_PASSWORD" != "$PASSWORD" ] ; then

      let COUNT++

      continue

    else

      break 2

    fi

  done

done

echo "login successfully."



三、LVM2

Logical Volume Manager,逻辑卷管理器,Version2

使用纯软件的方式组织一个或多个底层块设备,将他们重新定义为一个逻辑块设备的解决方案。

1、dm

LVM2利用内核中的dm模块实现。

dm:device mapper,设备映射表

dm模块可以将一个或多个底层块设备【组织成一个逻辑块设备】;

用户空间中的相应命令来向dm模块发出系统调用,就可以完成后逻辑块设备的管理;


逻辑块设备统一存放在/dev/dm-#中。

2、LVM2的部分简写如下:

物理卷:PV(physical volume)

卷组:PG(physical group)多个物理卷组成卷组,指定PE

逻辑卷:LE(logical extent)卷组中创建逻辑卷

物理盘区(PE physical extent)大小必须是2的n次方


3、使用dm机制实现LVM管理的步骤:

(1)、创建并表示物理卷,PV

注意:如果用来创建物理卷的设备是普通分区,一定要将分区的ID修改为8e;

(2)、基于PV创建卷组,逻辑块设备,创建的卷组的同时指定PE的大小;

注意:一旦物理盘区PE大小被指定,就不允许更改;

(3)、在已经创建的【卷组中创建逻辑卷】;

(4)、在【逻辑卷中创建文件系统】(高级格式化);

(5)、挂载


4、物理卷的管理操作

# pv  物理卷

pvcreate: 创建物理卷

pvdisplay: 显示物理卷的详细信息

pvs: 显示物理卷的简单信息

pvremove: 删除物理卷

pvmove: 将某个物理卷中的【所有的物理盘区PE移动到其他物理卷中】


5、卷组的管理操作

# vg 卷组

vgcreate: 创建卷组

   -s #(kKmMgG) 指定PE的大小,如果省略该选项,默认的物理盘区PE为4M

vgremove: 删除卷组

vgextend: 扩展卷组容量,将新的pv添加到卷组中

   vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

vgreduce:缩减卷组容量,将物理卷pv从卷组中移除;在做此操作之前,应该先使用pvmove,保证被移除的物理卷pv上没有被占用的PE;

   vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

vgdisplay:显示卷组的详细信息

vgs:显示卷组的简短信息


6、逻辑卷的管理操作

# lv 逻辑卷

lvcreate 创建逻辑卷

   -L LV_SIZE(#{kK|mM|gG}):指定逻辑卷的【大小】,不能超过卷组的容量;

   -l #%{FREE|VG|ORIGIN|PVS}:指定逻辑卷占用对应存储单元的【百分比】。其中PVS表示当前物理卷。

   -n LV_NAME 指定逻辑卷的名称

   -i # :在创建逻辑卷的时候,以条带的方式创建,并指明这个逻辑卷上【有#个条带】

   -I # :在创建逻辑卷的时候,以条带的方式创建,并指明【CHUNK的大小】;

lvremove:移除逻辑卷

lvdisplay:显示逻辑卷的详细信息

lvs:显示逻辑卷的简短信息

lvchange:修改LV的状态

   -ay:激活逻辑卷

   -an:停用逻辑卷

lvextend:扩展逻辑卷的空间,一定要【先扩展逻辑卷的物理边界,再扩展逻辑卷的逻辑边界】;使用ext系列文件系统的时候,resize2fs命令扩展逻辑边界。


lvextend用来扩大逻辑卷的【物理边界】如下:

   例如:lvextend -L [+]SIZE /PATH/TO/LVM

   如果SIZE有+:表示在原有逻辑卷容量的基础上,增加SIZE空间

   如果SIZE无+:表示将逻辑卷的容量扩大到SIZE空间

扩大逻辑卷的【逻辑边界】命令如下:

    e2fsck /PATH/TO/LVM

    resize2fs [-f] /PATH/TO/LVM


lveduce:缩减逻辑卷的空间

   注意:【先缩减逻辑卷的逻辑边界,再缩减逻辑卷的物理边界】;使用ext系列文件系统的时候,resize2fs命令缩减逻辑边界

lvreduce -L [-]SIZE /PATH/TO/LVM

   如果SIZE有-:表示在原有逻辑卷容量的基础上,削减SIZE空间

   如果SIZE无-:表示将逻辑卷的容量直接削减至SIZE空间


例如部分命令如下:

umount /PATH/TO/LVM

e2fsck /PATH/TO/LVM            //强制校验数据一致性

resize2fs -f /PATH/TO/LVM LV_SiZE //修改逻辑卷的【逻辑边界】,LV_SIZE为调整后的逻辑卷大小

lvchange -an /PATH/TO/LVM      //关闭逻辑卷

lvreduce -L [+]SIZE /PATH/TO/LVM  //修改逻辑卷的【物理边界】,大小要和逻辑边界保持一致

lvchange -ay /PATH/TO/LVM      //重新激活逻辑卷

mount /PATH/TO/LVM /PATH/TO/LVM_MOUNT_POINT


7、两个符号链接文件

为了更方便的使用逻辑卷,为/dev/dm-#设备创建了两个符号链接文件:

    /dev/mapper/VG_NAME-LV_NAME --> ../dm-#

/dev/VG_NAME/LV_NAME --> ../dm-#


五、逻辑卷的快照

1、快照

快照本身也是一种逻辑卷;是目标逻辑卷的另外一个访问路径。快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝。

对于需要【备份或者复制的】现有数据的临时拷贝以及其它操作来说,快照是最合适的选择。

快照只有在它们和原来的逻辑卷【不同】时才会消耗空间。

在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间

当原来的逻辑卷中有所改变时,会将【旧的数据复制到快照中】。

快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据。

也可以使用lvextend扩展快照卷。


2、快照区

快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享。

由于快照区与原本的LV共用很多物理盘区PE的区块,因此【快照区与被快照的LV必须要要在同一个VG上】;系统恢复的时候的文件数量不能高于快照区的实际容量。


3、快照逻辑卷

lvcreate -L SNAPSHOT_SIZE -s -p r -n SNAPSHOT_NAME /PATH/TO/ORIGIN_LVM

   -L SIZE:指定快照逻辑卷的大小

   -s:创建一个快照逻辑卷

   -p r:创建处理的逻辑卷是只读权限

   -n SNAPSHOT_NAME:指定快照逻辑卷的名称

例如创建快照卷:

# lvcreate -s -p r -L 15G -n mylv-snopshot /PATH/TO/DEST_LV

# lvcreate -s -p r -L 15G -n mylv-snopshot /dev/myvg/mylv


4、df命令

df - report file system disk space usage

df [OPTION]... [FILE]...

-h, --human-readble:【单位转换】

-l, --local:只显示本地文件系统,不显示网络文件系统

-i, --inodes:显示inode使用状态

-T, --print-type:显示【文件系统类型】

-P, --portability:使用POSIX输出格式,更【易于阅读】


5、du命令

du - estimate file space usage

du [OPTION]... [FILE]...

-s, sumary,:显示整个目录汇总的文件大小

-h, human-readble:单位转换


6、dd命令

convert and copy a file

dd [OPERAND]...

dd OPTION


dd中常见的OPERAND:

dd if=/PATH/FROM/SRC of=/PATH/TO/DEST

bs=BYTES:block size, 复制单元大小

count=N:复制多少个bs

of=FILE:【写】到所命名的文件而不是到标准输出

if=FILE:从所命名文件【读取】而不是从标准输入

ibs=BYTES:一次读size个byte

obs=BYTES:一次写size个byte

skip=BLOCKS:从开头忽略blocks个ibs大小的块

seek=BLOCKS:从开头忽略blocks个obs大小的块

conv=conversion[,conversion...]:用指定的参数转换文件。

转换参数:

ascii:转换EBCDIC为ASCII。

ebcdic:转换ASCII为EBCDIC。

block:把每一行【转换为长度为cbs的记录】,不足部分用空格填充。

unblock:使每一行的长度都为cbs,不足部分用空格填充。

lcase:把【大写字符转换为小写字符】。

ucase:把小写字符转换为大写字符。

swab:交换输入的每对字节。

noerror:读取【出错时】继续读取。

notrunc:不截短输出文件。

sync:把每个输入块填充到ibs个字节,不足部分用空(NULL)字符补齐


7、磁盘拷贝、备份、破坏命令

(1)、磁盘拷贝

~]# dd if=/dev/sda of=/dev/sdb

(2)、备份MBR:

~]# dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

(3)、破坏MBR中的bootloader:

~]# dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446

例如:有二进制文件fileA,size>2K。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,请问如何实现?

~]# dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc

8、备份:

将本地的/dev/sdx整盘备份到/dev/sdy

   ~]# dd if=/dev/sdx of=/dev/sdy 将本地的/dev/sdx整盘备份到/dev/sdy

将/dev/sdx全盘数据备份到指定路径的p_w_picpath文件

~]# dd if=/dev/sdx of=/path/to/p_w_picpath

备份/dev/sdx全盘数据,并利用gzip工具进行压缩,保存到指定路径

~]# dd if=/dev/sdx | gzip >/path/to/p_w_picpath.gz


9、恢复:

将【备份文件】恢复到指定盘

~]# dd if=/path/to/p_w_picpath of=/dev/sdx

将【压缩的备份文件】恢复到指定盘

~]# gzip -dc /path/to/p_w_picpath.gz | dd of=/dev/sdx


10、拷贝【内存资料】到硬盘

将内存里的数据拷贝到root目录下的mem.bin文件

~]# dd if=/dev/mem of=/root/mem.bin bs=1024


11、从光盘拷贝iso镜像

拷贝光盘数据到root文件夹下,并保存为cd.iso文件

   ~]# dd if=/dev/cdrom of=/root/cd.iso


12、销毁磁盘数据

利用【随机的数据填充硬盘】,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行。

~]# dd if=/dev/urandom of=/dev/sda1


13、得到最恰当的block size

通过【比较】dd指令输出中所显示的【命令执行时间】,即可确定系统最佳的block size大小

~]# dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

~]# dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file

~]# dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file

~]# dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file


14、测试硬盘读写速度

通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度

~]# dd if=/root/1Gb.file bs=64k | dd of=/dev/null

~]# dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000


15、修复硬盘

当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生【消磁点】。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。

上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。

~]# dd if=/dev/sda of=/dev/sda


五、btrfs及相关命令介绍

1、btrfs简介

btrfs:Balance-Tree FS; Better FS; Butter FS

btrfs其开发目的就是取代ext系列文件系统,成为下一代Linux的标准文件系统。

btrfs在2007年由Oracle开源,到目前为止,仍然是技术预览版(Technical Preview)。在Linux上运行的btrfs,遵循GPL开源协定,2014年8月由Oracle公司推出了一个稳定版。


btrfs的7个特性如下:

(1)、可扩展性

  extent(盘区)是btrfs最小的管理逻辑单元,每个extent是由一组连续的block块组成。

  ext文件系统的inode数量是一定的,btrfs的inode数量是动态可调整的。

(2)、多物理卷支持(多对一)

  btrfs可以跨越多个物理设备,动态的增加或减少设备来达到扩容或缩容的目的。而且,从技术角度来讲,btrfs还支持RAID-0、RAID-1、RAID-5、RAID-10等。btrfs还支持在线添加,删除,及修改设备。

(3)、写时复制更新机制(CoW,Copy on write)

  所谓的CoW,就是每次写磁盘数据的时候,先将当前块的数据复制到一个新块中,然后在新块中进行数据更新写入,当新块写入完成后,只需要将原来指向旧块的指针指向新块即可。

(4)、双重校验机制——数据及元数据都有校验码(checksum)

(5)、支持子卷

(6)、快照卷

  对父卷做快照

  对子卷做快照

  对快照卷做快照

(7)、透明压缩、隐形压缩


2、mkfs.btrfs命令

mkfs.btrfs - create a btrfs filesystem

选项:-L|--label <name>:为即将创建的btrfs文件系统指定卷标

      -d|--data <type>:为数据存储指定类型;可以选择的类型有:raid0, raid1, raid5, raid6, raid10 or single

      -m|--metadata <profile>:指定元数据的存储方式;可以选择的类型有:raid0, raid1, raid5, raid6, raid10, single or dup

      -O|--features <feature1>[,<feature2>...]:指定btrfs文件系统的特性,如果想要查看哪些特性,可以使用命令:mkfs.btrfs -O list-all(特性)


3、透明压缩

可以用支持btrfs文件系统的mount命令中使用下列方式开启透明压缩功能:

mount -o compress={lzo|zlib} DEVICE MOUNT_POINT


4、btrfs命令

(btrfs - control a btrfs filesystem)

 格式:btrfs <command> [<args>]

 btrfs filesystem show :查看btrfs文件系统的详细属性

 btrfs filesystem df MOUNT_POINT :查看文件系统的挂载和使用情况

   例如:btrfs filesystem df /mnt/btrfs/


5、btrfs filesystem命令

在线修改文件系统大小,使用btrfs filesystem命令

btrfs filesystem resize {+|-}SIZE[kKmMgGtTEe] MOUNT_POINT

例如:btrfs filesystem resize -15G /mnt/btrfs/

      btrfs filesystem resize +5G /mnt/btrfs/

      btrfs filesystem resize max /mnt/btrfs/


6、btrfs device命令

btrfs device命令用来向btrfs文件系统中添加或删除设备

格式:btrfs device add [options] <device> [<device>...] <path>

          向文件系统中添加一个新设备

      btrfs device delete <device> [<device>...] <path>

          从文件系统中删除一个设备


7、平衡数据

(1)、btrfs balance start [options] <path>  ;【开启】跨设备的chunk的数据平衡

  选项:-mconvert

          -mconvert={radi0|raid1|raid5|radi10|raid6|single|dup}  ;改变元数据的数据平衡布局方式

          例:btrfs balance start -mconvert=raid5 /mnt/btrfs/

        -dconvert

          -dconvert={radi0|raid1|raid5|radi10|raid6|single}  ;改变数据的数据平衡布局方式

          例:btrfs balance start -dconvert=raid6 /mnt/btrfs/

(2)、btrfs balance pause <path>

      【暂停】数据平衡

(3)、btrfs balance cancel <path>

      【取消】正在进行的或已经暂停的数据平衡

(4)、btrfs balance resume <path>

      【恢复】被打断的数据平衡

(5)、btrfs balance status [-v] <path>

      显示正在进行的或已经暂停的数据平衡的【状态】信息


8、子卷管理

(1)、btrfs subvolume create [-i <qgroupid>] [<dest>/]<name>

    【创建】子卷

    例:btrfs subvolume create /mnt/btrfs/mysub1/

(2)、btrfs subvolume delete [options] <subvolume> [<subvolume>...]

    【删除】子卷

    例:btrfs subvolume delete /mnt/btrfs/mysub1/

(3)、btrfs subvolume show <subvol-path>

    【显示子卷】的信息

    例:btrfs subvolume show /mnt/btrfs/mysub1/

子卷就类似于ext文件系统中的将其他分区挂载到根目录下的某个空闲目录的操作。


9、快照

(1)、创建指定子卷的快照卷

    btrfs subvolume snapshot [-r] [-i <qgroupid>] <source> <dest>|[<dest>/]<name>

    例:btrfs subvolume snapshot /mnt/btrfs/mysub1/ /mnt/btrfs/snap_mysub1

(2)、将btrfs和ext系列进行转换

  使用btrfs-convert命令进行btrfs和ext转换:

  格式:btrfs-convert - convert from ext2/3/4 filesystem to btrfs or rollback

        btrfs-convert [options] <device>

  将文件系统从ext转换为btrfs:

        # btrfs-convert /dev/sdb1

        注意:例子中/dev/sdb1分区,应该事先格式化为ext系列文件系统;

  将文件系统从btrfs回滚到ext

        # btrfs-convert -r /dev/sdb1

(3)、子卷管理