zoukankan      html  css  js  c++  java
  • Raid 介绍以及软raid的实现

    RAID:

    old   Redundant Arrays of Inexpensive Disks (廉价磁盘冗余阵列)
    new   Redundant Arrays of Independent Disks (独立磁盘冗余阵列)
    Berkeley: A case for Redundent Arrays of Inexpensive Disks RAID

    功能: 提高IO能力:磁盘并行读写; 提高耐用性:磁盘冗余来实现。但是raid不能取代数据备份,raid只是减少磁盘对于数据的影响。人为操作数据无法恢复。

    级别:多块磁盘组织在一起的工作方式有所不同;

    RAID实现的方式: 外接式磁盘阵列:通过扩展卡提供适配能力 内接式RAID:主板集成RAID控制器 Software RAID:

    级别:level

    RAID-0:0, 条带卷,strip; 
    RAID-1: 1, 镜像卷,mirror;
    RAID-2
    ..
    RAID-5:
    RAID-6
    RAID10
    RAID01
    • RAID-0: 读、写性能提升; 可用空间:N*min(S1,S2,...)(所有磁盘中的最小值,下同) 无容错能力 最少磁盘数:2, 2+

    • RAID-1: 读性能提升、写性能略有下降; 可用空间:1*min(S1,S2,...) 有冗余能力 最少磁盘数:2, 2+

    • RAID-4: 1101, 0110, 1011 (对应位做亦或计算,相同得0,相反得1) 第三块做校验盘。 如果一块坏了,那就是降级进行使用。缺陷:单块盘做检验盘,该盘压力过大,是性能瓶颈。 改进方案:使用一块盘做空闲盘,热备

    • RAID-5: 读、写性能提升。 可用空间:(N-1)*min(S1,S2,...) 有容错能力:1块磁盘 最少磁盘数:3, 3+, 原理同raid4,也可有热备盘,与raid4区别,三块盘轮流做检验盘,有左对称和右对称方案; 多块盘做亦或运算,结果存放到校验盘,X1亦或X2亦或X3亦或X4

    • RAID-6: 读、写性能提升 可用空间:(N-2)*min(S1,S2,...) 有容错能力:2块磁盘 循环校验 最少磁盘数:4, 4+

    • RAID-10: 读、写性能提升 可用空间:N*min(S1,S2,...)/2 有容错能力:每组镜像最多只能坏一块; 最少磁盘数:4, 4+
    • RAID-01: 先做raid0,在做raid1,容错性没有raid10好。
    • RAID-50,先做raid5再做raid0,最小磁盘数和raid5划分有关。
    • RAID7:商业公司自己开发的,性能不错价格昂贵
    • JBOD:Just a Bunch Of Disks 功能:将多块磁盘的空间合并一个大的连续空间使用,可以存放大型单个文件。可用空间:sum(S1,S2,...)
    • 常用级别:RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD
    • 选择Raid级别:RAID 012345 到底哪一种适合你,不只是成本问题,容错功能和传输性能的考虑以及未来之可扩充性都应该符合应用的需求。

    实现方式:

    • 硬件实现方式

    • 软件实现方式

      CentOS 6上的软件RAID的实现:结合内核中的md(multi devices)
      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: 指明块大小;
      -x #: 指明空闲盘的个数;
    • 例如:创建一个6G可用空间的RAID5;

    ]# fdisk -l                     ##查看硬盘分区
    新添加一块硬盘sdb
    ]# fdisk /dev/sdb               ##进行硬盘分区,做raid5至少需要三块盘,热备需要第四块,分区完成后需要修改分区系统id,修改成软raid的id:fd。
    ]# partx /dev/sdb
    # 1:        63-  6313544 (  6313482 sectors,   3232 MB)
    # 2:   6313545- 12627089 (  6313545 sectors,   3232 MB)
    # 3:  12627090- 18940634 (  6313545 sectors,   3232 MB)
    # 4:  18940635- 41929649 ( 22989015 sectors,  11770 MB)
    # 5:  18940698- 25254179 (  6313482 sectors,   3232 MB)
    ]# mdadm -C /dev/md0 -n 3 -l 5 -a yes /dev/sdb1 /dev/sdb2 /dev/sdb3 
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md0 started.
    ]# cat /proc/partitions         ##创建完分区后可以再分区表中看到此分区。
    major minor  #blocks  name
    
       8        0   20971520 sda
       8        1     512000 sda1
       8        2   10240000 sda2
       8        3    1048576 sda3
       8        4          1 sda4
       8        5    1048576 sda5
       8        6    8119296 sda6
       8       16   20971520 sdb
       8       17    3156741 sdb1
       8       18    3156772 sdb2
       8       19    3156772 sdb3
       8       20          1 sdb4
       8       21    3156741 sdb5
       9        0    6308864 md0
    ]# mke2fs -t ext4 /dev/md0      ##对此分区进行格式化
    mke2fs 1.41.12 (17-May-2010)
    文件系统标签=
    操作系统:Linux
    块大小=4096 (log=2)
    分块大小=4096 (log=2)
    Stride=128 blocks, Stripe width=256 blocks
    394352 inodes, 1577216 blocks
    78860 blocks (5.00%) reserved for the super user
    第一个数据块=0
    Maximum filesystem blocks=1619001344
    49 block groups
    32768 blocks per group, 32768 fragments per group
    8048 inodes per group
    Superblock backups stored on blocks: 
    	32768, 98304, 163840, 229376, 294912, 819200, 884736
    
    正在写入inode表: 完成                            
    Creating journal (32768 blocks): 完成
    Writing superblocks and filesystem accounting information: 完成
    
    This filesystem will be automatically checked every 26 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.
    ]# mdadm -D /dev/md0        ##查看该raid详情
    /dev/md0:
            Version : 1.2       
      Creation Time : Sat Dec 10 09:50:50 2016
         Raid Level : raid5             ##级别
         Array Size : 6308864 (6.02 GiB 6.46 GB)           ##阵列大小
      Used Dev Size : 3154432 (3.01 GiB 3.23 GB)           ##分区大小
       Raid Devices : 3
      Total Devices : 3
        Persistence : Superblock is persistent
    
        Update Time : Sat Dec 10 09:52:48 2016
              State : clean 
     Active Devices : 3
    Working Devices : 3
     Failed Devices : 0
      Spare Devices : 0
    
             Layout : left-symmetric        ##左对称
         Chunk Size : 512K                  ##Chunk(块)大小
    
               Name : localhost.localdomain:0  (local to host localhost.localdomain)
               UUID : 13a8fd25:5be7dd96:4c771ae8:74ac609b
             Events : 18
    
        Number   Major   Minor   RaidDevice State
           0       8       17        0      active sync   /dev/sdb1
           1       8       18        1      active sync   /dev/sdb2
           3       8       19        2      active sync   /dev/sdb3
    -D:显示raid的详细信息;
        mdadm -D /dev/md#
        管理模式:
        -f: 标记指定磁盘为损坏;
        -a: 添加磁盘
        -r: 移除磁盘
        观察md的状态:
            	cat /proc/mdstat
         停止md设备:
            	mdadm -S /dev/md#
    ]# mkdir /mydata
    ]# mount /dev/md0 /mydata/
    ]# cp /etc/fstab .
    ]# ls
    fstab  lost+found
    ]# mdadm /dev/md0 -f /dev/sdb3
    mdadm: set /dev/sdb3 faulty in /dev/md0
    ]# cat /proc/mdstat         ##可以看到有一块盘已经丢失
    Personalities : [raid6] [raid5] [raid4] 
    md0 : active raid5 sdb3[3](F) sdb2[1] sdb1[0]
          6308864 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
          
    unused devices: <none>
    ]# cat /mydata/fstab        ##发现文件依然可以访问
    
    #
    # /etc/fstab
    # Created by anaconda on Sat Dec 10 05:24:03 2016
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    UUID=c4bee2fc-f632-4c0d-ad60-a70097b85da1 /                       ext4    defaults        1 1
    UUID=99a8652d-1f4d-4798-8054-443ffb502393 /boot                   ext4    defaults        1 2
    UUID=62afe289-b0a8-4fdd-b6e2-9701f59f5d36 /home                   ext4    defaults        1 2
    UUID=d7bfc5f4-5a4c-4432-ad7a-abe6ea722c32 /var                    ext4    defaults        1 2
    UUID=2293a8a9-530c-42d4-a5c8-846f23ed69c7 swap                    swap    defaults        0 0
    tmpfs                   /dev/shm                tmpfs   defaults        0 0
    devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    sysfs                   /sys                    sysfs   defaults        0 0
    proc                    /proc                   proc    defaults        0 0
    ]# mdadm /dev/md0 -a /dev/sdb5      ##添加一个分区
    mdadm: added /dev/sdb5
    ]# cat /proc/mdstat         ##正在恢复分区。
    Personalities : [raid6] [raid5] [raid4] 
    md0 : active raid5 sdb5[4] sdb3[3](F) sdb2[1]  sdb1[0]
          6308864 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
          [=====>...............]  recovery = 25.5% (806924/3154432) finish=1.3min speed=28818K/sec
  • 相关阅读:
    windows Visual Studio 2017 编译 HEVC cmake-3.8.1-win64-x64.msi 下载
    DirectShow
    IDA反汇编学习
    .NET dnSpy 程序集编辑器,反编译器和调试器
    Win7如何自定义鼠标右键菜单 添加新建PowerPoint文档
    Win7如何自定义鼠标右键菜单 添加新建EXCEL文档
    推荐电视剧 大秦帝国之裂变 2008
    推荐电视剧 大明王朝1566 2007
    C#如何生成release版本的程序,生成debug版本的程序
    Solidworks安装完成提示failed to load slderresu.dll怎么办
  • 原文地址:https://www.cnblogs.com/Nvax/p/6216172.html
Copyright © 2011-2022 走看看