[置顶] linux下的软件模拟raid的操作

RAID (独立冗余磁盘阵列


    raid 0 : 把多个硬盘合并为一个逻辑磁盘使用 (至少2块)

        特点:读取数据快,但是一个盘坏了,整个数据就都坏了。不安全

    raid 1:同时对两块盘进行操作。一块专门作为备份(至少两块)

        特点: 读取数据慢,但是因为有个备份,所以安全。

    raid 5:把多个硬盘合并成一个硬盘使用,但在读写时会建立奇偶校验信息在不同的盘(至少3块)

        特点:只是一定程度上的提高了安全性,同时兼顾了速度

    raid 10:就是raid 0和raid 1 的综合版本。即安全又有速度,但也有缺点,就是很费钱。


下面说一下怎么软件实现将设备块做成RAID

mdadm模式化的命令:

      创建模式:  -C

                          专用选项:

                                   -l:级别

                                   -n:设备个数

                                   -a   yes: 自动为其创建设备文件

   -x:设置备用的设备

      管理模式:

                         --add(-a)创建, --remove(-r) 移除, --fault(-f)模拟损坏

      监控模式:  -F

      增长模式:  -G

      装配模式:  -A

      查看模式:  -D 查看磁盘阵列的详细信息


RAID 0 的演示

下面演示一下创建一个4G的raid 0 。我为策略是用4个1GB的分区去创建。

1.首先添加一块硬盘。然后对其分区,并将其id指为fd

(1).我添加了一块硬盘8G的。/dev/sdb 还没有分区和格式化(这里用VMware更好做这次实验)

<span style="font-size:18px;">[root@localhost /]# fdisk -l

Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x1f40229c

   Device Boot      Start         End      Blocks   Id  System

Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00079f53

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      616447      307200   83  Linux
/dev/sda2          616448     4810751     2097152   82  Linux swap / Solaris
/dev/sda3         4810752    41943039    18566144   83  Linux</span>
(2)。对/dev/sdb进行分区和更改id号

<span style="font-size:18px;">Command (m for help): t
Partition number (1,2,5-8, default 8): 8
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'</span>


就演示一下怎么改id号。按t然后按fd就好。最后分的区如下图

  <span style="font-size:18px;"> Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200    16777215     7339008    5  Extended
/dev/sdb5         2101248     4198399     1048576   fd  Linux raid autodetect
/dev/sdb6         4200448     6297599     1048576   fd  Linux raid autodetect
/dev/sdb7         6299648     8396799     1048576   fd  Linux raid autodetect
/dev/sdb8         8398848    10495999     1048576   fd  Linux raid autodetect</span>

(3).分完区后w保存退出。使用读取一下刚才的分区

[root@localhost ~]# partprobe /dev/sdb
[root@localhost ~]# cat /proc/partitions 
major minor  #blocks  name

   8        0   20971520 sda
   8        1     307200 sda1
   8        2    2097152 sda2
   8        3   18566144 sda3
   8       16    8388608 sdb
   8       17    1048576 sdb1
   8       18          1 sdb2
   8       21    1048576 sdb5
   8       22    1048576 sdb6
   8       23    1048576 sdb7
   8       24    1048576 sdb8
  11        0    4228096 sr0

2.创建一个raid 0

[root@localhost ~]# mdadm -C /dev/md0 -a yes -l 0 -n 4 /dev/sdb{5..8}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

解释一下上述的选项 -a 自动创建设备并回答yes . -l 指定创建级别为0 ,-n 设备数   /dev/sdb{5..8} 这些设备用来做raid 0


3.这就创建好了,就差格式化和挂载了,在/proc/mdstat 下记录着 本机的 raid 的详细信息

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid0] 
md0 : active raid0 sdb8[3] sdb7[2] sdb6[1] sdb5[0]
      4190208 blocks super 1.2 512k chunks
      
unused devices: <none>

4.这就格式化和挂载吧。

[root@localhost ~]# mkfs.xfs /dev/md0
meta-data=/dev/md0               isize=256    agcount=8, agsize=130944 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=1047552, imaxpct=25
         =                       sunit=128    swidth=512 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# ls /mnt
cdrom  md  rpm
[root@localhost ~]# mount /dev/md0 /mnt/md

RAID 1 的演示

其实都是一样的过程。这下1G的内容,raid 1 需要2块1G的硬盘

1.首先我又分了2个区出来(/dev/sdb9   /dev/sdb10)

2.开始创建!!!

[root@localhost ~]# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdb9 /dev/sdb10
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid0] [raid1] 
md1 : active raid1 sdb10[1] sdb9[0]
      1047552 blocks super 1.2 [2/2] [UU]
      
md0 : active raid0 sdb8[3] sdb7[2] sdb6[1] sdb5[0]
      4190208 blocks super 1.2 512k chunks
      
 最后发现有2个md设备了。开始格式化和挂载吧


