介绍
该mdadm
实用程序可用于创建和管理使用Linux的软件RAID功能的存储阵列。 管理员在协调其各个存储设备和创建具有更高性能或冗余特性的逻辑存储设备方面具有极大的灵活性。
在本指南中,我们将介绍一些可以使用Ubuntu 16.04服务器设置的不同RAID配置。
先决条件
为了完成本指南中的步骤,您应该具有:
- 与非root用户
sudo
在Ubuntu 16.04服务器上权限 :本指南中的步骤将与完成sudo
用户。 要了解如何建立一个帐户拥有这些权限的,按照我们的Ubuntu 16.04服务器初始设置指南 。 - RAID术语和概念的一个基本的了解 :虽然本指南将触及顺带一些RAID术语,更全面的理解是非常有用的。 要了解更多关于RAID和得到更好地了解RAID级别适合您,请阅读我们的介绍RAID的文章 。
- 您的服务器上可用多个RAW存储设备 :我们将展示如何配置不同类型的服务器上的阵列。 因此,您将需要一些驱动器进行配置。 如果你正在使用DigitalOcean,您可以使用块存储卷填补了这一角色。 根据数组类型,则需要两个四个存储设备之间的最小。
重置现有RAID设备
在本指南中,我们将介绍创建多个不同RAID级别的步骤。 如果您想继续操作,您可能希望在每个部分后重复使用您的存储设备。 可以参考本节了解如何在测试新的RAID级别之前快速重置组件存储设备。 如果您尚未设置任何数组,请跳过此部分。
发现在该主动阵列/proc/mdstat
通过键入文件:
cat /proc/mdstat
OutputPersonalities : [raid0] [linear] [multipath] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid0 sdc[1] sdd[0]
209584128 blocks super 1.2 512k chunks
unused devices: <none>
从文件系统卸载阵列:
sudo umount /dev/md0
然后,通过键入以下内容停止并删除数组:
sudo mdadm --stop /dev/md0
sudo mdadm --remove /dev/md0
使用以下命令查找用于构建阵列的设备:
/dev/sd*
名称可以改变你重启的任何时间!
每次检查它们,以确保您在正确的设备上操作。
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
OutputNAME SIZE FSTYPE TYPE MOUNTPOINT
sda 100G disk
sdb 100G disk
sdc 100G linux_raid_member disk
sdd 100G linux_raid_member disk
vda 20G disk
├─vda1 20G ext4 part /
└─vda15 1M part
发现用于创建阵列的设备后,将其超级块归零以将其重置为正常:
sudo mdadm --zero-superblock /dev/sdc
sudo mdadm --zero-superblock /dev/sdd
您应该删除对数组的任何持久引用。 编辑/etc/fstab
的文件和注释掉或删除提及阵列:
sudo nano /etc/fstab
. . .
# /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0
此外,注释掉或删除该数组定义/etc/mdadm/mdadm.conf
文件:
sudo nano /etc/mdadm/mdadm.conf
. . .
# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=7261fb9c:976d0d97:30bc63ce:85e76e91
最后,更新initramfs
一次:
sudo update-initramfs -u
此时,您应该准备好单独重复使用存储设备,或作为不同阵列的组件。
创建RAID 0阵列
RAID 0阵列通过将数据分成块并在可用磁盘上条带化来工作。 这意味着每个磁盘包含一部分数据,并且在检索信息时将引用多个磁盘。
- 要求:至少2存储设备
- 主要好处:性能
- 注意事项:确保您具有功能备份。 单个设备故障将破坏阵列中的所有数据。
标识组件设备
要开始,请找到要使用的原始磁盘的标识符:
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
OutputNAME SIZE FSTYPE TYPE MOUNTPOINT
sda 100G disk
sdb 100G disk
vda 20G disk
├─vda1 20G ext4 part /
└─vda15 1M part
如上所示,我们有两个磁盘没有文件系统,每个大小为100G。 在这个例子中,这些设备被赋予了/dev/sda
,并/dev/sdb
这个会话标识符。 这些将是我们将用来构建数组的原始组件。
创建数组
要创建RAID 0阵列,这些部件,通过他们给mdadm --create
命令。 您必须指定要创建(设备名称/dev/md0
在我们的例子),RAID级别和设备的数量:
sudo mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sda /dev/sdb
您可以确保RAID已成功通过检查创建/proc/mdstat
文件:
cat /proc/mdstat
OutputPersonalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid0 sdb[1] sda[0]
209584128 blocks super 1.2 512k chunks
unused devices: <none>
正如你可以在高亮行看到, /dev/md0
设备已在使用的RAID 0配置中创建/dev/sda
,并/dev/sdb
设备。
创建并安装文件系统
接下来,在数组上创建一个文件系统:
sudo mkfs.ext4 -F /dev/md0
创建挂接点以附加新的文件系统:
sudo mkdir -p /mnt/md0
您可以通过键入以下命令安装文件系统:
sudo mount /dev/md0 /mnt/md0
通过键入以下内容检查新空间是否可用:
df -h -x devtmpfs -x tmpfs
OutputFilesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 1.1G 18G 6% /
/dev/md0 197G 60M 187G 1% /mnt/md0
新文件系统已装入并可访问。
保存数组布局
为了确保阵列在开机时自动重新组合,我们将不得不调整/etc/mdadm/mdadm.conf
文件。 您可以自动扫描活动阵列并通过键入以下内容附加文件:
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
之后,您可以更新initramfs或初始RAM文件系统,以便阵列在早期引导过程中可用:
sudo update-initramfs -u
添加新的文件系统安装选项添加到/etc/fstab
的文件进行自动在启动安装:
echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
现在,您的RAID 0阵列应在每次启动时自动组装和安装。
创建RAID 1阵列
RAID 1阵列类型通过在所有可用磁盘之间镜像数据来实现。 RAID 1阵列中的每个磁盘都会获取数据的完整副本,从而在设备发生故障时提供冗余。
- 要求:至少2存储设备
- 主要好处:冗余
- 注意事项:由于维护了两个数据副本,因此只有一半的磁盘空间可用
标识组件设备
要开始,请找到要使用的原始磁盘的标识符:
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
OutputNAME SIZE FSTYPE TYPE MOUNTPOINT
sda 100G disk
sdb 100G disk
vda 20G disk
├─vda1 20G ext4 part /
└─vda15 1M part
如上所示,我们有两个磁盘没有文件系统,每个大小为100G。 在这个例子中,这些设备被赋予了/dev/sda
,并/dev/sdb
这个会话标识符。 这些将是我们将用来构建数组的原始组件。
创建数组
要创建RAID 1阵列与这些组件,在将它们传递给mdadm --create
命令。 您必须指定要创建(设备名称/dev/md0
在我们的例子),RAID级别和设备的数量:
sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda /dev/sdb
如果您正在使用该组件的设备不符合分区boot
启用标志,你可能会被给予下列警告。 它是安全的键入y继续:
Outputmdadm: 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 104792064K
Continue creating array? y
该mdadm
工具将开始镜像的驱动器。 这可能需要一些时间才能完成,但在此期间可以使用数组。 您可以监视通过检查镜像进度/proc/mdstat
文件:
cat /proc/mdstat
OutputPersonalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb[1] sda[0]
104792064 blocks super 1.2 [2/2] [UU]
[====>................] resync = 20.2% (21233216/104792064) finish=6.9min speed=199507K/sec
unused devices: <none>
正如你可以在第一时间看到高亮线, /dev/md0
设备已在使用的RAID 1配置创建/dev/sda
,并/dev/sdb
设备。 第二个突出显示的行显示镜像的进度。 在此过程完成时,您可以继续该指南。
创建并安装文件系统
接下来,在数组上创建一个文件系统:
sudo mkfs.ext4 -F /dev/md0
创建挂接点以附加新的文件系统:
sudo mkdir -p /mnt/md0
您可以通过键入以下命令安装文件系统:
sudo mount /dev/md0 /mnt/md0
通过键入以下内容检查新空间是否可用:
df -h -x devtmpfs -x tmpfs
OutputFilesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 1.1G 18G 6% /
/dev/md0 99G 60M 94G 1% /mnt/md0
新文件系统已装入并可访问。
保存数组布局
为了确保阵列在开机时自动重新组合,我们将不得不调整/etc/mdadm/mdadm.conf
文件。 您可以自动扫描活动阵列并通过键入以下内容附加文件:
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
之后,您可以更新initramfs或初始RAM文件系统,以便阵列在早期引导过程中可用:
sudo update-initramfs -u
添加新的文件系统安装选项添加到/etc/fstab
的文件进行自动在启动安装:
echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
现在,您的RAID 1阵列现在将自动组装并安装每个引导。
创建RAID 5阵列
RAID 5阵列类型通过在可用设备上分割数据来实现。 每个条带的一个分量是计算的奇偶校验块。 如果设备发生故障,则奇偶校验块和剩余的块可用于计算丢失的数据。 接收奇偶校验块的设备被旋转,使得每个设备具有平衡量的奇偶校验信息。
- 要求:至少3个存储设备
- 主要优点:具有更多可用容量的冗余。
- 要记住的事项:当奇偶校验信息分布时,一个磁盘的容量将用于奇偶校验。 RAID 5在处于降级状态时可能遭受非常差的性能。
标识组件设备
要开始,请找到要使用的原始磁盘的标识符:
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
OutputNAME SIZE FSTYPE TYPE MOUNTPOINT
sda 100G disk
sdb 100G disk
sdc 100G disk
vda 20G disk
├─vda1 20G ext4 part /
└─vda15 1M part
如上所示,我们有三个没有文件系统的磁盘,每个磁盘的大小为100G。 在这个例子中,这些设备被赋予了/dev/sda
, /dev/sdb
,并/dev/sdc
此会话标识符。 这些将是我们将用来构建数组的原始组件。
创建数组
要创建RAID 5阵列与这些组件,在将它们传递给mdadm --create
命令。 您必须指定要创建(设备名称/dev/md0
在我们的例子),RAID级别和设备的数量:
sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sda /dev/sdb /dev/sdc
该mdadm
工具将开始配置阵列(它实际上使用回收工艺打造出于性能考虑数组)。 这可能需要一些时间才能完成,但在此期间可以使用数组。 您可以监视通过检查镜像进度/proc/mdstat
文件:
cat /proc/mdstat
OutputPersonalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid5 sdc[3] sdb[1] sda[0]
209584128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[===>.................] recovery = 15.6% (16362536/104792064) finish=7.3min speed=200808K/sec
unused devices: <none>
正如你在第一个突出显示的行看到, /dev/md0
设备已在RAID 5配置中使用创建/dev/sda
, /dev/sdb
和/dev/sdc
设备。 第二个突出显示的行显示构建的进度。 在此过程完成时,您可以继续该指南。
创建并安装文件系统
接下来,在数组上创建一个文件系统:
sudo mkfs.ext4 -F /dev/md0
创建挂接点以附加新的文件系统:
sudo mkdir -p /mnt/md0
您可以通过键入以下命令安装文件系统:
sudo mount /dev/md0 /mnt/md0
通过键入以下内容检查新空间是否可用:
df -h -x devtmpfs -x tmpfs
OutputFilesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 1.1G 18G 6% /
/dev/md0 197G 60M 187G 1% /mnt/md0
新文件系统已装入并可访问。
保存数组布局
为了确保阵列在开机时自动重新组合,我们将不得不调整/etc/mdadm/mdadm.conf
文件。
在调整配置之前,请再次检查以确保阵列已完成组装。 正因为如此方式mdadm
建立RAID 5阵列,如果阵列仍建设,在阵列中的备件的数量将不准确报道:
cat /proc/mdstat
OutputPersonalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid5 sdc[3] sdb[1] sda[0]
209584128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
上面的输出显示重建完成。 现在,我们可以自动扫描活动数组,并通过键入以下内容附加文件:
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
之后,您可以更新initramfs或初始RAM文件系统,以便阵列在早期引导过程中可用:
sudo update-initramfs -u
添加新的文件系统安装选项添加到/etc/fstab
的文件进行自动在启动安装:
echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
您的RAID 5阵列现在应该自动组装和安装每个引导。
创建RAID 6阵列
RAID 6阵列类型通过在可用设备上分割数据来实现。 每个条带的两个分量是计算的奇偶校验块。 如果一个或两个设备故障,则奇偶校验块和剩余块可以用于计算丢失的数据。 接收奇偶校验块的设备被旋转,使得每个设备具有平衡量的奇偶校验信息。 这与RAID 5阵列类似,但允许两个驱动器发生故障。
- 要求:至少4存储设备
- 主要优点:双冗余,具有更多可用容量。
- 需要注意的是:当奇偶校验信息是分布式时,两个磁盘的容量将用于奇偶校验。 RAID 6在处于降级状态时可能遭受非常差的性能。
标识组件设备
要开始,请找到要使用的原始磁盘的标识符:
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
OutputNAME SIZE FSTYPE TYPE MOUNTPOINT
sda 100G disk
sdb 100G disk
sdc 100G disk
sdd 100G disk
vda 20G disk
├─vda1 20G ext4 part /
└─vda15 1M part
如上所示,我们有四个没有文件系统的磁盘,每个磁盘大小为100G。 在这个例子中,这些设备被赋予了/dev/sda
, /dev/sdb
, /dev/sdc
,并/dev/sdd
此会话标识符。 这些将是我们将用来构建数组的原始组件。
创建数组
要创建RAID 6阵列与这些组件,在将它们传递给mdadm --create
命令。 您必须指定要创建(设备名称/dev/md0
在我们的例子),RAID级别和设备的数量:
sudo mdadm --create --verbose /dev/md0 --level=6 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd
该mdadm
工具将开始配置阵列(它实际上使用回收工艺打造出于性能考虑数组)。 这可能需要一些时间才能完成,但在此期间可以使用数组。 您可以监视通过检查镜像进度/proc/mdstat
文件:
cat /proc/mdstat
OutputPersonalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
md0 : active raid6 sdd[3] sdc[2] sdb[1] sda[0]
209584128 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]
[>....................] resync = 0.6% (668572/104792064) finish=10.3min speed=167143K/sec
unused devices: <none>
正如你可以在第一时间看到高亮线, /dev/md0
设备已在RAID 6配置中使用创建/dev/sda
, /dev/sdb
, /dev/sdc
和/dev/sdd
设备。 第二个突出显示的行显示构建的进度。 在此过程完成时,您可以继续该指南。
创建并安装文件系统
接下来,在数组上创建一个文件系统:
sudo mkfs.ext4 -F /dev/md0
创建挂接点以附加新的文件系统:
sudo mkdir -p /mnt/md0
您可以通过键入以下命令安装文件系统:
sudo mount /dev/md0 /mnt/md0
通过键入以下内容检查新空间是否可用:
df -h -x devtmpfs -x tmpfs
OutputFilesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 1.1G 18G 6% /
/dev/md0 197G 60M 187G 1% /mnt/md0
新文件系统已装入并可访问。
保存数组布局
为了确保阵列在开机时自动重新组合,我们将不得不调整/etc/mdadm/mdadm.conf
文件。 我们可以自动扫描活动数组,并通过键入以下内容附加文件:
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
之后,您可以更新initramfs或初始RAM文件系统,以便阵列在早期引导过程中可用:
sudo update-initramfs -u
添加新的文件系统安装选项添加到/etc/fstab
的文件进行自动在启动安装:
echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
您的RAID 6阵列现在应该自动组装和安装每个引导。
创建复杂RAID 10阵列
RAID 10阵列类型传统上通过创建由RAID 1阵列的集合组成的条带化RAID 0阵列来实现。 这种嵌套数组类型提供了冗余和高性能,但代价是大量的磁盘空间。 该mdadm
实用程序具有它自己的RAID 10类型,它提供相同类型的具有增加的灵活性的好处。 它不是通过嵌套数组创建的,但具有许多相同的特性和保证。 我们将使用mdadm
RAID 10在这里。
- 要求:至少3个存储设备
- 主要优点:性能和冗余
- 注意事项:阵列的容量减少量由您选择保留的数据副本数量定义。 存储与拷贝数
mdadm
样式的RAID 10是可配置的。
默认情况下,每个数据块的两个副本将存储在所谓的“近”布局中。 指定每个数据块存储方式的可能布局如下:
- 附近 :默认安排。 每个块的副本在条带化时被连续写入,这意味着数据块的副本将被写在多个磁盘的相同部分周围。
- 远 :第一和随后的副本被写入到不同的部分阵列中的存储设备。 例如,第一个块可能在磁盘的开头附近写入,而第二个块将在不同的磁盘上写入一半。 这可以以牺牲写入性能为代价,为传统旋转磁盘提供一些读取性能提升。
- 偏移 :每个磁条被复制,通过一个驱动器偏移。 这意味着副本彼此偏移,但仍然在磁盘上靠近在一起。 这有助于在某些工作负载期间最大限度地减少过度查找。
你可以找到更多关于这些布局本的“RAID10”一节中检查出man
页:
man 4 md
您还可以找到此man
的在线页面在这里 。
标识组件设备
要开始,请找到要使用的原始磁盘的标识符:
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
OutputNAME SIZE FSTYPE TYPE MOUNTPOINT
sda 100G disk
sdb 100G disk
sdc 100G disk
sdd 100G disk
vda 20G disk
├─vda1 20G ext4 part /
└─vda15 1M part
如上所示,我们有四个没有文件系统的磁盘,每个磁盘大小为100G。 在这个例子中,这些设备被赋予了/dev/sda
, /dev/sdb
, /dev/sdc
,并/dev/sdd
此会话标识符。 这些将是我们将用来构建数组的原始组件。
创建数组
要创建RAID 10阵列与这些组件,在将它们传递给mdadm --create
命令。 您必须指定要创建(设备名称/dev/md0
在我们的例子),RAID级别和设备的数量。
您可以使用near布局设置两个副本,不要指定布局和副本号:
sudo mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd
如果要使用不同的布局,或者更改副本的数量,你将不得不使用--layout=
选项,这需要一个布局和复制标识。 该布局N对于附近,f表示到目前为止,与邻为抵消。 随后将附加要存储的副本数。
例如,要创建在偏移布局中具有3个副本的数组,命令将如下所示:
sudo mdadm --create --verbose /dev/md0 --level=10 --layout=o3 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd
该mdadm
工具将开始配置阵列(它实际上使用回收工艺打造出于性能考虑数组)。 这可能需要一些时间才能完成,但在此期间可以使用数组。 您可以监视通过检查镜像进度/proc/mdstat
文件:
cat /proc/mdstat
OutputPersonalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
[===>.................] resync = 18.1% (37959424/209584128) finish=13.8min speed=206120K/sec
unused devices: <none>
正如你可以在第一时间看到高亮线, /dev/md0
设备已在RAID 10配置中使用创建/dev/sda
, /dev/sdb
, /dev/sdc
和/dev/sdd
设备。 第二个突出显示的区域显示此示例使用的布局(近配置中的2个副本)。 第三个突出显示的区域显示构建的进度。 在此过程完成时,您可以继续该指南。
创建并安装文件系统
接下来,在数组上创建一个文件系统:
sudo mkfs.ext4 -F /dev/md0
创建挂接点以附加新的文件系统:
sudo mkdir -p /mnt/md0
您可以通过键入以下命令安装文件系统:
sudo mount /dev/md0 /mnt/md0
通过键入以下内容检查新空间是否可用:
df -h -x devtmpfs -x tmpfs
OutputFilesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 1.1G 18G 6% /
/dev/md0 197G 60M 187G 1% /mnt/md0
新文件系统已装入并可访问。
保存数组布局
为了确保阵列在开机时自动重新组合,我们将不得不调整/etc/mdadm/mdadm.conf
文件。 我们可以自动扫描活动数组,并通过键入以下内容附加文件:
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
之后,您可以更新initramfs或初始RAM文件系统,以便阵列在早期引导过程中可用:
sudo update-initramfs -u
添加新的文件系统安装选项添加到/etc/fstab
的文件进行自动在启动安装:
echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
您的RAID 10阵列现在应该自动组装和安装每个引导。
结论
在本指南中,我们演示了如何使用Linux的创建不同类型的数组mdadm
软件RAID工具。 与单独使用多个磁盘相比,RAID阵列提供了一些引人注目的冗余和性能增强。
一旦你选定了需要为您的环境阵列的类型和创建的设备,你需要学习如何与执行日常的日常管理mdadm
。 我们在指导如何使用管理RAID阵列mdadm
在Ubuntu 16.04可以帮助您开始。