每天学五分钟 Liunx 110 | 存储篇:RAID


RAID

RAID 是廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks)的意思。通过它可以将较小的磁盘组成较大的磁盘。
 

RAID 模式

RAID 有几种模式,常用的有 RAID0,RAID1, RAID5 和 RAID10。下面依次介绍这几种模式。
RAID0(stripe,条带模式)
 
RAID0 至少需要两块磁盘(图中由 Disk0 和 Disk1 组成),数据会等量的写入到磁盘中。如写入 “上山打老虎啊”,Disk0 会写入 “上”,Disk1 写入 “山”,然后再将 “打”写到 Disk0,“老”写到 Disk1,“虎”写到 Disk0,“啊”写到 Disk1。(举个例子,数据不是以这种方式写入的,而是拆成较小的数据块再存到磁盘中的)
 
这种组 RAID 的好处是:读写性能变好了(单个磁盘存的数据变少了),容量变大了。缺点也很明显,安全性变差了,如果一个磁盘坏了,那整个文件系统文件都用不了了。
RAID1(mirror,镜像模式)
 
RAID1 至少需要两块磁盘,数据会同时写入到两个磁盘中,一个磁盘为另外一块磁盘的镜像。对应到 “上山打老虎啊”,就是 Disk0 和 Disk1 都会写入 “上山打老虎啊”这个数据。
 
RAID1 的好处在于,写性能变差了(数据要写多次,数据量变大了),读性能变好了(RAID 可选择数据从哪个磁盘被读取),安全性更好,一个磁盘坏了,数据不会丢,还能完整恢复。缺点也很明显,容量变差了,两块磁盘实际的容量只有一块磁盘那么大。
RAID10
 
RAID10 是 RAID1 + RAID0,它兼具 RAID1 安全性和 RAID0 大容量的优点。还是拿“上山打老虎啊”举例,Disk0 和 Disk1 会写入 “上”,Disk2 和 Disk3 写入 “山”,依次类推,数据都将写入到两块磁盘中,从而保证了安全性,如果一个磁盘数据丢了 RAID1 的恢复机制可将数据完整恢复。
当然缺点也有,总容量是磁盘容量的一半。
 
 
类似的,还有 RAID01,先做 RAID0 再做 RAID1,不多介绍了,示意图如下所示:
 
 

 

RAID 类型

RAID 按类型分,可分为硬件 RAID 和 软件 RAID。
硬件 RAID 是实打实的磁盘阵列卡,上面有专门的芯片来处理 RAID 任务,所以性能相当好。
硬件 RAID 卡如下所示:
 
软件 RAID ,顾名思义,是用软件模拟 RAID 磁盘阵列卡的功能,利用软件 RAID 可以模拟多种磁盘阵列模式,除了 RAID0/RAID1/RAID10 等还可以有 RAID5/RAID6 等等模式。当然因为是软件模拟的,需要占用 CPU 和 I/O 的资源,所以性能不如硬件 RAID 好,不过对大多数人也没啥影响,毕竟不要钱啊...

 

RAID 上手

 
硬件 RAID
1. 重启系统,Ctrl + C 进入 utility 界面(不同 Liunx 进入 RAID 界面可能不一样),看到 RAID Properties 栏,如下图所示:
 
2. Enter 进入,会看到 3 个选项,RAID1 / RAID10 和 RAID 0,并且也有相应的 RAID 模式说明:
(硬件 RAID 的模式只有三个可选~)
 
3. 如果想创建哪个 RAID,选择相应的模式,保存。系统会自行组件这种模式的磁盘设备。
 
软件 RAID
软件 RAID 可用 mdadm 工具创建,这里使用 mdadm 创建一个 RAID10 的软件磁盘阵列。
 
1. 首先根据前文 LVM 中的描述创建 4 个 logical volume, Disk[0-3] (电脑没有多个磁盘分区,只能用逻辑卷来代替...)
2. 命令 mdadm --create --auto=yes /dev/md1 --raid-devices=4 --level=10 --spare-devices=0 /dev/cinder-volumes/Disk{0,1,2,3} 创建磁盘分区 /dev/md1。其中,--create 表示创建 RAID阵列, --auto=yes 表示后面接的是阵列名称,--raid-devices 表示raid 阵列有几块磁盘组成,--level 表示创建的 RAID 是哪种模式的,--spare-devices 表示有几块备用磁盘,最后接的是要组成磁盘阵列的磁盘名。
3. mkfs 制做文件系统,mount。
 
详细操作如下:
[root@test ~]# cd /dev/md
md/  md0
[root@test ~]# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda2      xfs       895G  851G   44G  96% /
[root@test ~]# vgdisplay
  --- Volume group ---
  VG Name               test
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2884
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                13
  Open LV               10
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               600.00 GiB
  PE Size               4.00 MiB
  Total PE              153599
  Alloc PE / Size       45156 / 176.39 GiB
  Free  PE / Size       108443 / 423.61 GiB
  VG UUID               Nu1VTG-dY65-Le4a-zMDV-9kkQ-hvrT-X5uZe0
 
