Ubuntu 20.04上的安装软件RAID

在本教程中,您将学习如何在Ubuntu 20.04上设置软件RAID。 RAID是独立磁盘冗余阵列的首字母缩写。术语 inexpensive 有时可以代替 independent。 RAID是将多个设备/廉价磁盘驱动器组合成一个阵列,其性能要优于一个大型且昂贵的驱动器。

使用RAID的一些主要原因包括:

•更快的传输速度•每秒增加的事务数量•增加了单个块设备的容量•从单个磁盘故障中恢复的效率更高

RAID有三种可能的类型:固件RAID,硬件RAID和软件RAID。本指南重点介绍在Ubuntu 20.04上设置软件RAID。

Ubuntu 20.04上的安装软件RAID

软件RAID用于在内核块设备代码中实现各种RAID级别。 Linux内核包含一个 multiple device (MD) 允许RAID解决方案完全独立于硬件的驱动程序。

RAID级别

可以实现的各种RAID级别包括:

突袭等级0(剥离)

  • 在RAID级别0下,数据在阵列的成员磁盘上进行条带化/写入。
  • 条带化意味着数据被分解成小块。
  • 数据在阵列的成员驱动器上进行条带化。
  • 阵列的存储容量等于成员磁盘/分区的容量之和
  • RAID级别0提供了很高的I / O性能
  • 不提供容错能力,因此,如果阵列中的一台设备发生故障,则整个阵列都会发生故障。
  • 至少需要两个存储设备。

RAID级别1(镜像)

  • 在RAID级别1中,数据的镜像副本(相同)被写入阵列的每个成员驱动器。
  • 提供冗余,因此具有高数据可用性。如果阵列的一个驱动器成员发生故障,则可以使用其他驱动器中的数据。
  • 1级阵列的存储容量等于硬件RAID中最小的镜像硬盘或软件RAID中最小的镜像分区的容量,因此空间效率较低。
  • 至少需要两个存储设备。

突袭等级5(带奇偶校验条带化)

  • 这是最常用的RAID级别。
  • 至少需要三个存储驱动器/设备。
  • 在此级别,数据与奇偶校验信息一起在阵列中的成员驱动器上剥离。奇偶校验是原始二进制数据,其值是经过计算的,因此,如果阵列中的一个驱动器发生故障,它可用于从其他驱动器重建条带化数据。
  • 提供容错能力。
  • 存储容量等于最小成员分区的容量乘以分区数减一。

RAID级别6(带双奇偶校验的条带化)

  • 与RAID 5类似,不同之处在于它支持双重奇偶校验。
  • 它可以承受阵列中的2个磁盘故障。
  • 至少需要4台设备

RAID级别10(镜像+剥离)

  • RAID级别10结合了级别0的性能优势和级别1的冗余。
  • 通常表示为RAID 1 + 0(镜像条带)。
  • 至少需要4台设备。
  • 一半的存储设备用于数据镜像,因此空间效率较低。
  • RAID级别中最昂贵的磁盘,具有较低的可用容量和较高的系统成本。

Ubuntu 20.04上的安装软件RAID

那么,如何在Ubuntu 20.04上设置软件RAID?在本教程中,我们将演示如何在Ubuntu 20.04上设置RAID 1。

创建RAID分区

要设置RAID 1,至少需要两个驱动器/分区。在演示服务器中,我们已经连接了两个磁盘, /dev/sdb/dev/sdc 每个4GB,如下所示;

lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   20G  0 disk 
├─sda1   8:1    0    1M  0 part 
└─sda2   8:2    0   20G  0 part /
sdb      8:16   0    4G  0 disk 
sdc      8:32   0    4G  0 disk 

为了将磁盘用作RAID磁盘,您需要在每个磁盘上创建RAID分区类型。在本演示中,我们使用 parted 为此目的的命令。

  • 设置磁盘上的分区类型。我们用 msdos 在此设置中。
