什么是RAID
    RAID:RedundantArrays of Inexpensive(Independent)Disks 廉价的独立磁盘
    1988年由加利福尼亚大学伯克利分校(University of California-Berkeley)“A Case for Redundant Arrays of Inexpensive Disks”
    多个磁盘合成一个“阵列”来提供更好的性能、冗余,或者两者都提供
    
RAID
    提高IO能力
        磁盘并行读写
    提高耐用性
        磁盘冗余来实现
    级别:多块磁盘组织在一起的工作方式有所不同
    RAID实现的方式:
        外接式磁盘阵列:通过扩展卡提供适配能力
        内接式RAID:主板集成RAID控制器
            安装OS前在BIOS里配置
        软件RAID:通过OS实现
        
RAID级别
    RAID-0:条带卷,strip
    RAID-1: 镜像卷,mirror  
    RAID-2
    ...
    RAID-5
    RAID-6
    RAID-10
    RAID-01
    
    RAID-0:
        读、写性能提升;
        可用空间:N*min(S1,S2,...)
        无容错能力
        最少磁盘数:2, 2+
    
    RAID-1:
        读性能提升、写性能略有下降;
        可用空间:1*min(S1,S2,...)
        有冗余能力
        最少磁盘数:2, 2N
    
    RAID-4:
        多块数据盘异或运算值存于专用校验盘
        
    RAID-5:
        读、写性能提升
        可用空间:6力:允许最多1块磁盘损坏
        最少磁盘数:3, 3+
    
    RAID-6:
        读、写性能提升
        可用空间:(N-2)*min(S1,S2,...)  
        有容错能力:允许最多2块磁盘损坏
        最少磁盘数:4, 4+
        
    RAID-10:
        读、写性能提升
        可用空间:N*min(S1,S2,...)/2
        有容错能力:每组镜像最多只能坏一块
        最少磁盘数:4, 4+
            
组合RAID
    RAID-01
        多块磁盘先实现RAID0,再组合成RAID1
        
    RAID-50
        多块磁盘先实现RAID5,再组合成RAID0
    
    JBOD:Just a Bunch Of Disks
        功能:将多块磁盘的空间合并一个大的连续空间使用
            可用空间:sum(S1,S2,...)
    
    RAID7
        可以理解为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行,理论上性能最高的RAID模式
    常用级别:
        RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD
    
    软RAID
        mdadm:为软RAID提供管理界面
        为空余磁盘添加冗余
        结合内核中的md(multi devices)
        RAID设备可命名为/dev/md0、/dev/md1、/dev/md2、/dev/md3等
    
    软件RAID的实现
        mdadm:模式化的工具
        命令的语法格式:mdadm[mode] <raiddevice> [options] <component-devices>
        支持的RAID级别:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10
        模式:
            创建:-C
            装配: -A
            监控: -F   
            管理:-f, -r, -a
        <raiddevice>: /dev/md#
        <component-devices>: 任意块设备
        -C: 创建模式
            -n #: 使用#个块设备来创建此RAID
            -l #:指明要创建的RAID的级别
            -a {yes|no}:自动创建目标RAID设备的设备文件
            -c CHUNK_SIZE: 指明块大小,单位k
            -x #: 指明空闲盘的个数 简称备用
        -D:显示raid的详细信息
            mdadm-D /dev/md#
        管理模式:
            -f: 标记指定磁盘为损坏
            -a: 添加磁盘
            -r: 移除磁盘
        观察md的状态:
            cat /proc/mdstat
 
软RAID配置示例
    使用mdadm创建并定义RAID设备
        mdadm-C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
    用文件系统对每个RAID设备进行格式化
        mke2fs -j /dev/md0
    测试RAID设备
    使用mdadm检查RAID设备的状况
        mdadm--detail|D/dev/md0
    增加新的成员
        mdadm–G /dev/md0 –n4 -a /dev/sdf1
        