[root@test ~]# lvcreate -l 50 -n Disk0 test
  Logical volume "Disk0" created.
[root@test ~]# lvcreate -l 50 -n Disk1 test
  Logical volume "Disk1" created.
[root@test ~]# lvcreate -l 50 -n Disk2 test
  Logical volume "Disk2" created.
[root@test ~]# lvcreate -l 50 -n Disk3 test
  Logical volume "Disk3" created.
[root@test ~]# lvdisplay | grep Disk
  LV Path                /dev/test/Disk0
  LV Name                Disk0
  LV Path                /dev/test/Disk1
  LV Name                Disk1
  LV Path                /dev/test/Disk2
  LV Name                Disk2
  LV Path                /dev/test/Disk3
  LV Name                Disk3
 
[root@test ~]# mdadm --create --auto=yes /dev/md1 --raid-devices=4 --level=10  --spare-devices=0 /dev/test/Disk{0,1,2,3}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
[root@test ~]# cd /dev/md
md/  md0  md1
 
[root@test ~]# mkfs -t ext4 /dev/md1
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=512 blocks, Stripe width=1024 blocks
102000 inodes, 407552 blocks
20377 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=34078720
50 block groups
8192 blocks per group, 8192 fragments per group
2040 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
 
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
 
[root@test ~]# mkdir -p /root/lianhuasheng/raid
[root@test ~]# mount /dev/md1 /root/lianhuasheng/raid/
[root@test ~]# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda2      xfs       895G  850G   45G  96% /
/dev/md1       ext4      378M  2.3M  352M   1% /root/lianhuasheng/raid
 
[root@test ~]# lvdisplay | grep  Disk -C 5
--- Logical volume ---
  LV Path                /dev/test/Disk0
  LV Name                Disk0
  VG Name                test
  LV UUID                n0Qvxo-8UbS-mcpz-Qdju-dAjF-nAHk-WaNqdE
  LV Write Access        read/write
  LV Creation host, time test.localdomain, 2020-03-18 23:42:11 +0800
  LV Status              available
  # open                 1
  LV Size                200.00 MiB
  Current LE             50
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:47
 
  --- Logical volume ---
  LV Path                /dev/test/Disk1
  LV Name                Disk1
  VG Name                test
  LV UUID                Eg29wy-3jBC-R44P-G5Nl-9D69-Noc0-HcDA8B
  LV Write Access        read/write
  LV Creation host, time test.localdomain, 2020-03-18 23:42:22 +0800
  LV Status              available
  # open                 1
  LV Size                200.00 MiB
  Current LE             50
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:48
 
  --- Logical volume ---
  LV Path                /dev/test/Disk2
  LV Name                Disk2
  VG Name                test
  LV UUID                uWDcYc-0pso-vi6T-rXRD-i5ko-WSfG-K15qAY
  LV Write Access        read/write
  LV Creation host, time test.localdomain, 2020-03-18 23:42:28 +0800
  LV Status              available
  # open                 1
  LV Size                200.00 MiB
  Current LE             50
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:49
 
  --- Logical volume ---
  LV Path                /dev/test/Disk3
  LV Name                Disk3
  VG Name                test
  LV UUID                0ye1ED-ZEZK-Yj1d-QapB-QIMw-C930-sg8nQQ
  LV Write Access        read/write
  LV Creation host, time test.localdomain, 2020-03-18 23:42:34 +0800
  LV Status              available
  # open                 1
  LV Size                200.00 MiB
  Current LE             50
  Segments               1
  Allocation             inherit
 
从上面也可以看出,每个 Disk 的容量是 200M,四个 Disk 容量是 800M,而 RAID10 的文件系统是 378M,在加上文件系统自身占用的空间,正好等于磁盘总容量的一半。
 
 
最后,如果不用 RAID 的话记得要关闭 RAID:
[root@test ~]# cat /etc/fstab | grep md1
[root@test ~]# umount /root/lianhuasheng/raid
[root@test ~]# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
[root@test ~]# cat /proc/mdstat | grep md1
[root@test ~]# cat /etc/mdadm.conf | grep md1
cat: /etc/mdadm.conf: No such file or directory
[root@test ~]# ll /dev/ | grep md1
[root@test ~]#
 
/etc/fstab 是设置开机自动挂载磁盘分区的配置文件。
/etc/mdadm.conf 是 mdadm 的配置文件,如果有的话要把 md1 在文件中删掉。
 
 
(完)
posted @ 2020-03-19 00:49  hxia043  阅读(513)  评论(0编辑  收藏  举报