Redhat Linux AS 4 下实现软件 RAID <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

, 系统配置信息 :

操作系统为 RedHat Linux AS 4

内核版本为<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /> 2.6.9 -5.EL

支持 RAID0 RAID1 RAID4 RAID5 RAID6

五块 36GB SCSI 接口的磁盘,其中 RedHat AS 4 安装在第一块磁盘,其它四块组成 RAID 5 用来存放数据( RAID 5 级将基带条和 " 奇偶校验 " 组合在了一起,这种情况下,数据分布于在线组的硬盘中。奇偶校验数据使 RAID 控制器可以了解数据在硬盘上的存储位置。假定某一硬盘发生故障,控制器就可以使用奇偶校验信息重新创建丢失的数据。 RAID5 级允许同时进行数据读写,这为要求高性能的数据密集型应用提供了支持。可以通过调整基带条的大小来优化性能,英特尔集成式 RAID 软件支持这一特性。 RAID5 级以合理的价位提供了最佳的性能和数据安全性,因此目前它很受欢迎 )。

RedHat AS 4 下实现软件 RAID 是通过 mdadm 工具实现的,其版本为 1.6.0 ,它是一个单一的程序,创建、管理 RAID 都非常方便,而且也很稳定。而在早期 Linux 下使用的 raidtools ,由于维护起来很困难,而且其性能有限,在 RedHat AS 4 下已经不支持了。

1 .创建分区

五块 SCSI 磁盘分别对应 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde 。其中第一块磁盘 /dev/sda 分两个区,用于安装 RedHat AS 4 和做交换分区,其他四块磁盘每块只分一个主分区,分别为 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 ,并且将分区类型指定为 “fd” ,这将使 Linux 内核能将它们识别为 RAID 分区,且在每次引导时自动被检测并启动。创建分区使用 fdisk 命令。

# fdisk /dev/sdb

进入 fdisk 命令行后,使用命令 n 创建分区,命令 t 改变分区类型,命令 w 保存分区表并退出,命令 m 为帮助。

[root@localhost ~]# fdisk /dev/sdb

Command (m for help): n (添加分区)

Command action

   e   extended

   p   primary partition (1-4)

p (创建一个主分区)

Partition number (1-4): 1

First cylinder (1-130, default 1): 1

Last cylinder or +size or +sizeM or +sizeK (1-130, default 130):

Using default value 130

Command (m for help): p (查看分区信息)

Disk /dev/sdb: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1         130     1044193+  83  Linux

Command (m for help): t  (更改 ID 号)

Selected partition 1

Hex code (type L to list codes): fd 将分区类型指定为“fd”

Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1         130     1044193+  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@localhost ~]# mkfs -t ext3 /dev/sdb1

mke2fs 1.35 ( 28-Feb-2004 )

max_blocks 267313152, rsv_groups = 8158, rsv_gdb = 63

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

130560 inodes, 261048 blocks

13052 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=268435456

8 block groups

32768 blocks per group, 32768 fragments per group

16320 inodes per group

Superblock backups stored on blocks:

        32768, 98304, 163840, 229376

Writing inode tables: done                           

inode.i_blocks = 2528, i_size = 4243456

Creating journal (4096 blocks): done

Writing superblocks and filesystem accounting information: done

 

This filesystem will be automatically checked every 30 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

备注:其它的分区类似于 sdb

2 .创建 RAID 5

这里使用了 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 四个设备创建 RAID 5 ,其中 /dev/sde1 作为备份设备,其他为活动设备。备份设备主要起备用作用,一旦某一设备损坏可以立即用备份设备替换,当然也可以不使用备份设备。命令格式如下

# mdadm -Cv /dev/md0 -l5 -n3 -x1 -c128 /dev/sd[b,c,d,e]1

命令中各参数分别表示如下作用: “-C” 指创建一个新的阵列; “/dev/md 0” 表示阵列设备名称; “-l5” 表示设置阵列模式,可以选择 0 1 4 5 6 ,它们分别对应于 RAID0 RAID1 RAID4 RAID5 RAID6 ,这里设为 RAID5 模式; “-n3” 指设置阵列中活动设备的数目,该数目加上备用设备的数目应等于阵列中的总设备数 ; “-x1” 设置阵列中备份设备的数目,当前阵列中含有 1 个备份设备; “-c128” 指设置块的尺寸为 128KB ,缺省为 64KB “/dev/sd[b, c,d,e] 1” 指当前阵列中包含的所有设备标识符,也可以分开来写,中间用空格分开,其中最后一个为备份设备。

3 .查看阵列状态

当创建一个新阵列或者阵列重构时,设备需要进行同步操作,这一过程需要一定时间,可以通过查看 /proc/mdstat 文件,来显示阵列的当前状态以及同步进度、所需时间等。