软RAID测试和修复
    模拟磁盘故障
        mdadm /dev/md0 -f /dev/sda1
    移除磁盘
        mdadm /dev/md0 –r /dev/sda1
    从软件RAID磁盘修复磁盘故障
        替换出故障的磁盘然后开机
        在备用驱动器上重建分区
        mdadm /dev/md0 -a /dev/sda1
    mdadm、/proc/mdstat及系统日志信息
    
软RAID管理
    生成配置文件:mdadm –D –s >> /etc/mdadm.conf
    停止设备:mdadm –S /dev/md0
    激活设备:mdadm –A –s /dev/md0 激活
    强制启动:mdadm –R /dev/md0
    删除raid信息:mdadm --zero-superblock /dev/sdb1
    
    
问题:如何创建一个软RAID5 添加一个硬盘备用????????
    机器可使用的硬盘:
        sdb      8:16   0   50G  0 disk
        sde      8:64   0   30G  0 disk
        sdc      8:32   0   40G  0 disk
        sdd      8:48   0   30G  0 disk
    将磁盘分区好:
        sdb      8:16   0   50G  0 disk
        └─sdb1   8:17   0   30G  0 part
        sde      8:64   0   30G  0 disk
        └─sde1   8:65   0   30G  0 part
        sdc      8:32   0   40G  0 disk
        └─sdc1   8:33   0   30G  0 part
        sdd      8:48   0   30G  0 disk
        └─sdd1   8:49   0   30G  0 part
    partx -a /dev/sdb sde sdc sdd   同步
    
    创建RAID:
        mdadm -C /dev/md0 -a yes -l5 -n3 -x1 /dev/sd{b,c,d,e}1
    用于查看创建的RAID设备:
        mdadm -D /dev/md0   
    创建文件格式类型:
        mkfs.ext4 /dev/md0 -L raid5     -L:添加卷标
    创建与挂载出:
        vim /etc/fstab
        UUID=6f246919-9fc5-4854-9982-8e7f11c16318 /mnt/raid     ext4    defaults 0 0
        
        mkdir /mnt/raid
        
        mount -a    启用
    注意:在使用RAID的时候建议最好生成一个RAID的配置文件以防下次停止使用时无法读取RAID设备
    如果要停止RAID设备时要先取消挂载才可操作
    
    测试一下RAID5的性能:本人使用的都是固态硬盘所以........
        写入的速度测试:
            [root@localhostcentos6 ~]# dd if=/dev/zero of=/data/f1 bs=1M count=1024   本机的普通硬盘写入的性能     
            1024+0 records in
            1024+0 records out
            1073741824 bytes (1.1 GB) copied, 4.46875 s, 240 MB/s
            [root@localhostcentos6 ~]# dd if=/dev/zero of=/mnt/raid/f1 bs=1M count=1024     RAID5写入的性能
            1024+0 records in
            1024+0 records out
            1073741824 bytes (1.1 GB) copied, 2.47991 s, 433 MB/s
        读的速度测试:
            [root@localhostcentos6 ~]# dd if=/data/f1 of=/dev/null 本机的普通硬盘的读取性能
            2097152+0 records in
            2097152+0 records out
            1073741824 bytes (1.1 GB) copied, 4.17335 s, 257 MB/s
            [root@localhostcentos6 ~]# dd if=/mnt/raid/f1 of=/dev/null     RAID5读取的性能
            2097152+0 records in
            2097152+0 records out
            1073741824 bytes (1.1 GB) copied, 2.14119 s, 501 MB/s
    那么如何停用和启用RAID呢????
        umount /mnt/raid/
        mdadm -S /dev/md0   停用RAID    
        mdadm -A /dev/md0  启用RAID
        mount -a     
    
    查看RAID状态:
        mdadm -D /dev/md0
        
    模拟一块硬盘损坏另外一个自动顶替
        mdadm /dev/md0 -f /dev/sdc1     模拟/dev/sdc1的磁盘损坏
        
        mdadm -D /dev/md0   查看状态
        Rebuild Status : 18% complete   备用硬盘自动启动填上去
        即便是坏了一硬盘数据还是可访问的有容错性
        
    如何将损坏/dev/sdc1的硬盘移走呢????
        mdadm /dev/md0 -r /dev/sdc1
    
    还是可以添加回来的 不过成为备用的
        mdadm /dev/md0 -a /dev/sdc1
    
    新加的硬盘一般都没有文件系统硬盘空间无法使用该如何解决呢???
        centos6:resize2fs /dev/md0 同步文件系统,只支持ext文件格式
        centos7:xfs_growfs /mnt/raid   同步文件系统,支持xfs文件格式   注意路径要写挂载的路径
    
    
    
