配置环境

我们将在CentOS服务器上进行配置

操作系统CentOS 6
RAID 设备名/dev/md0
RAID Level1(镜像)

RAID 磁盘:

Device大小
/dev/sdb2 GB
/dev/sdc2 GB
/dev/sdd2 GB
/dev/sde2 GB

在 CentOS 上配置 RAID 1

要检查可用磁盘,请执行以下命令以获取连接到系统的磁盘列表。

[root@linux1 ~]# fdisk -l
Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 2610 20860402+ 8e Linux LVM
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table
Disk /dev/sdc: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdc doesn't contain a valid partition table
Disk /dev/sdd: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdd doesn't contain a valid partition table
Disk /dev/sde: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sde doesn't contain a valid partition table

以上输出显示我们有5个硬盘连接到系统,磁盘/dev/sda正在被系统使用,而磁盘/dev/sdb、/dev/sdc、/dev/sdd和/dev/sde(大小每个 2GB) 尚未初始化。
我们将使用它们来创建我们的 RAID 阵列。

让我们初始化两个磁盘 /dev/sdb 和 /dev/sdc 以供我们的 RAID 阵列使用。

[root@linux1 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): n
Command action    e extended    p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1): 
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-261, default 261): 
Using default value 261
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): L
0 Empty            1e Hidden W95 FAT1 80 Old Minix       be Solaris boot
1 FAT12            24 NEC DOS         81 Minix / old Lin bf Solaris
2 XENIX root       39 Plan 9          82 Linux swap / So c1 DRDOS/sec (FAT
3 XENIX usr        3c PartitionMagic  83 Linux           c4 DRDOS/sec (FAT
4 FAT16 <32M       40 Venix 80286     84 OS/2 hidden C:  c6 DRDOS/sec (FAT
5 Extended         41 PPC PReP Boot   85 Linux extended  c7 Syrinx
6 FAT16            42 SFS             86 NTFS volume set da Non-FS data
7 HPFS/NTFS        4d QNX4.x          87 NTFS volume set db CP/M / CTOS / .
8 AIX              4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
9 AIX bootable     4f QNX4.x 3rd part 8e Linux LVM       df BootIt
a OS/2 Boot Manag  50 OnTrack DM      93 Amoeba          e1 DOS access
b W95 FAT32        51 OnTrack DM6 Aux 94 Amoeba BBT      e3 DOS R/O
c W95 FAT32 (LBA)  52 CP/M            9f BSD/OS          e4 SpeedStor
e W95 FAT16 (LBA)  53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
f W95 Ext'd (LBA)  54 OnTrackDM6      a5 FreeBSD         ee EFI GPT
10 OPUS            55 EZ-Drive        a6 OpenBSD         ef EFI (FAT-12/16/
11 Hidden FAT12    56 Golden Bow      a7 NeXTSTEP        f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk     a8 Darwin UFS      f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor       a9 NetBSD          f4 SpeedStor
16 Hidden FAT16    63 GNU HURD or Sys ab Darwin boot     f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware  b7 BSDI fs         fd Linux raid auto
18 AST SmartSleep  65 Novell Netware  b8 BSDI swap       fe LANstep
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid ff BBT
1c Hidden W95 FAT3 75 PC/IX
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): p
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 261 2096451 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@linux1 ~]# partprobe /dev/sdb

重复相同的步骤来初始化磁盘 /dev/sdc。

现在创建一个 RAID 级别 1 并向其添加磁盘 /dev/sdb 和 /dev/sdc。

[root@linux1 ~]# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
mdadm: array /dev/md0 started.

要检查 RAID 配置,请执行以下命令。

[root@linux1 ~]# cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sdc[1] sdb[0]
2097088 blocks [2/2] [UU]
unused devices: <none>

我们的 RAID 配置不是永久性的,会在机器重新启动时丢失。
为了使其持久化,我们必须创建一个配置文件并其中添加信息。
一个命令就足以完成任务。

[root@linux1 ~]# mdadm --detail --scan > /etc/mdadm.conf

要创建 RAID /dev/md0 的文件系统 ext3,请使用以下命令。

[root@linux1 ~]# mke2fs -j /dev/md0
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
262144 inodes, 524272 blocks
26213 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:              32768, 98304, 163840, 229376, 294912
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

现在我们的 RAID 可以使用了。
让我们在我们的硬盘上创建一个挂载点并永久挂载 RAID。

[root@linux1 ~]# mkdir /u01
[root@linux1 ~]# vi /etc/fstab
/dev/VolGroup00/LogVol00 /         ext3   defaults       1 1
LABEL=/boot              /boot     ext3   defaults       1 2
tmpfs                    /dev/shm  tmpfs  defaults       0 0
devpts                   /dev/pts  devpts gid=5,mode=620 0 0
sysfs                    /sys      sysfs  defaults       0 0
proc                     /proc     proc   defaults       0 0
/dev/VolGroup00/LogVol01 swap      swap   defaults       0 0
/dev/md0                 /u01      ext3   defaults       0 0
[root@linux1 ~]# mount -a
[root@linux1 ~]# df -m
Filesystem                       1M-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00  18723     2718     15039  16% /
/dev/sda1                           99       12        83  13% /boot
tmpfs                              252        0       252   0% /dev/shm
/dev/md0                          2016       36      1879   2% /u01

从上面截图的最后一行可以清楚地看出我们的 RAID 的存储容量是 2016 MB,例如:阵列中最小磁盘的大小。

要测试我们的 RAID 阵列,请将一个大文件复制到 /u01.
(我复制了一个 626 MB 的文件)。

[root@linux1 Oracle]# cp 10201_database_win32.zip /u01
[root@linux1 Oracle]# cd /u01
[root@linux1 u01]# du -m *
626    10201_database_win32.zip
1      lost+found

从 RAID 阵列中移除磁盘

现在我们的 RAID 有 3 个磁盘,并在级别 1 中运行。
让我们移除磁盘 /dev/sdd 并用新的 /dev/sde 替换它。
为此,我们必须强制设备发生故障。

[root@linux1 Oracle]# mdadm --manage /dev/md0 --fail /dev/sdd
mdadm: set /dev/sdd faulty in /dev/md0
[root@linux1 Oracle]# cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sdd[3](F) sdc[1] sdb[0]
2097088 blocks [3/2] [UU_]
unused devices: <none>

观察 cat 命令的输出,磁盘 /dev/sdd 被标记为故障备用(上面截图中 sdd[3] 之后的(F)代表了这一点)。
要从阵列中删除此磁盘,请使用以下命令。

[root@linux1 Oracle]# mdadm --manage /dev/md0 --remove /dev/sdd
mdadm: hot removed /dev/sdd
[root@linux1 Oracle]# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Sun Jan 15 09:33:01 2012
Raid Level : raid1
Array Size : 2097088 (2048.28 MiB 2147.42 MB)
Device Size : 2097088 (2048.28 MiB 2147.42 MB)
Raid Devices : 3
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time     : Sun Jan 15 10:49:44 2012
State           : clean, degraded
Active Devices  : 2
Working Devices : 2
Failed Devices  : 0
Spare Devices   : 0
UUID : 3c18230e:40c11f0f:fdcec7f4:d575f031
Events : 0.12
Number Major Minor RaidDevice State
0     8     16     0        active sync /dev/sdb
1     8     32     1        active sync /dev/sdc
2     0      0     2        removed

上面截图的最后一行显示 RaidDevice 2 已被删除。

要添加新设备 /dev/sde,初始化它,并将其添加到 RAID 阵列。

不要忘记更新 /etc/mdadm.conf 文件,否则更改将在重新启动后丢失。

删除 RAID 配置

最后,我们将介绍如何从系统中删除 RAID 配置。
下面给出了这些步骤,它与我们长期以来所做的配置相反。
我认为这些步骤不需要任何进一步的说明。

[root@linux1 u01]# cd /
[root@linux1 /]# umount /u01
[root@linux1 /]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
[root@linux1 /]# rm -rf /etc/mdadm.conf
[root@linux1 /]# rmdir /u01

同时从 /etc/fstab 中删除条目。

在 Linux 中配置软件 RAID

RAID 是 Redundant Array of Inexpensive Disks 的缩写。
RAID 有不同级别,每个级别都有不同的用途和应用。
在本文中,我们关注 RAID 级别 1.
使用 RAID 1,数据会实时镜像到另一个磁盘上。
因此,这种 RAID 方法通常称为磁盘镜像(disk mirroring)。

RAID 1 的主要优点是,如果 RAID 中的一个磁盘出现故障,另一个磁盘会继续运行。
更换故障磁盘时,新磁盘会自动与幸存的磁盘同步。
RAID 1 还提供了使用热备用备用磁盘的可能性,该磁盘将在任何主要 RAID 设备上出现磁盘故障时自动镜像。

RAID 1 提供数据冗余,没有 RAID 0 的速度优势。
RAID 1 的一个限制是总 RAID 大小(以 GB 为单位)等于 RAID 集中最小磁盘的大小。

这篇文章的目的是了解如何在基于 Linux 的操作系统中配置软件 RAID 级别 1 以提供数据冗余。
本教程将介绍 RAID 1 的配置、管理和恢复选项。

欢迎 on it road

将磁盘添加到 RAID 阵列

现在让我们再添加一个磁盘 /dev/sdd 到我们现有的阵列。
按照上面的步骤初始化,然后执行下面的命令添加。

[root@linux1 Oracle]# mdadm --manage /dev/md0 --add /dev/sdd
mdadm: added /dev/sdd
[root@linux1 Oracle]# cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sdd[2](S) sdc[1] sdb[0]
2097088 blocks [2/2] [UU]
unused devices: <none>

虽然添加了/dev/hdd但是RAID并没有使用它,因为我们的RAID配置为只使用两个设备,并且已经有两个设备,例如:/dev/sdb和/dev/sdc。
因此,/dev/sdd 添加为 SPARE(上面屏幕截图中 sdd[2] 表示此之后的(S))磁盘,如果活动磁盘出现故障,该磁盘将自动变为活动状态。

我们有两种使用/dev/sdd 的方法,或者增加raid 设备的数量,或者用/dev/sdd 替换现有磁盘。
最后一个选项将在下一节讨论,现在我们正在增加raid-devices,如下所示:

[root@linux1 Oracle]# mdadm --grow /dev/md0 --raid-devices=3
[root@linux1 Oracle]# cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sdd[3] sdc[1] sdb[0]
2097088 blocks [3/2] [UU_]
[=======>.............] recovery = 38.8% (815808/2097088) finish=0.9min speed=21559K/sec
unused devices: <none>

观察 cat 命令的输出。
RAID 一直在执行某种恢复。
实际上,在 /dev/sdd 中创建精确镜像是重新平衡活动。
根据 /u01 中的文件,这需要一些时间。

测试 RAID 1

众所周知,在 RAID 1 架构中,文件镜像到所有磁盘上。
现在通过停止 RAID、在不同的挂载点挂载阵列磁盘并列出磁盘内容来测试它。

[root@linux1 u01]# cd /
[root@linux1 /]# umount /u01
[root@linux1 /]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
[root@linux1 /]# mkdir d0{1,2}
[root@linux1 /]# mount -t ext3 /dev/sdb /d01
[root@linux1 /]# mount -t ext3 /dev/sdc /d02
[root@linux1 /]# ls /d01
10201_database_win32.zip lost+found
[root@linux1 /]# ls /d02
10201_database_win32.zip lost+found

所以,从上面的测试可以清楚地看出,我们的 RAID 工作得非常好。
现在让我们再次启动 RAID。

[root@linux1 Oracle]# umount /d01
[root@linux1 Oracle]# umount /d02
[root@linux1 Oracle]# mdadm --assemble /dev/md0
mdadm: /dev/md0 has been started with 2 drives.
[root@linux1 Oracle]# mount -a

mdm -assemble 命令仅在我们将 RAID 配置保存到 /etc/mdadm.conf 文件时才有效。

日期:2020-09-17 00:14:16 来源:oir作者:oir