# more /proc/mdstat

 

Personalities : [raid5]

 

md0 : active raid5 sdd1[3] sde1[4] sdc1[1] sdb1[0]

 

75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [UU_]

 

[>....................] recovery = 4.3% (1622601/37734912) finish=1.0min speed=15146K/sec

 

unused devices:

当新建或重构完成后,再次查看 /proc/mdstat 文件 :

# more /proc/mdstat

 

Personalities : [raid5]

 

md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[0]

 

    75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]

 

unused devices:

通过以上内容,可以很清楚地看出当前阵列的状态,各部分所代表的意思如下: “[3/3]” 中的第一位数表示阵列所包含的设备数,第二位数表示活动的设备数,如果有一个设备损坏,则第二位数将减 1 “[UUU]” 标记当前阵列可以正常使用的设备情况,现假设 /dev/sdb1 出现故障,则该标记将变成 [_UU] ,这时的阵列以降级模式运行,即该阵列仍然可用,但是不再具有任何冗余; “sdd1[2]” 指阵列所包含的设备数为 n ,若方括号内的数值小于 n ,则表示该设备为活动设备,若数值大于等于 n ,则该设备为备份设备,当一个设备出现故障的时候,相应设备的方括号后将被标以 (F)

4 .生成配置文件

mdadm 的缺省配置文件为 /etc/mdadm.conf ,它主要是为了方便阵列的日常管理而设置的,对于阵列而言不是必须的,但是为了减少日后管理中不必要的麻烦,还是应该坚

持把这一步做完。

mdadm.conf 文件中要包含两种类型的行:一种是以 DEVICE 开头的行,它指明在阵列中的设备列表;另一种是以 ARRAY 开头的行,它详细地说明了阵列的名称、模式、阵列中活动设备的数目以及设备的 UUID 号。格式如下:

DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

 

ARRAY /dev/md0 level=raid5 num-devices=3 UUID= 8f 128343: 715a 42df: baece 2a 8: a5b878e0

以上的这些信息可以通过扫描系统的阵列来获取,命令为:

# mdadm -Ds

 

ARRAY /dev/md0 level=raid5 num-devices=3 UUID= 8f 128343: 715a 42df: baece 2a 8: a5b878e0

 

devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1

使用 vi 命令,按照规定的格式编辑修改 /etc/mdadm.conf 文件

# vi /etc/mdadm.conf

5 .创建文件系统并挂接 (mount) 使用

RAID5 已经启动并处于运行状态,现在要做的就是在其上创建一个文件系统,这里使用 mkfs 命令,文件系统类型为 ext3 。命令如下:

# mkfs -t ext3 /dev/md0

当新的文件系统生成之后,就可以将 /dev/md0 挂接到指定的目录了。命令如下:

# mount  -t ext3 /dev/md0 /mnt/raid

为了让系统在启动时自动将 /dev/md0 挂接到 /mnt/raid ,还需要修改 /etc/fstab 文件,添加如下内容:

/dev/md0 /mnt/raid ext3 defaults 0 0

故障模拟

上面的实例,让我们对 Redhat Linux AS 4 的软件 RAID 功能有了一定的认识,并且通过详细的步骤说明了如何创建 RAID5 。有了 RAID 做保障,电脑里的数据看起来似乎已经很安全了,然而现有的情况还是不能让我们高枕无忧,想一想,万一磁盘出现故障怎么办?下面我们模拟一个更换 RAID5 故障磁盘的完整过程,希望以此丰富大家处理 RAID5 故障的经验,提高管理和维护水平。

我们仍然沿用上面的 RAID5 配置,首先往阵列中拷贝一些数据,接下来开始模拟 /dev/sdb1 设备故障。不过,对于无备份设备的 RAID5 的模拟过程也要经过如下三步,只是阵列重构和数据恢复是发生在新设备添加到阵列中之后,而不是设备损坏时。

1 .将 /dev/sdb1 标记为已损坏的设备

# mdadm /dev/md0 -f /dev/sdb1

查看当前阵列状态

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[4](F)

75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [_UU]

[=>...................] recovery = 8.9% (3358407/37734912) finish=1.6min speed=9382K/sec

unused devices:

因为有备份设备,所以当阵列中出现设备损坏时,阵列能够在短时间内实现重构和数据的恢复。从当前的状态可以看出,阵列正在重构,且运行在降级模式, sdb1[4] 的后面已经标上了 (F) ,活动设备数也降为 2 个。

经过几分钟后,再次查看当前阵列状态。

# more /proc/mdstat

 

Personalities : [raid5]

 

md0 : active raid5 sdd1[2] sde1[0] sdc1[1] sdb1[3](F)

 

     75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]

 

unused devices:

此时阵列重构已经完成,数据恢复完毕,原有的备份设备 sde1 成为了活动设备。