LVM:逻辑卷管理
    允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小
    允许在多个物理设备间重新组织文件系统
        将设备指定为物理卷
        用一个或者多个物理卷来创建一个卷组
        物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的
        在物理卷上创建的逻辑卷
        是由物理区域(PE)组成
        可以在逻辑卷上创建文件系统
        
LVM介绍
LVM: Logical Volume Manager,Version: 2
dm: device mapper:将一个或多个底层块设备组织成一个逻辑设备的模块
设备名:/dev/dm-#
软链接:
    /dev/mapper/VG_NAME-LV_NAME
    /dev/mapper/vol0-root  
    /dev/VG_NAME/LV_NAME
    /dev/vol0/root
    
    
LVM更改文件系统的容量
    LVM可以弹性的更改LVM的容量
    通过交换PE来进行资料的转换,将原来LV内的PE转移到其他的设备中以降低LV的容量,或将其他设备中的PE加到LV中以加大容量
    
pv管理工具
    显示pv信息
        pvs:简要pv信息显示
        pvdisplay
    创建pv
        pvcreate /dev/DEVICE
        
vg管理工具
    显示卷组
        vgs:显示卷组的空间
        vgdisplay:显示详细的卷组信息
    创建卷组
        vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
    管理卷组
        vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
        vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
    删除卷组
        先做pvmove,再做vgremove
        
lv管理工具
    显示逻辑卷
        lvs
        Lvdisplay
    创建逻辑卷
        lvcreate -L #[mMgGtT] -n NAME VolumeGroup
        lvcreate -l 60%VG -n mylvtestvg
        lvcreate -l 100%FREE -n yourlvtestvg
    删除逻辑卷
        lvremove/dev/VG_NAME/LV_NAME
    重设文件系统大小
        fsadm[options] resize device [new_size[BKMGTEP]]
        resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size
        
    
扩展和缩减逻辑卷
    扩展逻辑卷:
        lvextend-L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
        resize2fs /dev/VG_NAME/LV_NAME
        lvresize-r -l +100%FREE /dev/VG_NAME/LV_NAME
    缩减逻辑卷:
        umount/dev/VG_NAME/LV_NAME
        e2fsck -f /dev/VG_NAME/LV_NAME
        resize2fs /dev/VG_NAME/LV_NAME #[mMgGt]
        lvreduce-L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
        mount
        
跨主机迁移卷组
    源计算机上
        1 在旧系统中,umount所有卷组上的逻辑卷
        2 vgchange–a n vg0
            lvdisplay
        3 vgexportvg0
            pvscan
            vgdisplay
            拆下旧硬盘
    在目标计算机上
        4 在新系统中安装旧硬盘,并vgimportvg0.
        5 vgchange–ay vg0
        6 mount所有卷组上的逻辑卷
        
创建逻辑卷示例
    创建物理卷
        pvcreate /dev/sda3
    为卷组分配物理卷
        vgcreate vg0 /dev/sda3
    从卷组创建逻辑卷
        lvcreate -L 256M -n data vg0
        mke2fs -j /dev/vg0/data
    mount /dev/vg0/data /mnt/data
    
逻辑卷管理器快照
    快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝
    对于需要备份或者复制的现有数据临时拷贝以及其它操作来说,快照是最合适的选择
    快照只有在它们和原来的逻辑卷不同时才会消耗空间
    在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间
    当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中。
    快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据
    建立快照的卷大小只需要原始逻辑卷的15%~20%就够了,也可以使用lvextend放大快照
    快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享
    由于快照区与原本的LV共用很多PE的区块,因此快照与被快照的LV必须在同一个VG中.系统恢复的时候的文件数量不能高于快照区的实际容量
    
    
