在本教程中,您将学习如何在 Debian 10 上设置软件 raid。RAID 是独立磁盘冗余阵列的首字母缩写词。 期限 inexpensive
偶尔可以用来代替 independent
. RAID 用于将多个设备/廉价磁盘驱动器组合到一个阵列中,从而产生比一个大而昂贵的驱动器更好的性能。
使用 RAID 的一些主要原因包括:
• 提高传输速度
• 每秒增加的事务数
• 增加了单块设备容量
• 从单个磁盘故障中恢复的效率更高
存在三种可能的 RAID 类型:
- 固件RAID
- 硬件RAID
- 软件RAID。
本指南重点介绍在 Debian 10 上设置软件 RAID。
在 Debian 10 上设置软件 RAID
软件 RAID 用于在内核块设备代码中实现各种 RAID 级别。 Linux 内核包含一个 multiple device (MD)
允许 RAID 解决方案完全独立于硬件的驱动程序。
RAID 级别
可以实施的各种 RAID 级别包括:
突袭等级 0(条纹)
- 对于 RAID 级别 0,数据跨阵列的成员磁盘进行条带化/写入。
- 条带化意味着数据被分解成小块。
- 数据跨阵列的成员驱动器进行条带化。
- 阵列的存储容量等于成员磁盘/分区的容量之和
- RAID 级别 0 提供高 I/O 性能
- 不提供容错功能,因此如果阵列中的一个设备出现故障,则整个阵列都会出现故障。
- 至少需要两个存储设备。
RAID 级别 1(镜像)
- 使用 RAID 级别 1,将数据的镜像副本(相同)写入阵列的每个成员驱动器。
- 提供冗余,从而提供高数据可用性。 如果阵列的驱动器成员之一出现故障,则可以使用其他驱动器中的数据。 当您将另一个磁盘添加到阵列时,现有磁盘上的数据也将复制到新磁盘。
- 一级阵列的存储容量等于硬件 RAID 中最小镜像硬盘或软件 RAID 中最小镜像分区的容量,因此空间效率较低。
- 至少需要两个存储设备。
Raid Level 5 (Striping with Parity)
- 这是最常用的 RAID 级别。
- 至少需要三个存储驱动器/设备。
- 在此级别,数据与奇偶校验信息一起被剥离到阵列中的成员驱动器。 奇偶校验是一种原始二进制数据,其值经过计算后可用于在阵列中的一个驱动器出现故障时从其他驱动器重建条带化数据。
- 提供容错能力。
- 存储容量等于最小成员分区的容量乘以分区数减一。
RAID 级别 6(带双奇偶校验的条带化)
- 与 RAID 级别 5 类似,只是它支持双奇偶校验。
- 它可以承受阵列中的 2 个磁盘故障。
- 至少需要 4 台设备
RAID 级别 10(镜像+剥离)
- RAID 级别 10 结合了级别 0 的性能优势和级别 1 的冗余。
- 通常表示为 RAID 1+0(镜像条带)。
- 至少需要 4 个设备。
- 一半的存储设备用于数据镜像,因此空间效率较低。
- 最昂贵的 RAID 级别,具有较低的可用容量和较高的系统成本。
在 Debian 10 上设置软件 RAID
那么如何在 Debian 10 上设置软件 RAID? 在本教程中,我们将演示如何在 Debian 10 上设置 RAID 级别 1。
在 RAID 磁盘上创建 RAID 分区
要设置 RAID 级别 1,您至少需要两个驱动器/分区。 在我们的演示服务器中,我们已经附加了两个磁盘, /dev/sdb
和 /dev/sdc
每个4GB如下图;
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 15G 0 disk ├─sda1 8:1 0 13G 0 part / ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 2G 0 part [SWAP] sdb 8:16 0 4G 0 disk sdc 8:32 0 4G 0 disk
为了将磁盘用作 RAID 磁盘,您需要在每个磁盘上创建一个 RAID 分区类型。
在这个演示中,我们使用 parted
命令用于此目的。 分手了 默认情况下,Debian 上可能未安装。 因此;
apt install parted
- 设置磁盘上的分区类型。 我们用
msdos
在这个设置中。 如果提示是否删除现有数据,请接受并继续。
parted -a optimal /dev/sdb mklabel msdos
parted -a optimal /dev/sdc mklabel msdos
- 创建分区并设置文件系统类型。
parted -a optimal /dev/sdb mkpart primary ext4 0% 100%
parted -a optimal /dev/sdc mkpart primary ext4 0% 100%
- 将分区设置为软件 RAID 分区。
parted -a optimal /dev/sdb set 1 raid on
parted -a optimal /dev/sdc 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 ext4 raid
在 Debian 10 上设置软件 RAID
现在我们已经设置了两个磁盘,您现在可以继续在 Debian 10 上设置软件 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
:这是一种“其他一切”模式,支持对活动阵列的操作、对组件设备的操作(例如擦除旧超级块)和信息收集操作。- 自动检测 (–auto-detect):此模式不会作用于特定设备或阵列,而是请求 Linux 内核激活任何自动检测到的阵列。
举个例子,让我们看看如何使用我们上面设置的两个磁盘创建 RAID 级别 1。
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd[bc]1
选项;
- -l, –级别= 设置 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 作为由 /dev/sdb1 和 /dev/sdc1 驱动器组成的 RAID1 阵列。
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 : Fri Jun 11 07:13:55 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 : Fri Jun 11 07:14:35 2021 State : clean, resyncing Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Consistency Policy : resync Resync Status : 35% complete Name : debian:0 (local to host debian) UUID : c2afb48c:8391bfc4:41455be3:18ce0c01 Events : 5 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 : c2afb48c:8391bfc4:41455be3:18ce0c01 Name : debian:0 (local to host debian) Creation Time : Fri Jun 11 07:13:55 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 : active Device UUID : 20315496:2688da76:1ce6f030:36585c40 Update Time : Fri Jun 11 07:15:22 2021 Bad Block Log : 512 entries available at offset 16 sectors Checksum : ba07c260 - correct Events : 11 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 : c2afb48c:8391bfc4:41455be3:18ce0c01 Name : debian:0 (local to host debian) Creation Time : Fri Jun 11 07:13:55 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 : active Device UUID : 777754fd:4bef2715:3abb3ae7:cb25d0d1 Update Time : Fri Jun 11 07:15:22 2021 Bad Block Log : 512 entries available at offset 16 sectors Checksum : 7131292 - correct Events : 11 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 级别。- 0 设备行显示阵列的状态、设备上设置的当前 RAID 级别以及阵列中使用的设备。
- 另一行以块为单位表示数组的可用大小
- [n/m] 例如 [2/2] 显示该阵列将有 n 个设备,但目前正在使用 m 个设备。 当 m >= n 时,一切都很好。
- [UU] 表示 RAID 阵列上的两个磁盘都处于 UP 状态。
在 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
在 Debian 10 上挂载软件 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 设备是否可以自动挂载。
因此,如果其中一个磁盘损坏,当您将磁盘重新添加到阵列时,您的数据应该会被恢复!
这标志着我们关于如何在 Debian 10 上设置软件 RAID 的指南的结束。
在 CentOS 8 上安装和设置 GlusterFS 存储集群
在 CentOS 8 上设置 GlusterFS 分布式复制卷
在 Ubuntu 18.04 上安装和配置 Ceph 块设备
在 Ubuntu 18.04 上设置三节点 Ceph 存储集群