在Linux中配置软件Linear RAID 0

时间:2020-01-09 10:37:47  来源:igfitidea点击:

在本文中,我将分享配置软件RAID的步骤,即线性RAID,它与RAID 0非常相似,并且差异很小,我们将在以下各章中进行介绍。

RAID 0 stripping与线性RAID

如果我们在非冗余配置中运行多个磁盘,并且希望能够在任何磁盘出现故障时恢复某些内容,那么至少,我们需要确保数据没有在所有设备上分条。
当使用条带化布局时,大多数文件的一部分将最终出现在所有磁盘上,这意味着当丢失任何磁盘时,几乎所有文件的一部分都不可避免地丢失了,更不用说文件系统结构本身的一部分了。
就像我们已经推测的那样,这意味着我们需要使用线性分配,该分配本质上是将组成设备的扩展区添加在一起,并为我们提供了一些机会,可以在设备故障后恢复完全存在的设备上的文件。

说明:

每个数组最多可以包含内核定义的MD_SB_DISK。
默认情况下,最大值为27,但是由于阵列也可以充当成员磁盘,因此可以避免此限制。
此外,最多可以使用256个软件RAID设备。

线性(添加)模式

线性RAID至少需要两个磁盘,但不需要成员磁盘具有相同的大小或者类型。
由于系统会在每个磁盘写满之前将其写入,因此就聚合RAID性能而言,各个磁盘的速度和大小在很大程度上无关紧要。

线性RAID中的块大小是多少?

块大小通常会定义要写入支持磁盘条带化的阵列的每个成员磁盘的千字节数。
但是,使用线性RAID数组时,块大小定义了舍入因子。
每个组件磁盘的大小均应使其为舍入系数的倍数。
由于RAID超级块放置在每个阵列成员上的方式,小于64 KB的舍入因子实际上等于64 KB。

说明:

块大小,无论使用哪种类型的数组,都必须定义为2的任意幂

创建线性RAID阵列

当前,我已经在我的虚拟机中添加了两个虚拟磁盘(/dev/sdb/dev/sdc),用于本文的演示。
这些磁盘上没有可用的分区,我们将在接下来的章节中创建这些分区。

[root@node1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   30G  0 disk
├─sda1            8:1    0  512M  0 part /boot
└─sda2            8:2    0 27.5G  0 part
  ├─centos-root 253:0    0 25.5G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    4G  0 disk
sdc               8:32   0    4G  0 disk
sr0              11:0    1 1024M  0 rom

重要的分区规则

进行分区时,请记住以下几点。

  • 如果我们不需要自动检测并计划将整个磁盘用作阵列成员,则无需分别对成员磁盘进行分区。

  • 如果希望内核在启动时自动启动阵列,则将分区设置为Linux Raid Auto(0xFD)。
    否则,将其保留为Linux('0x83')。

  • RAID-0和线性RAID阵列可以包含大小可变的分区,而不会丢失任何磁盘空间。
    请记住,当属于RAID-0的较小磁盘已满时,只会对其余磁盘进行条带化。
    因此,当阵列填满时,我们可能会在具有不同大小的成员磁盘的RAID-0上看到可变的性能。

  • 强烈建议在使用任何非线性RAID阵列时使用匹配的驱动器。

用fdisk分区

在阵列中使用磁盘之前,无需对磁盘进行分区,但是分区确实提供了两个优点。

  • 如果我们希望内核自动启动阵列,则必须进行分区,因为md驱动程序使用分区类型来标识成员磁盘。

  • md设备不直接支持分区,但是在某些情况下,拥有跨整个阵列的文件系统是不希望的。
    对系统分区使用软件RAID意味着需要较小的分区。
    毕竟,我们不希望/var或者/boot跨越整个数组。

警告:

如果我们有很多磁盘,则可能不希望对每个磁盘进行分区,因为如果有多个驱动器,此过程可能会花费很多时间。
在这种情况下,我们可以简单地将整个未分区的磁盘用作数组成员(例如/dev/sda)。
这意味着我们将无法自动启动阵列,因此我们必须在系统初始化脚本中包含用于启动" md"设备的命令。

接下来,我们将开始使用fdisk在磁盘/dev/sdb/dev/sdc上创建分区。

[root@node1 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xbea244e4.
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-8388607, default 2048): ⇐ We pressed Enter leaving it to the default value
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-8388607, default 8388607): ⇐ We pressed Enter leaving it to the default value
Using default value 8388607
Partition 1 of type Linux and of size 4 GiB is set
Command (m for help): t ⇐ Change the partition type
Selected partition 1
Hex code (type L to list all codes): l ⇐ List the available partition types
 0  Empty           24  NEC DOS         81  Minix/old Lin bf  Solaris
 1  FAT12           27  Hidden NTFS Win 82  Linux swap/So c1  DRDOS/sec (FAT
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M/CTOS/.
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS/HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix
Hex code (type L to list all codes): fd ⇐ Change the partition type of selected partition to fd
Changed type of partition 'Linux' to 'Linux raid autodetect'
Command (m for help): w ⇐ Save the changes
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

接下来,我们将对/dev/sdc重复相同的步骤

[root@node1 ~]# fdisk /dev/sdc
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xe215a659.
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-8388607, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-8388607, default 8388607):
Using default value 8388607
Partition 1 of type Linux and of size 4 GiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'
Command (m for help): p
Disk /dev/sdc: 4294 MB, 4294967296 bytes, 8388608 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
Disk label type: dos
Disk identifier: 0xe215a659
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048     8388607     4193280   fd  Linux raid autodetect
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

