一、必要的准备
如果之前磁盘有做过阵列,需要先清理掉配置。要查看当前机器上是否具有磁盘阵列的配置(在 /proc/mdstat 文件内),我们可以打以下的指令:
cat /proc/mdstat
>Output
>Personalities : [raid0] [linear] [multipath] [raid1] [raid6] [raid5] [raid4] [raid10]
>md0 : active raid0 sdc[1] sdd[0]
> 209584128 blocks super 1.2 512k chunks
>
> unused devices:
二、如果有配置,需要从文件系统中卸载磁盘阵列:
sudo umount /dev/md0
三、暂停并移除此磁盘阵列:
sudo mdadm --stop /dev/md0
sudo mdadm --remove /dev/md0
四、查出磁盘的结构的指令:
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
>Output
>NAME SIZE FSTYPE TYPE MOUNTPOINT
sda 00G disk
sdb 00G disk
sdc 00G linux_raid_member disk
sdd 00G linux_raid_member disk
vda 0G disk
├─vda1 0G ext4 part /
└─vda15 M part
如果发现我们的磁盘已经做过阵列,我们需要重置它们的超级块(Superblock),使其正常化:
sudo mdadm --zero-superblock /dev/sdc
sudo mdadm --zero-superblock /dev/sdd
你应该删除所有的阵列相关的引用设置,例如在 /etc/fstab 文件内自动挂载设置
sudo nano /etc/fstab
#/etc/fstab
. . .
# 将这行注释,否则会引至启动失败
# /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0
当然,你还需要在阵列定义文件 /etc/mdadm/mdadm.conf 内移除原有的阵列设置
sudo nano /etc/mdadm/mdadm.conf
# /etc/mdadm/mdadm.conf
. . .
注释阵列设置
# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=7261fb9c:976d0d97:30bc63ce:85e76e91
最后更新 initramfs 系统:
sudo update-initramfs -u
OK,此时一切回到没有阵列的普通磁盘状态了,我们就可以开始以下的尝试了。
Initramfs 初始 ram 文件系统基于 'tmpfs ' (大小灵活、 内存中的轻量级文件系统),但是他并不是一个单独的块设备 (所以没有缓存和所有额外的开销)。就像 initrd,它包含的工具和脚本在被称为真正的根文件系统上的二进制文件 init启动之前被挂载 。这些工具可以解密抽象层 (用于加密的文件系统),逻辑卷管理器,软件 raid,蓝牙驱动程序基于文件系统的装载机等。
五、格式化
在格式化过程中有一个点大家要注意的是,由于现在的硬盘容量越来越大,fdisk 只能硬式化2T以内的硬盘,如果你想用两个3T的硬盘做阵列那么还是用Parted GPT吧:
sudo parted /dev/sdb
这个指令按照向导来做就好了,过程极其简单。将格式做成 ext4 就可以了。
六、磁盘阵列
1、RAID 0
RAID 0 即Data Stripping(数据分条技术)。整个逻辑盘的数据是被分条(stripped)分布在多个物理磁盘上,可以并行读/写,提供最快的速度,但没有冗余能力。要求至少两个磁盘。我们通过RAID 0可以获得更大的单个逻辑盘的容量,且通过对多个磁盘的同时读取获得更高的存取速度。RAID 0首先考虑的是磁盘的速度和容量,忽略了安全,只要其中一个磁盘出了问题,那么整个阵列的数据都会不保了。
在开始之前我们还是先用 lsblk 查看一下磁盘的状态:
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
>Output
NAME SIZE FSTYPE TYPE MOUNTPOINT
sda 00G disksdb 00G disk
vda 0G disk
├─vda1 0G ext4 part /
└─vda15 M part
创建阵列:
sudo mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sda /dev/sdb
检查磁盘阵列的状态:
cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid0 sdb[1] sda[0]
209584128 blocks super 1.2 512k chunks
unused devices: <none>
2、其余的RAID 1、5、6方式同0,就不一一说了,但是需要注意的是,磁盘容量问题
Raid 0:至少1块磁盘,不损失磁盘容量
Raid 1:至少2磁盘,损失50%磁盘容量
Raid 5:至少3块磁盘,损失(n-1)容量(n为磁盘数量)
Raid 6:至少4块磁盘,损失(n-2)容量(n为磁盘数量)
性能区别:10>0>6>5
3、RAID 10 单独说一下
RAID 10其实就是Raid 1+0,是先镜像再分区数据,再将所有硬盘分为两组,视为是RAID 0的最低组合,然后将这两组各自视为RAID 1运作。
RAID 10(又叫RAID 1+0)特点:
最少需要4块磁盘
先按RAID 0分成两组,再分别对两组按RAID 1方式镜像
兼顾冗余(提供镜像存储)和性能(数据条带形分布)
创建阵列
sudo mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd
七、挂载文件系统
下一步,在阵列上创建文件系统:
sudo mkfs.ext4 -F /dev/md0
在文件系统上创建挂载点的文件夹
sudo mkdir -p /mnt/md0
挂载阵列至挂载点文件夹上
sudo mount /dev/md0 /mnt/md0
为了确保阵列开机时被载入,我们应该调整一下 /etc/mdadm/mdadm.conf 的配置文件,我可以加以下的指令使系统在启动自检时扫描磁盘阵列的详细信息:
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
另外,你可以更新 initfamfs 或者初始化RAM文件系统,这样一来阵列会在启动前就可以生效:
sudo update-initramfs -u
最重要的一点是一定要在 /etc/fstab 配置文件内加入自动挂载的设置:
echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
这样 ubuntu 启动后就会自动将磁盘阵列挂入了。
另外,如果没有设置自动挂载,在系统重启后或磁盘名称更改(插入其它硬盘会导致盘名变更的)例如 /dev/md0 变成了 /dev/md127 就可能会出现磁盘不能被挂载的问题,此时切记重新创建阵列,因这将会毁掉你的一切!重新手工挂载一下就OK了:
sudo mount /dev/md127 /mnt/md0