最近在做搭一个GreenPlum的实验环境,要对机器做RAID1+0。RAID1+0应该是目前用的比较多的磁盘阵列选择。
RAID1+0的特点:
1.RAID10 是先将数据进行镜像操作,然后再对数据进行分组,RAID1 在这里就是一个冗余的备份阵列,而RAID0则负责数据的读写阵列
2.至少要四块盘,两两组合做 RAID1,然后做 RAID0,RAID10 对存储容量的利用率和RAID1一样低,只有 50%
3.Raid10 方案造成了 50% 的磁盘浪费,但是它提供了 200% 的速度和单磁盘损坏的数据安全性,并且当同时损坏的磁盘不在同一 RAID1 中,就能保证数据安全性,RAID10 能提供比 RAID5 更好的性能
首先往虚拟机添加4块10G大小的新磁盘,然后重启一下Linux,重启完就可以发现设备添加到/dev/目录下,分别是sdb,sdc,sdd,sde 。
这里说下,如果不做阵列怎么办?这4个文件进行创建分区,注意这里的分区要选择primary,不能是extended,然后格式化成xfs格式,然后挂载到磁盘目录
用fdisk先对磁盘创建分区,等于windows里面在磁盘管理器创建什么C盘D盘E盘...
[root@gpmaster media]# fdisk /dev/sdc 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 命令(输入 m 获取帮助):d 已选择分区 3 分区 3 已删除 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1):2 起始 扇区 (2048-20971519,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519): 将使用默认值 20971519 分区 2 已设置为 Linux 类型,大小设为 10 GiB 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。
格式化磁盘分区成XFS文件系统格式,加个 -f 强制格式化
[root@gpmaster media]# mkfs.xfs -f /dev/sdc2 meta-data=/dev/sdc2 isize=512 agcount=4, agsize=655296 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=2621184, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@gpmaster media]# mkfs.xfs -f /dev/sdd2 meta-data=/dev/sdd2 isize=512 agcount=4, agsize=655296 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=2621184, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@gpmaster media]# mkfs.xfs -f /dev/sde2 meta-data=/dev/sde2 isize=512 agcount=4, agsize=655296 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=2621184, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
把磁盘分区挂载到磁盘目录下
[root@gpmaster media]# mkdir sdc2 [root@gpmaster media]# mkdir sdd2 [root@gpmaster media]# mkdir sde2 [root@gpmaster media]# ll 总用量 0 drwxr-xr-x. 2 root root 6 9月 25 01:25 sdb2 drwxr-xr-x. 2 root root 6 9月 25 01:27 sdc2 drwxr-xr-x. 2 root root 6 9月 25 01:27 sdd2 drwxr-xr-x. 2 root root 6 9月 25 01:27 sde2 [root@gpmaster media]# mount -a /dev/sdc2 /media/sdc2/ [root@gpmaster media]# mount -a /dev/sdd2 /media/sdd2/ [root@gpmaster media]# mount -a /dev/sde2 /media/sde2/
修改/etc/fstab文件,把磁盘挂载点加入到里面,这样系统重启的时候才会自动挂载
# /etc/fstab # Created by anaconda on Wed Sep 1 22:18:56 2021 # # 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 # /dev/mapper/centos-root / xfs defaults 0 0 UUID=8ea131e3-5d62-4083-bca8-f7b08744100a /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /dev/sdb2 /media/sdb2 xfs defaults 0 0 /dev/sdc2 /media/sdc2 xfs defaults 0 0 /dev/sdd2 /media/sdd2 xfs defaults 0 0 /dev/sde2 /media/sde2 xfs defaults 0 0
上面就是普通新增磁盘挂载到目录的步骤。
但是因为我们是要做RAID阵列,同样是先对几块磁盘创建分区,不一样的是,fdisk建分区的时候分区类型选择 fd (也就是Linux Raid)
[root@gpmaster ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):2^H^H^H
分区号 (1-4,默认 1):2
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):
将使用默认值 20971519
分区 2 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):t
已选择分区 2
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@gpmaster ~]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):2
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):
将使用默认值 20971519
分区 2 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):t
已选择分区 2
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@gpmaster ~]# fdisk /dev/sdd
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):2
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):
将使用默认值 20971519
分区 2 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):t
已选择分区 2
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”
命令(输入 m 获取帮助):dw^H^H^[[2~^H^H^Hw
已选择分区 2
分区 2 已删除
命令(输入 m 获取帮助):d
No partition is defined yet!
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):2
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):
将使用默认值 20971519
分区 2 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):t
已选择分区 2
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@gpmaster ~]# fdisk /dev/sde
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):2
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):
将使用默认值 20971519
分区 2 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):t
已选择分区 2
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
创建完分区,执行fdisk -l可以看到分区,确保分区类型是linux raid autodetect
[root@gpmaster ~]# fdisk -l 磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x000097e3 设备 Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 41943039 19921920 8e Linux LVM 磁盘 /dev/sdc:10.7 GB, 10737418240 字节,20971520 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xb336a287 设备 Boot Start End Blocks Id System /dev/sdc2 2048 20971519 10484736 fd Linux raid autodetect 磁盘 /dev/sdd:10.7 GB, 10737418240 字节,20971520 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x1b60683a 设备 Boot Start End Blocks Id System /dev/sdd2 2048 20971519 10484736 fd Linux raid autodetect 磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x8e14e588 设备 Boot Start End Blocks Id System /dev/sdb2 2048 20971519 10484736 fd Linux raid autodetect 磁盘 /dev/sde:10.7 GB, 10737418240 字节,20971520 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xd9e68f8c 设备 Boot Start End Blocks Id System /dev/sde2 2048 20971519 10484736 fd Linux raid autodetect 磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节
因为是RAID1+0, 所以要先对sdb、sdc创建镜像,也就是RAID1
[root@gpmaster ~]# mdadm -Cv /dev/md1 -l1 -n2 /dev/sd[b-c]2 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 mdadm: size set to 10475520K Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md1 started.
注意RAID1是需要两块磁盘,所以我们把sdb\sbc和sdd\sde分别两两做成RAID1
[root@gpmaster ~]# mdadm -Cv /dev/md2 -l1 -n2 /dev/sd[d-e]2
mdadm: /dev/sdd2 appears to be part of a raid array:
level=raid0 devices=2 ctime=Sat Sep 25 02:20:22 2021
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
mdadm: /dev/sde2 appears to be part of a raid array:
level=raid0 devices=2 ctime=Sat Sep 25 02:20:22 2021
mdadm: size set to 10475520K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started.
创建完镜像,再mdadm命令创建条带,也就是RAID0,RAID0也是需要两块磁盘,那就是前面做成两块RAID1做一个RAID0
[root@gpmaster ~]# mdadm -Cv /dev/md10 -l0 -n2 /dev/md1 /dev/md2 mdadm: chunk size defaults to 512K mdadm: /dev/md1 appears to be part of a raid array: level=raid0 devices=2 ctime=Sat Sep 25 02:09:02 2021 mdadm: /dev/md2 appears to be part of a raid array: level=raid0 devices=2 ctime=Sat Sep 25 02:09:02 2021 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md10 started. [root@gpmaster ~]#
可以查看下磁盘情况
[root@gpmaster ~]# mdadm -D /dev/md10 /dev/md10: Version : 1.2 Creation Time : Sat Sep 25 02:27:17 2021 Raid Level : raid0 Array Size : 20932608 (19.96 GiB 21.43 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Sat Sep 25 02:27:17 2021 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Chunk Size : 512K Consistency Policy : none Name : gpmaster:10 (local to host gpmaster) UUID : e3babfeb:5f5f0188:48508466:ee39fdfa Events : 0 Number Major Minor RaidDevice State 0 9 1 0 active sync /dev/md1 1 9 2 1 active sync /dev/md2 [root@gpmaster ~]#
然后格式化RAID10成xfs文件系统格式,然后把RAID1+0挂到目录下就成了
[root@gpslave1 md10]# mkfs.xfs -f /dev/md10
meta-data=/dev/md10 isize=512 agcount=16, agsize=327040 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5232640, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
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@gpmaster ~]# mount /dev/md10 /media/md10 [root@gpmaster ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 899M 0 899M 0% /dev tmpfs 910M 0 910M 0% /dev/shm tmpfs 910M 9.6M 901M 2% /run tmpfs 910M 0 910M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 2.1G 15G 13% / /dev/sda1 1014M 195M 820M 20% /boot vmhgfs-fuse 922G 29G 894G 4% /mnt/hgfs tmpfs 182M 0 182M 0% /run/user/0 /dev/md10 20G 33M 20G 1% /media/md10 [root@gpmaster ~]#
最后一步修改/etc/fstab,开机自动挂载
[root@gpmaster md10]# vim /etc/fstab [root@gpmaster md10]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Wed Sep 1 22:18:56 2021 # # 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 # /dev/mapper/centos-root / xfs defaults 0 0 UUID=8ea131e3-5d62-4083-bca8-f7b08744100a /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /dev/md/gpmaster:10 /media/md10 xfs defaults 0 0
修改/etc/fstab这里有个坑,可以看另外一篇博文找到mdadm命令处(Linux磁盘阵列命令mdadm)
万一你发现前面的步骤搞错了,raid1搞错成raid0,怎么回退回去。可以用mdadm -S /dev/md0删除阵列,通过一步步回退,再重新来,过程注意用fdisk -l检查下生成的磁盘文件
参考:
https://www.cnblogs.com/itwangqiang/p/14168141.html
https://www.cnblogs.com/silent2012/p/4586273.html
https://www.linuxidc.com/Linux/2019-08/160371.htm