parted -a optimal /dev/sdb mklabel msdos
  • 创建分区并设置文件系统类型。
parted -a optimal /dev/sdb mkpart primary ext4 0% 100%
  • 将该分区设置为软件RAID分区。
parted -a optimal /dev/sdb set 1 raid on
  • 显示分区表。
parted -a optimal /dev/sdb print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 4295MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  4295MB  4294MB  primary               raid

对其他磁盘重复相同的操作。

parted -a optimal /dev/sdc print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 4295MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  4295MB  4294MB  primary               raid

Ubuntu 20.04上的安装软件RAID

现在我们已经设置了两个磁盘,现在您可以继续在Ubuntu 20.04上设置软件RAID。

在继续之前,请确保您已经 mdadm 软件包已安装。 mdadm 是可用于管理MD设备(即Linux软件RAID)的实用程序。

检查软件包是否已安装。

apt list -a mdadm
Listing... Done
mdadm/focal,now 4.1-5ubuntu1 amd64 [installed,automatic]

如果未安装,则可以通过运行以下命令进行安装;否则,请执行以下步骤。

apt install mdadm

的基本命令行语法 mdadm 逗号是

mdadm [mode] <raiddevice> [options] <component-devices>

[mode] 指定任何主要的mdadm操作模式,可以是以下其中一种;

  • Assemble (-A, --assemble):将先前创建的数组的组件组装到活动数组中。
  • Build (-B, --build):构建一个不包含每个设备元数据(超级块)的数组。
  • Create (-C, --create):使用每个设备的元数据(超级块)创建一个新的数组。
  • Follow/Monitor (-F, --follow, --monitor):监视一个或多个md设备并根据状态变化采取行动。这仅对RAID1、4、5、6、10或多路径阵列有意义。
  • Grow (-G, --grow):增大(或缩小)数组,或以其他方式对其进行整形。
  • Incremental Assembly (-I, --incremental):将单个设备添加到适当的阵列。
  • Manage:这用于处理阵列的特定组件,例如添加新的备用组件和删除有故障的设备。
  • Misc:这是一种“其他所有”模式,支持对活动阵列的操作,对组件设备的操作(如擦除旧的超级块)以及信息收集操作。
  • 自动检测(–自动检测)注意:此模式不适用于特定的设备或阵列,而是请求Linux内核激活任何自动检测到的阵列。

因此,以一个示例为例,让我们看看如何使用上面设置的两个磁盘来创建RAID 1级。

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd[bc]1

选项;

  • -l,–level = 设置RAID级别,可以是以下级别之一: 线性,raid0、0,条带,raid1、1,镜像,raid4、4,raid5、5,raid6、6,raid10、10,多路径
  • -n,–raid-devices = 指定阵列中活动设备的数量。

使用简短的命令行选项;

mdadm -C /dev/md0 -l raid1 -n=2 /dev/sd[bc]1

有关其他命令行选项,请咨询, man mdadm

上面的命令创建一个/ dev / md0作为RAID1阵列,该阵列由/ 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
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

检查RAID的状态;

mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Tue Apr 13 19:55:07 2021
        Raid Level : raid1
        Array Size : 4190208 (4.00 GiB 4.29 GB)
     Used Dev Size : 4190208 (4.00 GiB 4.29 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Tue Apr 13 19:55:27 2021
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : ubuntu20:0  (local to host ubuntu20)
              UUID : 244a7fd9:d6fcc210:9b559249:df999270
            Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1

列出有关每个RAID设备的详细信息;

mdadm --examine /dev/sd[bc]1
/dev/sdb1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 244a7fd9:d6fcc210:9b559249:df999270
           Name : ubuntu20:0  (local to host ubuntu20)
  Creation Time : Tue Apr 13 19:55:07 2021
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 8380416 (4.00 GiB 4.29 GB)
     Array Size : 4190208 (4.00 GiB 4.29 GB)
    Data Offset : 6144 sectors
   Super Offset : 8 sectors
   Unused Space : before=6064 sectors, after=0 sectors
          State : clean
    Device UUID : 22f6feda:9f7fbafc:a35dc2d5:441cd0b5

    Update Time : Tue Apr 13 19:55:27 2021
  Bad Block Log : 512 entries available at offset 16 sectors
       Checksum : 117b4439 - correct
         Events : 17


   Device Role : Active device 0
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdc1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 244a7fd9:d6fcc210:9b559249:df999270
           Name : ubuntu20:0  (local to host ubuntu20)
  Creation Time : Tue Apr 13 19:55:07 2021
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 8380416 (4.00 GiB 4.29 GB)
     Array Size : 4190208 (4.00 GiB 4.29 GB)
    Data Offset : 6144 sectors
   Super Offset : 8 sectors
   Unused Space : before=6064 sectors, after=0 sectors
          State : clean
    Device UUID : 082b5c2f:c9ebaa8a:90e23cf0:d12db68d

    Update Time : Tue Apr 13 19:55:27 2021
  Bad Block Log : 512 entries available at offset 16 sectors
       Checksum : e6297bc2 - correct
         Events : 17


   Device Role : Active device 1
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)

您也可以通过运行以下命令检查状态;

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

从上面的输出;

  • Personalities 一行显示了内核当前支持的RAID级别。
  • md设备行显示了阵列的状态,该设备上设置的当前RAID级别以及该阵列中使用的设备。
  • 另一行表示该数组的可用大小(以块为单位)
  • [n/m] 例如 [2/2] 显示该阵列将有n个设备,但是当前有m个设备在使用中。当m> = n时,情况就很好了。

阅读更多内容 Mdstat页面

在RAID设备上创建文件系统

创建RAID设备后,需要在其上创建一个文件系统以供挂载和使用。

请注意,如上所示,我们创建了RAID 1,它将两个4G磁盘合并为一个4G磁盘。

因此,要在md0设备上创建文件系统,然后运行以下命令在RAID设备上创建ext4文件系统。

mkfs.ext4 /dev/md0
mke2fs 1.45.5 (07-Jan-2020)
Creating filesystem with 1047552 4k blocks and 262144 inodes
Filesystem UUID: 97240b9e-8286-49fe-a304-a98bd3f66c42
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

挂载软件RAID设备

现在,您可以将RAID设备安装在方便的位置。

mount /dev/md0 /mnt/

确认安装;

df -hT -P /mnt/
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/md0       ext4  3.9G   16M  3.7G   1% /mnt

要在启动时自动挂载设备,请更新 /etc/fstab 通过添加与以下内容相似的行来进行归档;

/dev/md0 /mnt ext4 defaults 0 0

另外,您需要更新 /etc/mdadm/mdadm.conf 通过创建一个原型配置文件来描述当前活动的阵列,这些阵列是已知的使用IDE或SCSI驱动器的分区制成的阵列 mdadm --detail --scan 命令

mdadm --detail --scan
ARRAY /dev/md0 metadata=1.2 name=ubuntu20:0 UUID=244a7fd9:d6fcc210:9b559249:df999270

将信息写入 mdadm.conf,然后运行;

mdadm --detail --scan >> /etc/mdadm/mdadm.conf

一旦您更新了 mdadm.conf,然后可以更新initramfs。

update-initramfs -u

完成后,更新initramfs,您可以重新引导系统以确认RAID设备是否可以自动安装。

这标志着我们关于如何在Ubuntu 20.04上设置软件RAID的指南的结尾。

其他教程

在CentOS 8上安装和设置GlusterFS存储集群

在CentOS 8上设置GlusterFS分布式复制卷

在Ubuntu 18.04上安装和配置Ceph块设备

在Ubuntu 18.04上设置三节点Ceph存储集群

Sidebar