介绍
mdadm 实用程序可用于使用 Linux 软件 RAID 功能创建和管理存储阵列,管理员在协调其个别存储设备并创建具有较高的性能或冗余特征的逻辑存储设备方面具有极大的灵活性。
在本指南中,我们将讨论一些可以使用Ubuntu 16.04服务器设置的不同RAID配置。
前提条件
为了完成本指南中的步骤,您应该:
*具有Ubuntu 16.04服务器上`sudo'权限的非源用户 : 本指南的步骤将由一名 " sudo " 用户完成。 要学习如何用这些特权建立一个账户,请遵循我们的Ubuntu 16.04 初始服务器设置指南. *对RAID术语和概念的基本理解 : 虽然本指南将顺便提及一些RAID术语,但更完整的理解非常有用. 为了了解更多关于RAID的信息,并更好地了解RAID的级别适合你,请阅读我们的[介绍RAID文章] (https://andsky.com/tech/tutorials/an-introduction-to-raid-terminology-and-concepts)。 *您服务器上可用的多件原始存储设备 : 我们将演示如何在服务器上配置各种类型的阵列。 因此,您需要一些驱动器来配置 。 .
<$>[info] Info: 由于虚拟私人服务器上的RAID设置效率低下,我们不建议在DigitalOcean dropplets上部署RAID设置。数据中心磁盘复制的效率使RAID的优点与baremetal硬件的设置相比是微不足道的。
重置现有 RAID 设备
在本指南中,我们将介绍创建多个不同 RAID 级别的步骤。如果您希望跟进,您可能会希望在每个部分后重新使用存储设备。本节可以参考,以了解在测试新的 RAID 级别之前如何快速重置组件存储设备。如果您尚未设置任何数组,请暂停此部分。
<$>[警告] [标签警告] 此过程将完全破坏数组和任何写在其上的数据. 请确保您在正确的数组上运行,并在破坏数组之前复制了您需要保留的任何数据。
在 /proc/mdstat
文件中找到活跃的数组,键入:
1cat /proc/mdstat
1[secondary_label Output]
2Personalities : [raid0] [linear] [multipath] [raid1] [raid6] [raid5] [raid4] [raid10]
3md0 : active raid0 sdc[1] sdd[0]
4 209584128 blocks super 1.2 512k chunks
5
6 unused devices: <none>
从文件系统中解除数组:
1sudo umount /dev/md0
然后,停止并通过键入删除数组:
1sudo mdadm --stop /dev/md0
2sudo mdadm --remove /dev/md0
使用以下命令找到用于构建数组的设备:
<$>[注] [标签注] 请记住,在重新启动时,您可以随时更改 `/dev/sd* ’ 名称! 每次检查,以确保您在正确的设备上运行。
1lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
1[secondary_label Output]
2NAME SIZE FSTYPE TYPE MOUNTPOINT
3sda 100G disk
4sdb 100G disk
5sdc 100G linux_raid_member disk
6sdd 100G linux_raid_member disk
7vda 20G disk
8├─vda1 20G ext4 part /
9└─vda15 1M part
在发现用于创建数组的设备后,零他们的超级块,将其重置为正常:
1sudo mdadm --zero-superblock /dev/sdc
2sudo mdadm --zero-superblock /dev/sdd
编辑 /etc/fstab
文件并评论或删除对数组的引用:
1sudo nano /etc/fstab
1[label /etc/fstab]
2. . .
3# /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0
此外,请评论或从 /etc/mdadm/mdadm.conf
文件中删除数组定义:
1sudo nano /etc/mdadm/mdadm.conf
1[label /etc/mdadm/mdadm.conf]
2. . .
3# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=7261fb9c:976d0d97:30bc63ce:85e76e91
最后,再次更新initramfs
:
1sudo update-initramfs -u
在此时,您应该准备好单独或作为不同阵列的组件重新使用存储设备。
创建一个RAID 0 Array
RAID 0 数组通过将数据分解成片段并在可用的磁盘上切断,这意味着每个磁盘包含数据的一部分,并且在获取信息时会引用多个磁盘。
- 要求:最少有 ** 2 个存储设备 * 主要好处:性能 * 要记住的事情:确保您有功能备份。
识别组件设备
要开始,找出您将使用的原始磁盘的标识符:
1lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
1[secondary_label Output]
2NAME SIZE FSTYPE TYPE MOUNTPOINT
3sda 100G disk
4sdb 100G disk
5vda 20G disk
6├─vda1 20G ext4 part /
7└─vda15 1M part
正如您上面所看到的,我们有两个磁盘没有文件系统,每个磁盘大小为100G,在这个例子中,这些设备已经被赋予了这个会话的/dev/sda
和/dev/sdb
标识符。
创建一个 Array
若要使用这些组件创建 RAID 0 阵列,请将它们传输到),RAID 级别和设备数量:
1sudo mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sda /dev/sdb
您可以通过检查 /proc/mdstat
文件来确保 RAID 已成功创建:
1cat /proc/mdstat
1[secondary_label Output]
2Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
3md0 : active raid0 sdb[1] sda[0]
4 209584128 blocks super 1.2 512k chunks
5
6 unused devices: <none>
正如您在突出的行中所看到的那样,在RAID 0配置中,使用/dev/sda
和/dev/sdb
设备创建了/dev/md0
设备。
创建和安装文件系统
接下来,在数组上创建一个文件系统:
1sudo mkfs.ext4 -F /dev/md0
创建一个安装点来附加新文件系统:
1sudo mkdir -p /mnt/md0
您可以通过键入设置文件系统:
1sudo mount /dev/md0 /mnt/md0
检查新空间是否可用通过键入:
1df -h -x devtmpfs -x tmpfs
1[secondary_label Output]
2Filesystem Size Used Avail Use% Mounted on
3/dev/vda1 20G 1.1G 18G 6% /
4/dev/md0 197G 60M 187G 1% /mnt/md0
新的文件系统已安装和可访问。
保存 Array 布局
为了确保在启动时自动重新组装数组,我们需要调整 /etc/mdadm/mdadm.conf
文件,您可以通过键入自动扫描活跃数组并附加文件:
1sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
之后,您可以更新 initramfs 或初始 RAM 文件系统,以便在早期启动过程中可用:
1sudo update-initramfs -u
将新的文件系统安装选项添加到 /etc/fstab
文件中,以便在启动时自动安装:
1echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
RAID 0 阵列现在应该自动组装并安装在每个启动中。
创建一个RAID 1 Array
RAID 1 数组类型是通过在所有可用的磁盘上反映数据来实现的. RAID 1 数组中的每个磁盘都会得到数据的完整副本,在设备故障的情况下提供冗余性。
- **要求:最少2个存储设备 ** 主要好处:冗余性 * 需要记住的事情:由于保留了两个数据副本,只有一半的磁盘空间将可用
识别组件设备
要开始,找出您将使用的原始磁盘的标识符:
1lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
1[secondary_label Output]
2NAME SIZE FSTYPE TYPE MOUNTPOINT
3sda 100G disk
4sdb 100G disk
5vda 20G disk
6├─vda1 20G ext4 part /
7└─vda15 1M part
正如您上面所看到的,我们有两个磁盘没有文件系统,每个磁盘大小为100G,在这个例子中,这些设备已经被赋予了这个会话的/dev/sda
和/dev/sdb
标识符。
创建一个 Array
若要使用这些组件创建 RAID 1 阵列,请将它们传输到),RAID 级别和设备数量:
1sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda /dev/sdb
如果您正在使用的组件设备不是启用启动
标志的分区,您可能会收到以下警告。
1[secondary_label Output]
2mdadm: Note: this array has metadata at the start and
3 may not be suitable as a boot device. If you plan to
4 store '/boot' on this device please ensure that
5 your boot-loader understands md/v1.x metadata, or use
6 --metadata=0.90
7mdadm: size set to 104792064K
8Continue creating array? y
mdadm
工具将开始镜像驱动器,这可能需要一段时间才能完成,但在这个时候可以使用数组。您可以通过检查/proc/mdstat
文件来监控镜像的进展:
1cat /proc/mdstat
1[secondary_label Output]
2Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
3md0 : active raid1 sdb[1] sda[0]
4 104792064 blocks super 1.2 [2/2] [UU]
5 [====>................] resync = 20.2% (21233216/104792064) finish=6.9min speed=199507K/sec
6
7unused devices: <none>
正如你可以在第一行中看到的那样,在 RAID 1 配置中创建了 /dev/md0 设备,使用
/dev/sda’ 和 `/dev/sdb 设备。
创建和安装文件系统
接下来,在数组上创建一个文件系统:
1sudo mkfs.ext4 -F /dev/md0
创建一个安装点来附加新文件系统:
1sudo mkdir -p /mnt/md0
您可以通过键入设置文件系统:
1sudo mount /dev/md0 /mnt/md0
检查新空间是否可用通过键入:
1df -h -x devtmpfs -x tmpfs
1[secondary_label Output]
2Filesystem Size Used Avail Use% Mounted on
3/dev/vda1 20G 1.1G 18G 6% /
4/dev/md0 99G 60M 94G 1% /mnt/md0
新的文件系统已安装和可访问。
保存 Array 布局
为了确保在启动时自动重新组装数组,我们需要调整 /etc/mdadm/mdadm.conf
文件,您可以通过键入自动扫描活跃数组并附加文件:
1sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
之后,您可以更新 initramfs 或初始 RAM 文件系统,以便在早期启动过程中可用:
1sudo update-initramfs -u
将新的文件系统安装选项添加到 /etc/fstab
文件中,以便在启动时自动安装:
1echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
您的 RAID 1 阵列现在应该自动组装和安装每个启动。
创建一个RAID 5 Array
RAID 5 数组类型是通过在可用的设备上切断数据来实现的。每个数组的一个组件是计算的对等性块。如果一个设备失败,则可以使用对等性块和剩余的块来计算缺少的数据。
- 要求:最少3个存储设备 * 主要好处:具有更大可用容量的冗余性 * 需要记住的事情:虽然平等信息分布,但一个磁盘的容量值将用于平等性。
识别组件设备
要开始,找出您将使用的原始磁盘的标识符:
1lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
1[secondary_label Output]
2NAME SIZE FSTYPE TYPE MOUNTPOINT
3sda 100G disk
4sdb 100G disk
5sdc 100G disk
6vda 20G disk
7├─vda1 20G ext4 part /
8└─vda15 1M part
正如您上面所看到的,我们有三个没有文件系统的磁盘,每个磁盘大小为100G,在这个例子中,这些设备被赋予了这个会话的 /dev/sda
、 /dev/sdb
和 /dev/sdc
标识符。
创建一个 Array
要使用这些组件创建 RAID 5 阵列,请将它们传输到),RAID 级别和设备数量:
1sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sda /dev/sdb /dev/sdc
mdadm 工具将开始配置数组(实际上使用恢复过程来构建数组出于性能原因)。这可能需要一段时间才能完成,但数组可以在此期间使用。
1cat /proc/mdstat
1[secondary_label Output]
2Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
3md0 : active raid5 sdc[3] sdb[1] sda[0]
4 209584128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
5 [===>.................] recovery = 15.6% (16362536/104792064) finish=7.3min speed=200808K/sec
6
7unused devices: <none>
正如你可以在第一行中看到的那样,在 RAID 5 配置中使用 /dev/sda
、 /dev/sdb 和
/dev/sdc 设备创建了 `/dev/md0 设备。
创建和安装文件系统
接下来,在数组上创建一个文件系统:
1sudo mkfs.ext4 -F /dev/md0
创建一个安装点来附加新文件系统:
1sudo mkdir -p /mnt/md0
您可以通过键入设置文件系统:
1sudo mount /dev/md0 /mnt/md0
检查新空间是否可用通过键入:
1df -h -x devtmpfs -x tmpfs
1[secondary_label Output]
2Filesystem Size Used Avail Use% Mounted on
3/dev/vda1 20G 1.1G 18G 6% /
4/dev/md0 197G 60M 187G 1% /mnt/md0
新的文件系统已安装和可访问。
保存 Array 布局
为了确保在启动时自动重新组装数组,我们需要调整 /etc/mdadm/mdadm.conf
文件。
在调整配置之前,请再次检查,以确保数组已完成组装。由于mdadm
构建 RAID 5 数组的方式,如果数组仍在构建,则数组中的数组数量将被错误地报告:
1cat /proc/mdstat
1[secondary_label Output]
2Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
3md0 : active raid5 sdc[3] sdb[1] sda[0]
4 209584128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
5
6unused devices: <none>
上面的输出显示重建完成了,现在我们可以通过键入自动扫描活跃的数组并附加文件:
1sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
之后,您可以更新 initramfs 或初始 RAM 文件系统,以便在早期启动过程中可用:
1sudo update-initramfs -u
将新的文件系统安装选项添加到 /etc/fstab
文件中,以便在启动时自动安装:
1echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
RAID 5 阵列现在应该自动组装并安装在每个启动中。
创建一个RAID 6 Array
RAID 6 数组类型是通过在可用的设备上切断数据来实现的。每个数组的两个组件是计算的对等性块。如果一个或两个设备失败,则可以使用对等性块和剩余的块来计算缺失的数据。接收对等性块的设备会被旋转,以便每个设备有平衡的对等性信息。
- 要求:最少4个存储设备 * 主要好处:具有更大可用容量的双重冗余性 * 需要记住的事情:虽然平等信息被分布,但两个磁盘的容量值将用于平等性。
识别组件设备
要开始,找出您将使用的原始磁盘的标识符:
1lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
1[secondary_label Output]
2NAME SIZE FSTYPE TYPE MOUNTPOINT
3sda 100G disk
4sdb 100G disk
5sdc 100G disk
6sdd 100G disk
7vda 20G disk
8├─vda1 20G ext4 part /
9└─vda15 1M part
正如您上面所看到的,我们有四个磁盘没有文件系统,每个磁盘大小为100G,在这个例子中,这些设备被赋予了这个会话的 /dev/sda
, /dev/sdb
, /dev/sdc
和 /dev/sdd
标识符。
创建一个 Array
要用这些组件创建一个 RAID 6 阵列,请将它们传递到),RAID 级别和设备数量:
1sudo mdadm --create --verbose /dev/md0 --level=6 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd
mdadm 工具将开始配置数组(实际上使用恢复过程来构建数组出于性能原因)。这可能需要一段时间才能完成,但数组可以在此期间使用。
1cat /proc/mdstat
1[secondary_label Output]
2Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
3md0 : active raid6 sdd[3] sdc[2] sdb[1] sda[0]
4 209584128 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]
5 [>....................] resync = 0.6% (668572/104792064) finish=10.3min speed=167143K/sec
6
7unused devices: <none>
正如你可以在第一行中看到的那样,在 RAID 6 配置中使用 /dev/sda
、 /dev/sdb、
/dev/sdc 和 /dev/sdd 设备创建了
/dev/md0 设备。
创建和安装文件系统
接下来,在数组上创建一个文件系统:
1sudo mkfs.ext4 -F /dev/md0
创建一个安装点来附加新文件系统:
1sudo mkdir -p /mnt/md0
您可以通过键入设置文件系统:
1sudo mount /dev/md0 /mnt/md0
检查新空间是否可用通过键入:
1df -h -x devtmpfs -x tmpfs
1[secondary_label Output]
2Filesystem Size Used Avail Use% Mounted on
3/dev/vda1 20G 1.1G 18G 6% /
4/dev/md0 197G 60M 187G 1% /mnt/md0
新的文件系统已安装和可访问。
保存 Array 布局
为了确保在启动时自动重新组装数组,我们需要调整 /etc/mdadm/mdadm.conf
文件,我们可以通过键入自动扫描活跃数组并附加文件:
1sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
之后,您可以更新 initramfs 或初始 RAM 文件系统,以便在早期启动过程中可用:
1sudo update-initramfs -u
将新的文件系统安装选项添加到 /etc/fstab
文件中,以便在启动时自动安装:
1echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
您的 RAID 6 阵列现在应该自动组装和安装每个启动。
创建一个复杂的RAID 10 Array
RAID 10 数组类型传统上是通过创建由 RAID 1 数组组组成的 RAID 0 数组来实现的。 这种嵌入式数组类型既提供冗余性和高性能,以代价大量磁盘空间。 mdadm
实用程序有自己的 RAID 10 类型,它提供了相同类型的优点,具有增加的灵活性。 它不是由嵌入式数组创建的,但具有许多相同的特性和保证。
- 要求:最少3个存储设备 * 主要好处:性能和冗余 * 需要记住的事情: 数组的容量减少量由您选择保留的数据副本数量定义。
默认情况下,每个数据块的两份副本将被存储在所谓的接近
布局中。
*靠近 :默认安排。 每个块的副本在条纹时会相继被写入,这意味着数据块的副本会被写在多盘的同一部分. *far :第一批和后一批副本被写到数组存储设备的不同部分。 例如,第一个块可能写在磁盘开头处,而第二个块则会写到不同磁盘下半个方向。 这可以给传统旋转磁盘带来一些读取性能的增益而以写入性能为代价. *抵消 :每条条条被复制,由一盘相冲。 这意味着拷贝相互相抵,但在磁盘上仍然紧密相接. 这有助于在有些工作量期间尽量减少过度寻求。 .
您可以通过查看这个男人
页面的RAID10
部分来了解更多这些布局:
1man 4 md
您也可以在网上找到这个)。
识别组件设备
要开始,找出您将使用的原始磁盘的标识符:
1lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
1[secondary_label Output]
2NAME SIZE FSTYPE TYPE MOUNTPOINT
3sda 100G disk
4sdb 100G disk
5sdc 100G disk
6sdd 100G disk
7vda 20G disk
8├─vda1 20G ext4 part /
9└─vda15 1M part
正如您上面所看到的,我们有四个磁盘没有文件系统,每个磁盘大小为100G,在这个例子中,这些设备被赋予了这个会话的 /dev/sda
, /dev/sdb
, /dev/sdc
和 /dev/sdd
标识符。
创建一个 Array
若要使用这些组件创建 RAID 10 阵列,请将它们传输到),RAID 级别和设备数量。
您可以使用附近布局设置两个副本,而不指定布局和副本号码:
1sudo mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd
如果您想使用不同的布局,或更改副本数量,您将需要使用 --layout=
选项,该选项需要布局和副本标识符。
例如,如果要创建具有 3 个副本的数组,该命令将看起来像这样:
1sudo mdadm --create --verbose /dev/md0 --level=10 --layout=o3 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd
mdadm 工具将开始配置数组(实际上使用恢复过程来构建数组出于性能原因)。这可能需要一段时间才能完成,但数组可以在此期间使用。
1cat /proc/mdstat
1[secondary_label Output]
2Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
3md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
4 209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
5 [===>.................] resync = 18.1% (37959424/209584128) finish=13.8min speed=206120K/sec
6
7unused devices: <none>
正如您在第一行中看到的,在 RAID 10 配置中,使用 /dev/sda
、 /dev/sdb、
/dev/sdc 和 /dev/sdd 设备创建了
/dev/md0 设备。第二个突出区域显示了用于本示例的布局(附近配置中的 2 个副本)。
创建和安装文件系统
接下来,在数组上创建一个文件系统:
1sudo mkfs.ext4 -F /dev/md0
创建一个安装点来附加新文件系统:
1sudo mkdir -p /mnt/md0
您可以通过键入设置文件系统:
1sudo mount /dev/md0 /mnt/md0
检查新空间是否可用通过键入:
1df -h -x devtmpfs -x tmpfs
1[secondary_label Output]
2Filesystem Size Used Avail Use% Mounted on
3/dev/vda1 20G 1.1G 18G 6% /
4/dev/md0 197G 60M 187G 1% /mnt/md0
新的文件系统已安装和可访问。
保存 Array 布局
为了确保在启动时自动重新组装数组,我们需要调整 /etc/mdadm/mdadm.conf
文件,我们可以通过键入自动扫描活跃数组并附加文件:
1sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
之后,您可以更新 initramfs 或初始 RAM 文件系统,以便在早期启动过程中可用:
1sudo update-initramfs -u
将新的文件系统安装选项添加到 /etc/fstab
文件中,以便在启动时自动安装:
1echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
RAID 10 阵列现在应该自动组装并安装在每个启动中。
结论
在本指南中,我们展示了如何使用Linux的mdadm
软件RAID实用程序创建各种类型的数组。
一旦您确定了您环境所需的数组类型并创建了设备,您将需要学习如何使用 mdadm
进行日常管理。我们关于 如何在 Ubuntu 16.04 上使用 mdadm
管理 RAID 数组的指南的指南可以帮助您开始。