在Linux中配置软件Linear RAID 0
在本文中,我将分享配置软件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>