美文网首页高效运维
Ubuntu 创建 RAID1 阵列

Ubuntu 创建 RAID1 阵列

作者: alan_yeh | 来源:发表于2020-12-03 20:09 被阅读0次

    概述

    目标:

    • 将两个,或两个以上的磁盘,创建 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: <none>
    
    

    创建完毕后,信息如下,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: <none>
    

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

    $ 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: <none>
    

    可以看到,原本 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: <none>
    

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

    $ 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 阵列

        本文链接:https://www.haomeiwen.com/subject/fyrjwktx.html