2 .移除损坏的设备

# mdadm /dev/md0 -r /dev/sdb1

查看当前阵列的状态:

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[2] sde1[0] sdc1[1]

75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]

unused devices:

损坏的 sdb1 已经从阵列中移掉。

3 .将新设备添加到阵列中

因为是模拟操作,可以通过下面的命令再次将 /dev/sdb1 添加到阵列中。如果是实际操作则要注意两点:一是在添加之前要对新磁盘进行正确的分区;二是添加时要用所添加设备的设备名替换 /dev/sdb1

# mdadm /dev/md0 -a /dev/sdb1

查看当前阵列的状态:

# more /proc/mdstat

 

Personalities : [raid5]

 

md0 : active raid5 sdb1[3] sdd1[2] sde1[0] sdc1[1]

 

    75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]

 

unused devices:

 

这时 sdb1 作为备份设备再次出现在阵列中

常用阵列维护命令

1 .启动阵列

# mdadm -As /dev/md0

该命令指启动 /dev/md0 阵列,其中 “-A” 指装载一个已存在的阵列; “-s” 指查找 mdadm.conf 文件中的配置信息,并以此为依据启动阵列。

#mdadm -As

该命令指启动 mdadm.conf 文件中的所有阵列。

#mdadm -A /dev/md0 /dev/sd[b,c,d,e]1

如果没有创建 mdadm.conf 文件则可以采用上面这种启动方式。

2 .停止阵列

# mdadm -S /dev/md0

3 .显示指定阵列的详细信息

# mdadm -D /dev/md0

 

 

 

制定备份策略,对网络中重要的数据定时有效的备份

 

备份是一项重要的工作,但是很多人没有去做。一旦由于使用不当造成数据丢失,备份就成了真正的救命者。本内容将结合tar与NFS,如何来有效的备份数据!

备份工具tar是以前备份文件的可靠方法,几乎可以工作于任何环境中,Linux老用户一般都信赖它。 Linux中以.tar结尾的文件都是用tar创建的。它的使用超出了单纯的备份,可用来把许多不同文件放到一起组成一个易于分开的文件。tar是从Tape ARchiver备份工具起步的。包含在Linux中的GNU tar工具简便易用,包含了一个用来压缩的选项,且支持不断增加的备份。tar是一个命令行的工具,没有图形界面。

络文件系统( NFS Network File System )是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制,通过对网络文件系统的支持,用户可以在本地系统上像操作本地分区一样来对远程主机的共享分区(目录)进行操作!

第一步、配置 NFS

修改  /etc/exports, 增加共享目录
/home/backup *
sync rw)  
启动服务器

Service portmap start

Service nfs start

重新输出共享目录

exportfs –rv

挂载 NFS 服务器中的共享目录 
 mount -t nfs 192.168.1.17
/home/backup /mnt/backup_share
将目录挂载进来后,只要进入 /mnt/backup_share  目录,就等于到了 IP 地址: 192.168.1.7 那部 NFS  计算机的 /home/backup  目录中。

第二步、配置备份脚本

配置 tar 备份,假设需要备份的数据是每天的 MYSQL 数据库,需要每周对数据保存一次,同时要求保存为不同的文件名称,我们可以通过日期来分辨文件的新旧,命令如下

vi /etc/backup.sh

tar –zpcvf  /mnt/backup_share / mysql.`date + Y-%m-%d`.tar.gz  /var/lib/mysql

chmod a+x /etc/backup.sh

第三步、配置 crontab, 每周五的三点定时执行 backup.sh 脚本

[root@localhost ~]# vi /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

# run-parts

01 * * * * root run-parts /etc/cron.hourly

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

0  3 * * 5 root           /etc/backup.sh

 

恢复 root 用户口令 学员进行 linux 系统安装时,可能由于忘记 root 用户名口令导致无法正常登陆系统,这时需要通过进入系统的单用户模式(运行级别 1 )来重置 root 用户口令,步骤如下:

1 、以 grub 系统引导管理器,单用户登录方法;

2 、在 grub 启动后,移动键盘到 Linux 的启动项;按 e 键;然后再移动键盘到类似下面的一行,也就是 kernel 的那行:

kernel /boot/vmlinuz- 2.6.9 -5EL ro root=/dev/sda1 rhgb quiet

3 、把光标移动这行后,再按一下 e 键,进入编辑这行;在行尾条一个空格 ,然后输入 single ,也就是类似如下的:

kernel /boot/ vmlinuz- 2.6.9 -5EL ro root=/dev/sda1 rhgb quiet single

4 、结束编辑,按回车返回;

5 、接着我们要启动系统,按一下 b 键启动;

6 、当进入单用户模式运行后,使用命令 passwd 命令重新新建密码即可