更新内核中的分区表。

[root@node1 ~]# partprobe

现在,列出节点上的可用分区并验证更改。
因此,现在我们有了两个新分区"/dev/sdb1"和"/dev/sdc1",用于设置线性模式软件raid。

[root@node1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   30G  0 disk
├─sda1            8:1    0  512M  0 part /boot
└─sda2            8:2    0 27.5G  0 part
  ├─centos-root 253:0    0 25.5G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    4G  0 disk
└─sdb1            8:17   0    4G  0 part
sdc               8:32   0    4G  0 disk
└─sdc1            8:33   0    4G  0 part
sr0              11:0    1 1024M  0 rom

创建线性软件RAID

要使用线性模式创建软件团队,请执行以下命令

[root@node1 ~]# mdadm -Cv -llinear -n2 /dev/md0 /dev/sd{b,c}1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

我们也可以使用此命令的长版本来创建线性突袭

# mdadm --create --verbose --level=linear --raid-devices=2 /dev/md0 /dev/sdb1 /dev/sdc1

其中

-C, --create
Create a new array.
-v, --verbose
Be more verbose.
-l, --raid-level
Select the RAID level: linear, 0, 1, 4, or 5.
-n, --raid-disks
Set the number of member disks in the array.

mdadm自动激活新创建的线性raid数组。
现在可以通过/proc/mdstat伪文件获得有关阵列及其成员磁盘的信息。

[root@node1 ~]# cat /proc/mdstat
Personalities : [linear]
md0 : active linear sdc1[1] sdb1[0]
      8380416 blocks super 1.2 0k rounding
unused devices: <none>

创建文件系统

接下来,"在新的软件RAID阵列上创建文件系统"。

我们将在线性RAID数组上创建ext4文件系统

[root@node1 ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2095104 blocks
104755 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2145386496
64 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

创建挂载点

创建用于访问软件RAID阵列的安装点

[root@node1 ~]# mkdir /linear_raid

接下来将raid数组挂载到创建的目录中

[root@node1 ~]# mount /dev/md0 /linear_raid/

检查安装状态,该状态还会提供有关安装点,可用空间等的更多详细信息。

[root@node1 ~]# df -h /linear_raid/
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        7.8G   36M  7.3G   1% /linear_raid

接下来,将数组的条目添加到"/etc/fstab"文件中,以便在系统重启时将其自动挂载。

[root@node1 ~]# tail -n 1 /etc/fstab
/dev/md0     /linear_raid     ext4    defaults     0 0

警告:

请注意,如果无法正确检查和安装/etc/fstab条目,某些发行版(例如Red Hat)会停止系统初始化。
因此,如果内核没有自动启动阵列,则/etc/fstab中的条目可能会阻止系统成功启动。
最好在检查和挂载文件系统之前,将可以手动启动阵列的命令放入初始化脚本中的命令,即使我们已经成功使用自动检测也是如此。
这将提供额外的稳定性,并且在最坏的情况下,在控制台上显示一些无害的警告。

验证软件团队更改

重新启动后验证团队状态

[root@node1 ~]# cat /proc/mdstat
Personalities : [linear]
md0 : active linear sdc1[1] sdb1[0]
      8380416 blocks super 1.2 0k rounding
unused devices: <none>