Ubuntu 创建 RAID1 阵列

概述

目标:

  • 将两个,或两个以上的磁盘,创建 RAID 1 磁盘阵列

前置条件:

  • Ubuntu 20.04
  • 两个或以上物理硬盘,所有硬盘的容量最好保持一致

创建磁盘阵列

  1. 使用 fdisk 工具分别格式化这些硬盘(本例里,是 sdb 和 sdc)
# 列出所有磁盘信息
$ sudo fdisk -l 

# 建立分区
$ sudo fdisk /dev/sdb

# 然后依次输入
$ n (新建分区表)
$ p (主分区,然后根据提示操作)
$ w (保存分区信息)
  1. 创建 RAID1
    使用 mdadm 工具创建 RAID 陈列
$ sudo mdadm --create  --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
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 20953088K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

命令解释:

  • --create: 创建阵列
  • --verbose: 输入详细信息
  • /dev/md0: 创建后的阵列的设备名
  • level: 要创建的 RAID 的级别,这里使用模式 1
  • raid-devices: 指定 RAID 副本的磁盘数,在这里指定了 2 ,意思是平时有两个磁盘在工作。如果以后添加了第三块硬盘,那么第三块硬盘将作为备用磁盘。当工作中的两块磁盘有一块坏了,第三块将立刻启动,并将完好的一块的内容复制到新的盘中。

更多命令的参数,可以参考文件[链接]

以上命令完成磁盘阵列的创建。可以通过以下命令查看创建的进度:

$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdc1[1] sdb1[0]
      20953088 blocks super 1.2 [2/2] [UU]
      [=======>.............]  resync = 35.3% (7397120/20953088) finish=1.1min speed=195512K/sec
      
unused devices: 

创建完毕后,信息如下,sdb1、sdc1 两个都在工作中。

$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdc1[1] sdb1[0]
      20953088 blocks super 1.2 [2/2] [UU]
      
unused devices: 

也可以通过以下命令查看工作状态:

$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Wed Dec  2 16:11:51 2020
        Raid Level : raid1
        Array Size : 20953088 (19.98 GiB 21.46 GB)
     Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Wed Dec  2 16:13:40 2020
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : raid:0  (local to host raid)
              UUID : f326d47f:8b40c971:b1f17002:afe3a918
            Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
  1. 创建文件系统并挂载
    使用上面的命令创建完阵列了之后,就可以当普通存储使用了。
# 创建文件系统
$ sudo mkfs.ext4 -F /dev/md0

# 挂载存储到 /opt/data 目录
$ sudo mount /dev/md0 /opt/data
  1. 保存阵列布局
    完成以上步骤后,将阵列保存下来,在下次启动的时候自动加载,因此需要将阵列信息保存到 /etc/mdadm/mdadm.conf 文件中。可以通过以下命令来自动扫描活动阵列并追加文件:
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

更新初始RAM文件系统(initramfs)

$ sudo update-initramfs -u
  1. 保存挂截信息,修改 /etc/fstab 文件,在文件最后加入以下内容:
/dev/md0    /opt/data   ext4    defaults    0    0

更换磁盘阵列硬盘

一般情况下,如果磁盘阵列坏了一块,那么另一块的寿命应该也不长了,因此最好两块都换。更换的过程如下:

  1. 查看磁盘工作状态
$ cat /proc/mdstat

Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdc1[1]
      20953088 blocks super 1.2 [2/1] [_U]
      
unused devices: 

可以看到,原本 sdb1、sdc1 两个磁盘,只有 sdc1 在工作了。

为了演示,可以通过命令 sudo mdadm --manage /dev/md0 --fail /dev/sdb1 将指定的磁盘设为已失败。

  1. 删除损坏硬盘
$ sudo mdadm --manage /dev/md0 --remove /dev/sdb1
  1. 添加新硬盘
$ sudo mdadm --manage /dev/md0 --add /dev/sdd1

添加完新硬盘之后,RAID 会将原来完好的那块硬盘的所有资料镜像拷贝到新的硬盘,组成新 RAID。这个过程可能比较长,可以通过以下命令查看进度:

$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdd1[2] sdc1[1]
      20953088 blocks super 1.2 [2/1] [_U]
      [===================>.]  recovery = 99.6% (20883392/20953088) finish=0.0min speed=59703K/sec

等待同步完毕后,再次查看状态,可以看到两个已经在工作了:

$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdd1[2] sdc1[1]
      20953088 blocks super 1.2 [2/2] [UU]
  1. 继续添加新硬盘

可以向这个阵列布局再添加一块新硬盘:

$ sudo mdadm --manage /dev/md0 --add /dev/sdb1

此时阵列的工作状态如下:

$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdb1[3](S) sdd1[2] sdc1[1]
      20953088 blocks super 1.2 [2/2] [UU]
      
unused devices: 

或者通过以下命令查看更详细的状态:

$ sudo mdadm --detail /dev/md0

/dev/md0:
           Version : 1.2
     Creation Time : Mon Nov 30 14:22:01 2020
        Raid Level : raid1
        Array Size : 20953088 (19.98 GiB 21.46 GB)
     Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
      Raid Devices : 2
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Mon Nov 30 23:43:58 2020
             State : clean 
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

Consistency Policy : resync

              Name : raid:0  (local to host raid)
              UUID : 2cd8dc59:68e81ae4:7b2635e8:096721b5
            Events : 65

    Number   Major   Minor   RaidDevice State
       2       8       49        0      active sync   /dev/sdd1
       3       8       17        1      active sync   /dev/sdc1

       4       8       33        -      spare   /dev/sdb1

可以看到 sdb1 处于 spare 状态,也就是备用状态。平时向 md0 写入数据的时候,只会备份到 sdc1、sdd1 里,不会写入到 sdb1 里。当 sdc1 和 sdd1 其中有一块硬盘损坏时,系统会自动启用 sdb1,并将所有资料同步到 sdb1 里。

迁移阵列

如果新组装了一台服务器,想将上一个服务器的阵列迁移到新服务器里,可以通过以下方法完成。

  1. 将硬件添加到新服务器上,然后使用 fdisk 查看磁盘状态。
$ sudo fdisk -l

Disk /dev/md127: 19.101 GiB, 21455962112 bytes, 41906176 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

可以看到系统已经识别了磁盘阵列信息,但是阵列的标识不对。

  1. 保存磁盘阵列信息
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
ARRAY /dev/md/raid:0 metadata=1.2 name=raid:0 UUID=6b08dfa9:ece3957c:f92bcf78:fd2f450f

修改 /etc/mdadm/mdadm.conf 文件,把 /dev/md/raid:0 改成 /dev/md0,保存。

  1. 更新初始RAM文件系统(initramfs)
$ sudo update-initramfs -u
  1. 挂载磁盘

保存挂截信息,修改 /etc/fstab 文件,在文件最后加入以下内容:

/dev/md0    /opt/data   ext4    defaults    0    0

你可能感兴趣的:(Ubuntu 创建 RAID1 阵列)