Linux下用mdadm创建软RAID以及避坑
前言
linux下组软raid用mdadm命令,multiple devices admin,多设备管理。
本文内容有二:
- 用mdadm创建raid
- 用mdadm创建raid时的一个大坑
大坑
先把大坑写前面。
用来创建raid的硬盘,不管是新盘还是旧盘,在linux中挂载以后,请先用wipefs
命令清理硬盘上的分区表信息。
硬盘分区有两种,mbr和gpt,mbr可以直接裸盘不分区就创建raid,gpt必须要有分区才能创建raid。如果组raid的几块硬盘分区表信息不统一,虽然能成功创建raid,但是系统一重启就会掉raid,也就是raid消失了。没错,系统一重启raid就没了。如果你已经在这个raid上导入数据,这个坑肯定能惊出你一头汗。
所以拿到硬盘以后,最好是用wipefs
直接清空分区表。也有人说用fdisk
,但实际fdisk只能处理mbr分区表,需要用升级版gdisk
才能处理gpt分区表。
假定磁盘是/dev/sdb
# 查看分区表
wipefs /dev/sdb
删除分区表所有信息
wipefs -a -f /dev/sdb
分区注意事项
创建raid之前,要简单了解一下mbr和gpt分区,避免后续再踩雷。
mbr:
- 不支持2TB以上容量的硬盘
- 可以不分区,以裸盘为单位创建raid
- 用
fdisk
处理分区
gpt:
- 支持2TB以上容量的硬盘
- 必须先分区,以分区为单位创建raid
- 用
gdisk
处理分区
创建磁盘阵列
我没有那么大容量的硬盘,而且系统也是legacy bios引导,所以这里选择mbr裸盘创建阵列。
第一步:查看分区表
先确认前面已经用wipefs
清空了旧硬盘上的分区表信息。
# 查看分区表
wipefs /dev/sdb
# 删除分区表
wipefs -a -f /dev/sdb
注意:如果是gpt分区,注意要用gdisk
先分区,/dev/sdb1和/dev/sdc1,下面创建raid的时候也是用/dev/sdb1和/dev/sdc1。
第二步:创建raid0
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb /dev/sdc
- /dev/md0 : 指创建的磁盘阵列的名称,如果有多个raid,可以按顺序往下编,比如/dev/md1
- level=0 :指raid0,还有1、5、10等等,对应raid1、raid5、raid10
- raid-devices=2 :指阵列的磁盘数量,2块盘就是2
创建完成后,可以用下面的命令查看raid信息。
mdadm --detail /dev/md0
第三步:创建文件系统(格式化)
raid创建成功以后,需要格式化
mkfs.ext4 /dev/md0
注意ext4文件格式下,系统会预留5%的冗余空间,简单换算就是1TB就会保留50GB空间。
第四步:保存raid信息
注意不同linux版本mdadm的配置文件路径可能不同,debian是/etc/mdadm/mdadm.conf
。
mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
第五步:挂载raid
创建挂载点
mkdir /mnt/raid0
挂载
mount /dev/md0 /mnt/raid0
第六步:开机自动挂载
用blkid
查看/dev/md0的uuid编号,然后添加到/etc/fstab
中即可。
或者用命令自动添加
echo `blkid /dev/md0 | awk '{print $2}' | sed 's/\"//g'` /media/raid0 ext4 defaults 0 0 >> /etc/fstab
参考文章
- 创建RAID阵列(Linux)https://help.aliyun.com/zh/ecs/use-cases/create-a-raid-array-for-a-linux-instance
- 如何在 Linux 中清除/删除磁盘或者分区中的所有分区表 https://www.onitroad.com/jc/linux/faq/how-to-delete-all-the-partition-table-from-a-disk-in-linux.html
- 记一次采坑经历, mdadm 创建 raid0,重启后自动消失 https://www.idczone.net/news/5766.html/
- linux中Raid0磁盘阵列的搭建 https://www.cnblogs.com/liuhui-xzz/p/9653123.html