配置环境
我们将在CentOS服务器上进行配置
操作系统 | CentOS 6 |
---|---|
RAID 设备名 | /dev/md0 |
RAID Level | 1(镜像) |
RAID 磁盘:
Device | 大小 |
---|---|
/dev/sdb | 2 GB |
/dev/sdc | 2 GB |
/dev/sdd | 2 GB |
/dev/sde | 2 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 中删除条目。
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 的配置、管理和恢复选项。
将磁盘添加到 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 文件时才有效。