安装操作系统时创建 RAID

首先需要一提的是,在创建虚拟机时,操作系统的选择一定要正确,比如我们这里的 iso 安装包是64位的,就要选取CentOS 64位,如果只选择CentOS,会造成虚拟机安装完毕后无法上网(应该是网卡驱动没有正确安装)。

创建虚拟机

首先创建虚拟机,选择稍后安装操作系统,硬盘设置为10GB,完成后再添加硬盘,每块大小最好一样为5GB,我这里添加了4块,共5块硬盘。

raid5 安装centos7 启动不了 centos7安装raid驱动_bc

之后开启虚拟机,进行操作系统的安装。

安装操作系统

很简单的操作后来到下面界面。

raid5 安装centos7 启动不了 centos7安装raid驱动_centos_02

软件选择

raid5 安装centos7 启动不了 centos7安装raid驱动_CentOS_03

中选择了GNOME 桌面,右侧已选环境的附加选项全部未勾选

raid5 安装centos7 启动不了 centos7安装raid驱动_centos_04

下一步选择安装位置,可以看出,设备选择中一共有我们刚才添加的5块硬盘,全部勾选上,在其他存储选项中勾选我要配置分区,然后点击左上角的完成

raid5 安装centos7 启动不了 centos7安装raid驱动_CentOS_05

下面开始手动分区。

raid5 安装centos7 启动不了 centos7安装raid驱动_bc_06


不知为何安装界面在VMware中展开不全,所以这里分区方案保持默认的LVM,点击点这里自动创建他们(C)。

我测试的分区方案是,/boot500Mswap2048M,剩下的7.5G分给/,还有4块硬盘组成RAID分给/home。在分配硬盘的时候,Device Type选取LVMVolume Group中可以设置从哪些硬盘中分取空间,我的做法是/ /boot swap使用第一块硬盘;把其它硬盘新建一个分组用来划分/home的空间,同时,对/homeDevice Type选取RAID后,右边的Volume Group变为RAID Level,选取为RAID 5,然后上面DeviceModify按钮激活,选取剩下的四块硬盘。

raid5 安装centos7 启动不了 centos7安装raid驱动_bc_07

确定后就可以点击开始安装了,设置好root密码,新建账号,等待即可。

利用 mdadm 创建 RAID 并挂载

如果希望安装好操作系统后,对未使用的硬盘创建 RAID,即上面在选择安装目标位置的硬盘时有一些没有勾选,比如我测试时只够了第一块硬盘,然后分区并安装系统,这时可以在终端利用mdadm进行 RAID 的配置。这里需要说明,下面的操作均是在root下进行。

首先df -h查看系统的磁盘空间占用情况,下面是我的输出:

文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root  5.0G  3.3G  1.8G   66% /
devtmpfs                 911M     0  911M    0% /dev
tmpfs                    921M   92K  921M    1% /dev/shm
tmpfs                    921M  8.9M  912M    1% /run
tmpfs                    921M     0  921M    0% /sys/fs/cgroup
/dev/mapper/centos-home   13G   38M   13G    1% /home
/dev/sda1                497M  124M  373M   25% /boot
/dev/sr0                 4.1G  4.1G     0  100% /run/media/ycg/CentOS 7 x86_64

可以看出只有一块硬盘/dev/sda1(目录/home也是选择了/dev/sda这块硬盘,但是不知道为何文件系统显示的是/dev/mapper/centos-home,怀疑有两种可能:安装操作系统时Device Type选取LVM会生成磁盘的映射/dev/mapper,或者,虚拟机下与真实安装不一样。目测前一种靠谱),再利用fdisk -l | grep /dev/sd看到

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
磁盘 /dev/sdd:21.5 GB, 21474836480 字节,41943040 个扇区
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    41943039    20458496   8e  Linux LVM
磁盘 /dev/sde:21.5 GB, 21474836480 字节,41943040 个扇区

的确是sda, sdb, sdc, sdd, sde五块硬盘,其中操作系统安装在sda,其余四块硬盘没有使用。我们下面就利用这四块硬盘创建 RAID。

mdadm --create --auto=yes /dev/md0 --level=5  --raid-devices=4 --spare-devices=0 /dev/sd[b,c,d,e]

上面的命令表明利用sdb, sdc, sdd, sde四块硬盘创建level5的 RAID,即RAID5,其设备名为/dev/md0,其中四块硬盘都用来做 RAID 的装置,没有备用硬盘。如果硬盘比较多,可以令--spare-devices=1,这时候硬盘的数目应该等于 raid-devicesspare-devices数目之和。

输入上面创建 RAID 的命令后,CentOS图形界面会报错阵列已降级,在磁盘软件的界面中显示一个磁盘缺失

raid5 安装centos7 启动不了 centos7安装raid驱动_bc_08


使用

mdadm --detail /dev/md0

查看详细信息后也发现类似情况

/dev/md0:
        Version : 1.2
  Creation Time : Fri Dec 25 09:58:41 2015
     Raid Level : raid5
     Array Size : 62865408 (59.95 GiB 64.37 GB)
  Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Fri Dec 25 09:59:02 2015
          State : clean, degraded, recovering 
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 512K

 Rebuild Status : 11% complete

           Name : localhost.localdomain:0  (local to host localhost.localdomain)
           UUID : 85d38e21:ee251913:f49caedb:6e36ebc5
         Events : 4

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       2       8       48        2      active sync   /dev/sdd
       4       8       64        3      spare rebuilding   /dev/sde

从其中

Rebuild Status : 11% complete
......
4       8       64        3      spare rebuilding   /dev/sde