使用fdisk就可以查看raid的情况了

Disk /dev/md0: 4290 MB, 4290772992 bytes, 8380416 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 2097152 bytes


Disk /dev/md1: 1072 MB, 1072693248 bytes, 2095104 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


下面使用管理命令模拟一个磁盘的损坏,演示raid 的各种特性

1.首先都给2个挂载点内复制进去一个文件

<span style="font-size:18px;">[root@localhost mnt]# cp /etc/fstab ./md
[root@localhost mnt]# cp /etc/fstab ./md1</span>

2.查看。都是可以正常访问的

3.使用查看raid命令查看详细的raid信息(mdadm -D /dev/md0)

[root@localhost mnt]# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Tue Oct 25 18:03:05 2016
     Raid Level : raid0
     Array Size : 4190208 (4.00 GiB 4.29 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Tue Oct 25 18:03:05 2016
          State : clean 
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

     Chunk Size : 512K

           Name : localhost.localdomain:0  (local to host localhost.localdomain)
           UUID : 74d4d16c:3ca2180f:b94cb472:66f3c5e4
         Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       21        0      active sync   /dev/sdb5
       1       8       22        1      active sync   /dev/sdb6
       2       8       23        2      active sync   /dev/sdb7
       3       8       24        3      active sync   /dev/sdb8
4.模拟损坏一个(mdadm /dev/md0 -f /dev/sdb8),损坏哪个sdb8(只是模拟损坏,不是真坏了)

[root@localhost mnt]# mdadm /dev/md0 -f /dev/sdb8
mdadm: set /dev/sdb8 faulty in /dev/md0
5.发现不能打开原文件了(raid 0 的话模拟损坏会一直提示设备忙。不能真正的演示不能打开原文件。就假装打不开吧)


同样的过程看看/dev/md1的(cat /proc/mdstat)

[root@localhost mnt]# mdadm /dev/md1 -f /dev/sdb9
mdadm: set /dev/sdb9 faulty in /dev/md1
[root@localhost mnt]# clear
[root@localhost mnt]# cat /proc/mdstat 
Personalities : [raid1] [raid0] 
md0 : active raid0 sdb6[1] sdb8[3] sdb5[0] sdb7[2]
      4190208 blocks super 1.2 512k chunks
      
md1 : active raid1 sdb10[1] sdb9[0](F)
      1047552 blocks super 1.2 [2/1] [_U]
      
再看看详细信息(mdadm -D /dev/md1

[root@localhost mnt]# mdadm -D /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Tue Oct 25 18:45:25 2016
     Raid Level : raid1
     Array Size : 1047552 (1023.17 MiB 1072.69 MB)
  Used Dev Size : 1047552 (1023.17 MiB 1072.69 MB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Tue Oct 25 19:17:00 2016
          State : clean, degraded 
 Active Devices : 1
Working Devices : 1
 Failed Devices : 1
  Spare Devices : 0

           Name : localhost.localdomain:1  (local to host localhost.localdomain)
           UUID : bdaf75b2:caf00461:96b63007:7c517128
         Events : 19

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       26        1      active sync   /dev/sdb10

       0       8       25        -      faulty   /dev/sdb9
坏掉没用的盘移除。(mdadm /dev/md1 -r /dev/sdb9)

[root@localhost md1]# mdadm /dev/md1 -r /dev/sdb9
mdadm: hot removed /dev/sdb9 from /dev/md1
再加上一块盘(mdadm  /dev/md1 -a /dev/sdb9)

[root@localhost md1]# mdadm /dev/md1 -a /dev/sdb9
mdadm: added /dev/sdb9
[root@localhost md1]# cat /proc/mdstat 
Personalities : [raid1] [raid0] 
md0 : active raid0 sdb6[1] sdb8[3] sdb5[0] sdb7[2]
      4190208 blocks super 1.2 512k chunks
      
md1 : active raid1 sdb9[2] sdb10[1]
      1047552 blocks super 1.2 [2/1] [_U]
      [=====>...............]  recovery = 26.3% (276608/1047552) finish=0.0min speed=276608K/sec
通过查看/proc/mdstat看以看到,正在恢复数据中。



假如某阵列不想用了,可以通过mdadm --stop /dev/md0停止这个阵列。 

再清除掉分区上的超级块信息(很重要) mdadm --zero-superblock /dev/sdb[1-3,5]



可以使用3块盘。1块存数据。1块当镜像。1块备份(一旦有一个坏了就立马补上去)



mdadm -C /dev/mdN -n 2 -x 1 -l 1 /dev/devices{1..3}


将当前信息保存至配置文件。以便以后的启动

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


以后就可以使用 mdadm -A /dev/mdN启动了。


创建一个2G的raid 5需要使用 3个1G的。






你可能感兴趣的:(linux,运维,raid,软件,磁盘)