zoukankan      html  css  js  c++  java
  • RAID 0 软件实现(Linux 系统)

    实现raid有2种方式:

    软件 RAID 的性能较低,因为其使用主机的资源。 需要加载 RAID 软件以从软件 RAID 卷中读取数据。在加载 RAID 软件前,操作系统需要引导起来才能加载 RAID 软件。在软件 RAID 中无需物理硬件。零成本投资。

    硬件 RAID 的性能较高。他们采用 PCI Express 卡物理地提供有专用的 RAID 控制器。它不会使用主机资源。他们有 NVRAM 用于缓存的读取和写入。缓存用于 RAID 重建时,即使出现电源故障,它会使用后备的电池电源保持缓存。对于大规模使用是非常昂贵的投资。

    RAID有不同的级别。在这里,我们仅列出在真实环境下的使用最多的 RAID 级别。

      • RAID0 = 条带化
      • RAID1 = 镜像
      • RAID5 = 单磁盘分布式奇偶校验
      • RAID6 = 双磁盘分布式奇偶校验
      • RAID10 = 镜像 + 条带。(嵌套RAID)

    RAID 0是最早出现的RAID模式,即Data Stripping数据分条技术。RAID 0是组建磁盘阵列中最简单的一种形式,只需要2块以上的硬盘即可,成本低,可以提高整个磁盘的性能和吞吐量。

    RAID 0没有提供冗余或错误修复能力,但实现成本是最低的。

    RAID 0最简单的实现方式就是把N块同样的硬盘用硬件的形式通过智能磁盘控制器或用操作系统中的磁盘驱动程序以软件的方式串联在一起创建一个大的卷集。在使用中电脑数据依次写入到各块硬盘中,它的最大优点就是可以整倍的提高硬盘的容量。如使用了三块80GB的硬盘组建成RAID 0模式,那么磁盘容量就会是240GB。其速度方面,和单独一块硬盘的速度完全相同。最大的缺点在于任何一块硬盘出现故障,整个系统将会受到破坏,可靠性仅为单独一块硬盘的1/N。

    为了解决这一问题,便出现了RAID 0的另一种模式。即在N块硬盘上选择合理的带区来创建带区集。其原理就是将原先顺序写入的数据被分散到所有的四块硬盘中同时进行读写。四块硬盘的并行操作使同一时间内磁盘读写的速度提升了4倍。

    在创建带区集时,合理的选择带区的大小非常重要。如果带区过大,可能一块磁盘上的带区空间就可以满足大部分的I/O操作,使数据的读写仍然只局限在少数的一、两块硬盘上,不能充分的发挥出并行操作的优势。另一方面,如果带区过小,任何I/O指令都可能引发大量的读写操作,占用过多的控制器总线带宽。因此,在创建带区集时,我们应当根据实际应用的需要,慎重的选择带区的大小。

    带区集虽然可以把数据均匀的分配到所有的磁盘上进行读写。但如果我们把所有的硬盘都连接到一个控制器上的话,可能会带来潜在的危害。这是因为当我们频繁进行读写操作时,很容易使控制器或总线的负荷 超载。为了避免出现上述问题,建议用户可以使用多个磁盘控制器。最好解决方法还是为每一块硬盘都配备一个专门的磁盘控制器。

    虽然RAID 0可以提供更多的空间和更好的性能,但是整个系统是非常不可靠的,如果出现故障,无法进行任何补救。所以,RAID 0一般只是在那些对数据安全性要求不高的情况下才被人们使用。

    1、准备工作

    安装系统后,主板上连接2块硬盘,这里我用虚拟机做实验。

    试验系统:Centos 8.1.1911

    2、创建逻辑卷RAID 0

    查看本地磁盘及分区

    [root@192 ~]# lsblk
    NAME        MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sda           8:0    0  10G  0 disk
    ├─sda1        8:1    0   1G  0 part /boot
    └─sda2        8:2    0   9G  0 part
      ├─cl-root 253:0    0   8G  0 lvm  /
      └─cl-swap 253:1    0   1G  0 lvm  [SWAP]
    sdb           8:16   0   1G  0 disk
    sdc           8:32   0   1G  0 disk
    sr0          11:0    1   7G  0 rom
    

    使用sdb和sdc做raid0

    mdadm -C /dev/md0 -l raid0 -n 2 /dev/sdb /dev/sdc

    mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb /dev/sdc

    [root@192 ~]# mdadm -C /dev/md0 -l raid0 -n 2 /dev/sdb /dev/sdc
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md0 started.
    
    • -C – 创建
    • -l – 级别
    • -n – RAID 设备数

    查看活动的raid级别

    [root@192 ~]# cat /proc/mdstat
    Personalities : [raid0]
    md0 : active raid0 sdc[1] sdb[0]
          2093056 blocks super 1.2 512k chunks
    
    unused devices: <none>
    

    查看RAID阵列

    [root@192 ~]# mdadm --detail /dev/md0
    /dev/md0:
               Version : 1.2
         Creation Time : Fri Jun  5 07:59:35 2020
            Raid Level : raid0
            Array Size : 2093056 (2044.00 MiB 2143.29 MB)
          Raid Devices : 2
         Total Devices : 2
           Persistence : Superblock is persistent
    
           Update Time : Fri Jun  5 07:59:35 2020
                 State : clean
        Active Devices : 2
       Working Devices : 2
        Failed Devices : 0
         Spare Devices : 0
    
            Chunk Size : 512K
    
    Consistency Policy : none
    
                  Name : 192.168.94.130:0  (local to host 192.168.94.130)
                  UUID : f36becb8:6f8a4377:5973e533:79b43a1d
                Events : 0
    
        Number   Major   Minor   RaidDevice State
           0       8       16        0      active sync   /dev/sdb
           1       8       32        1      active sync   /dev/sdc
    

    查看当前磁盘状态

    [root@192 ~]# lsblk
    NAME        MAJ:MIN RM SIZE RO TYPE  MOUNTPOINT
    sda           8:0    0  10G  0 disk
    ├─sda1        8:1    0   1G  0 part  /boot
    └─sda2        8:2    0   9G  0 part
      ├─cl-root 253:0    0   8G  0 lvm   /
      └─cl-swap 253:1    0   1G  0 lvm   [SWAP]
    sdb           8:16   0   1G  0 disk
    └─md0         9:0    0   2G  0 raid0
    sdc           8:32   0   1G  0 disk
    └─md0         9:0    0   2G  0 raid0
    sr0          11:0    1   7G  0 rom
    [root@192 ~]#
    

    3、RAID阵列挂载使用

    将 RAID 设备 /dev/md0 创建为 ext4 文件系统,并挂载到 /mnt/raid0 下

    创建一个文件,测试。

    [root@192 ~]# mkfs.ext4 /dev/md0
    mke2fs 1.44.6 (5-Mar-2019)
    Creating filesystem with 523264 4k blocks and 130816 inodes
    Filesystem UUID: 00e96452-49b7-46d9-bc06-7f13c0abb56b
    Superblock backups stored on blocks:
    	32768, 98304, 163840, 229376, 294912
    
    Allocating group tables: done
    Writing inode tables: done
    Creating journal (8192 blocks): done
    Writing superblocks and filesystem accounting information: done
    
    [root@192 ~]# mkdir /mnt/raid0
    [root@192 ~]# mount /dev/md0 /mnt/raid0
    [root@192 ~]# echo "this is raid 0, ext4 filesystem" > /mnt/raid0/readme.txt
    [root@192 ~]# ll /mnt/raid0/
    total 20
    drwx------. 2 root root 16384 Jun  5 08:11 lost+found
    -rw-r--r--. 1 root root    32 Jun  5 08:14 readme.txt
    [root@192 ~]#
    

    4、配置fstab自动挂载

    使用UUID和路径挂载都可以。

    [root@192 ~]# umount /mnt/raid0
    [root@192 ~]#
    [root@192 ~]# blkid /dev/md0
    /dev/md0: UUID="00e96452-49b7-46d9-bc06-7f13c0abb56b" TYPE="ext4"
    [root@192 ~]# vim /etc/fstab
    [root@192 ~]# cat /etc/fstab
    
    #
    # /etc/fstab
    # Created by anaconda on Thu Jun  4 02:28:07 2020
    #
    # 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.
    #
    # After editing this file, run 'systemctl daemon-reload' to update systemd
    # units generated from this file.
    #
    /dev/mapper/cl-root     /                       xfs     defaults        0 0
    UUID=10be244e-bd87-44d2-8531-e736343939b8 /boot                   ext4    defaults        1 2
    /dev/mapper/cl-swap     swap                    swap    defaults        0 0
    UUID="00e96452-49b7-46d9-bc06-7f13c0abb56b" /mnt/raid0 ext4 defaults 0 0
    #/dev/md0 /mnt/raid0 ext4 defaults 0 0
    [root@192 ~]# mount -a
    [root@192 ~]# df -h
    Filesystem           Size  Used Avail Use% Mounted on
    devtmpfs             382M     0  382M   0% /dev
    tmpfs                399M     0  399M   0% /dev/shm
    tmpfs                399M   11M  388M   3% /run
    tmpfs                399M     0  399M   0% /sys/fs/cgroup
    /dev/mapper/cl-root  8.0G  1.8G  6.2G  23% /
    /dev/sda1            976M  139M  771M  16% /boot
    tmpfs                 80M     0   80M   0% /run/user/0
    /dev/md0             2.0G  6.1M  1.9G   1% /mnt/raid0
    [root@192 ~]# ll /mnt/raid0/
    total 20
    drwx------. 2 root root 16384 Jun  5 08:11 lost+found
    -rw-r--r--. 1 root root    32 Jun  5 08:14 readme.txt
    [root@192 ~]# cat /mnt/raid0/readme.txt
    this is raid 0, ext4 filesystem
    [root@192 ~]#
    

    5、保存raid配置文件

    mdadm --detail --scan --verbose >> /etc/mdadm.conf

    mdadm -E -s -v >> /etc/mdadm.conf

    [root@192 ~]# mdadm -E -s -v >> /etc/mdadm.conf
    [root@192 ~]# cat /etc/mdadm.conf
    ARRAY /dev/md/0  level=raid0 metadata=1.2 num-devices=2 UUID=f36becb8:6f8a4377:5973e533:79b43a1d name=192.168.94.130:0
       devices=/dev/sdc,/dev/sdb
    [root@192 ~]#
    

    以后可以查看参考。


    读书和健身总有一个在路上

  • 相关阅读:
    java 分解质因数
    Unix 文件系统读写时权限校验
    find 命令实战巧用
    Linq分组功能
    三种查看SqlServer中数据物理pge页的方法
    一个高度压缩的bit位图字典的实现
    windbg 命令 gchandles
    ManualResetEvent和AutoResetEvent的区别实例
    一些汇编指令(基于8086)
    windbg sos版本不匹配问题解决
  • 原文地址:https://www.cnblogs.com/Renqy/p/13052209.html
Copyright © 2011-2022 走看看