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
查看本地磁盘及分区
[ ~]# 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
[ ~]# 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级别
[ ~]# cat /proc/mdstat Personalities : [raid0] md0 : active raid0 sdc[1] sdb[0] 2093056 blocks super 1.2 512k chunks unused devices: <none>
查看RAID阵列
[ ~]# 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
查看当前磁盘状态
[ ~]# 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 [ ~]#
3、RAID阵列挂载使用
将 RAID 设备 /dev/md0 创建为 ext4 文件系统,并挂载到 /mnt/raid0 下
创建一个文件,测试。
[ ~]# 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 [ ~]# mkdir /mnt/raid0 [ ~]# mount /dev/md0 /mnt/raid0 [ ~]# echo "this is raid 0, ext4 filesystem" > /mnt/raid0/readme.txt [ ~]# 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 [ ~]#
4、配置fstab自动挂载
使用UUID和路径挂载都可以。
[ ~]# umount /mnt/raid0 [ ~]# [ ~]# blkid /dev/md0 /dev/md0: UUID="00e96452-49b7-46d9-bc06-7f13c0abb56b" TYPE="ext4" [ ~]# vim /etc/fstab [ ~]# 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 [ ~]# mount -a [ ~]# 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 [ ~]# 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 [ ~]# cat /mnt/raid0/readme.txt this is raid 0, ext4 filesystem [ ~]#
5、保存raid配置文件
mdadm --detail --scan --verbose >> /etc/mdadm.conf
mdadm -E -s -v >> /etc/mdadm.conf
[ ~]# mdadm -E -s -v >> /etc/mdadm.conf [ ~]# 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 [ ~]#
以后可以查看参考。
读书和健身总有一个在路上