发现确实有硬盘在重建。一开始在这里纠结了好久,试了好多次,每次都是这样的情况,重新安装系统也不行。后来仔细查看网上 RAID 的相关介绍,发现这就是正常情况,因为 RAID5 有磁盘备份的功能,每个循环写入时,都记录部分同位检查码 (parity)。初次创建 RAID 时需要生成同位检查码,所以会有rebuilding啦!其实终端并没有报错,只是系统软件报错,不知道这算不算一个 bug。

在等待一段时间,rebuilding完毕后,我们的 RAID 就创建好了!此时再查看详细信息,可以看到

/dev/md0:
        Version : 1.2
  Creation Time : Fri Dec 25 09:58:41 2015
     Raid Level : raid5
     Array Size : 62865408 (59.95 GiB 64.37 GB)
  Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Fri Dec 25 10:02:00 2015
          State : clean 
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : localhost.localdomain:0  (local to host localhost.localdomain)
           UUID : 85d38e21:ee251913:f49caedb:6e36ebc5
         Events : 20

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       2       8       48        2      active sync   /dev/sdd
       4       8       64        3      active sync   /dev/sde

没有问题啦~ 如果有spare disk的话,输出会有些不一样,可以参考《鸟哥私房菜》。使用下面命令

cat /proc/mdstat

也可以查看磁盘阵列的信息

Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sde[4] sdd[2] sdc[1] sdb[0]
      62865408 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]

unused devices: <none>

我们看第二行,md0是由sdb, sdc, sdd, sde组成的raid5,第三行最后[4/4]说明 md0 需要 4 个装置且这 4 个装置均正常运行,[UUUU]代表的是四个所需的装置 [4/4]的启动情况,U代表正常运行,_代表不正常。

下面将/dev/md0格式化为xfs,这时与前面安装时选择的File System类型一致

mkfs -t xfs /dev/md0

然后创建文件夹,挂载

mkdir /mnt/raid
mount /dev/md0 /mnt/raid

再用df -h

文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root  5.0G  3.3G  1.8G   66% /
devtmpfs                 911M     0  911M    0% /dev
tmpfs                    921M  148K  921M    1% /dev/shm
tmpfs                    921M  8.9M  912M    1% /run
tmpfs                    921M     0  921M    0% /sys/fs/cgroup
/dev/mapper/centos-home   13G   38M   13G    1% /home
/dev/sda1                497M  124M  373M   25% /boot
/dev/sr0                 4.1G  4.1G     0  100% /run/media/ycg/CentOS 7 x86_64
/dev/md0                  60G   33M   60G    1% /mnt/raid

发现/dev/md0已经挂载到/mnt/raid可以使用了。

如果重启系统,会发现/dev/md0变为未挂载的状态,需要重新挂载才能使用。下面讲一下如何自动挂载。前面说过,命令

mdadm --detail /dev/md0

会输出一些信息,其中一行包括类似下面的UUID识别码用于该 RAID 装置向系统注册

UUID : 85d38e21:ee251913:f49caedb:6e36ebc5

下面根据UUID配置 RAID,配置文件名为mdadm.conf,默认是不存在的,需要手工创建。该配置文件存在的主要作用是系统启动的时候能够自动加载软 RAID,同时也方便日后管理。mdadm.conf文件内容包括由DEVICE选项指定用于 RAID 的所有设备;ARRAY选项所指定阵列的设备名、RAID 级别、阵列中活动设备的数目以及设备的UUID号。

vi /etc/mdadm.conf

添加如下内容

DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde
ARRAY /dev/md0 level=raid5 UUID=85d38e21:ee251913:f49caedb:6e36ebc5

或者直接只添加一行

ARRAY /dev/md0 UUID=85d38e21:ee251913:f49caedb:6e36ebc5

然后修改下面文件

vi /etc/fstab

最后一行添加

/dev/md0                /mnt/raid               xfs     defaults        1 2

即可。查看是否能顺利挂载

umount /dev/md0; mount -a
df /mnt/raid

得到输出

文件系统     1K-块    已用   可用     已用% 挂载点
/dev/md0  62826496 33312 62793184    1% /mnt/raid

没有问题。重启再看看df -h

文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root  5.0G  3.3G  1.8G   66% /
devtmpfs                 911M     0  911M    0% /dev
tmpfs                    921M  160K  921M    1% /dev/shm
tmpfs                    921M  9.0M  912M    1% /run
tmpfs                    921M     0  921M    0% /sys/fs/cgroup
/dev/md0                  60G   33M   60G    1% /mnt/raid
/dev/mapper/centos-home   13G   38M   13G    1% /home
/dev/sda1                497M  139M  359M   28% /boot
/dev/sr0                 4.1G  4.1G     0  100% /run/media/ycg/CentOS 7 x86_64

顺利挂载。

上面所有操作都是在root下进行的,如果是普通用户,刚开始对/mnt/raid没有写的权限,这时需要suroot,然后

chmod a+w /mnt/raid/

到此普通用户也可以用了。

最后说一下怎么关闭RAID。首先卸载

umount /dev/md0

然后把刚才添加到/etc/fstab最后一行的内容删除,再删除/etc/mdadm.conf文件,再使用

mdadm --stop /dev/md0

RAID关闭

mdadm: stopped /dev/md0

查看 RAID 的状态cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4] 
unused devices: <none>

发现已关闭。

使用

下面是/mnt/raid的使用建议。我的想法是,在这个目录下每个用户由root建立一个与用户名同名的文件夹,比如叫ycg,然后修改属性

chown -R ycg:ycg ycg

表明将文件夹的所有者和群组均改为ycg,然后修改权限

chmod 700 ycg

就可以在这个目录下愉快地玩耍啦~~~

总结

本文讨论了两种创建 RAID 的方式,未讨论 RAID 出故障之后的救援模式,创建时也没用使用备用硬盘