使用LVM快照
    为现有逻辑卷创建快照
        lvcreate-l 64 -s -n data-snapshot -p r /dev/vg0/data
    挂载快照
        mkdir-p /mnt/snap
        mount -o ro/dev/vg0/data-snapshot /mnt/snap
    恢复快照
        umount/dev/vg0/data-snapshot
        umount/dev/vg0/data
        lvconvert--merge /dev/vg0/data-snapshot
    删除快照
        umount/mnt/databackup
        lvremove/dev/vg0/databackup
    
    
小实例:
    在硬盘上做两个LVM的分区/dev/sdb1、/dev/sdc1大小各2G
      将普通的硬盘分区变成物理卷呢:
        pvcreate:用于创建物理卷
        pvdisplay:查看物理卷看比较详细
        pvs   用于查看物理卷
        
        pvcreate /dev/sdb1   创建物理卷
        pvcreate /dev/sdc1   创建物理卷
    
      创建卷组:
        vgs:查看现有的卷组
        vgdisplay:查看更详细的卷组
        
        vgcreate -s 18M vg1 /dev/sdb1
        vgcreate -s 18M vg2 /dev/sdc1
      
      创建逻辑卷:
        lvcreate -n lv1 -l 100 vg1
        lvdisplay:查看创建的逻辑卷
        
      将剩余的逻辑卷全部用完:
        lvcreate -n lv2 -l 100%FREE vg1
            100%FREE:将分区里的剩余空间全部用完
        
      创建文件格式:
        mkfs.ext4 /dev/vg1/lv1
        mkfs.ext4 /dev/vg1/lv2
        
      挂载设备:
        UUID=d60bf3e2-dede-4507-9e58-c16a46c45a63 /mnt/lv1      ext4    defaults 0 0
        UUID=3894bb11-c5e7-4be5-b4c3-ef4ce4461b27 /mnt/lv2      ext4    defaults 0 0
        
        mkdir /mnt/lv1
        mkdir /mnt/lv2
        mount -a    启用挂载
        
    测试性能:
        [root@localhostcentos6 ~]# dd if=/dev/zero of=/mnt/lv1/f1 bs=1M count=10241024+0 records in
        1024+0 records out
        1073741824 bytes (1.1 GB) copied, 9.09417 s, 118 MB/s
        
    如遇到逻辑卷空间不足如何增加空间:
        首先加一块新的硬盘:
            在添加硬盘之后须执行:我加了一个20G的新硬盘名称:/dev/sdd
                echo '- - -' > /sys/class/scsi_host/host2/scan  扫描识别新添加的硬盘
        
        直接用整块硬盘做,可直接做成物理卷:
            pvcreate /dev/sdd
        
    添加进之前的vg1卷组:
            [root@localhostcentos6 ~]# vgextend vg1 /dev/sdd
              Volume group "vg1" successfully extended
            [root@localhostcentos6 ~]# pvs 或vgdisplay  用于查询
              PV         VG   Fmt  Attr PSize  PFree
              /dev/sdb1  vg1  lvm2 a--u  2.00g     0
              /dev/sdc1  vg1  lvm2 a--u  2.00g     0
              /dev/sdd   vg1  lvm2 a--u 19.99g 19.99g
        
    将刚添加的新硬盘添加进/mnt/lv1:
            lvextend -L +10G /dev/vg1/lv1
            
            注意:添加完之后df中的添加的10G空间释放必须要同步一下即可:
                resize2fs /dev/vg1/lv1
            
            其实也可以直接带参数选项:
                lvextend -r -l +100%FREE /dev/vg1/lv1
                    -r:同步
                    -l +100%FREE:硬盘下的剩余空间
                    
    当遇到逻辑卷空间比较大时可以缩减的centos7是不行的用于centos6:
        缩减5G:
            e2fsck -f /dev/vg1/lv1  先检查完整性才可执行缩减
            resize2fs /dev/vg1/lv1 5G
        
    缩减逻辑卷:注意可能会损坏数据
            lvreduce -L 5G /dev/vg1/lv1
            mount -a 将/mnt/lv1挂载回去