文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Soft RAID

Soft RAID

时间:2006-05-28  来源:rickyweiwei

RAID简介

 

磁盘阵列根据其使用的技术不同而划分了等级,称为RAID level,目前公认的标准是RAID 0~RAID 5。其中的level并不代表技术的高低,RAID 5并不高于RAID 4 ,RAID 0并不低于RAID 2 ,至于选择哪一种RAID需视用户的需求而定。下面分别对常用的RAID 0、RAID 1、RAID 5进行简单的介绍。

 

1.RAID 0

 

特点:它是将多个磁盘并列起来,成为一个大硬盘。在存取数据时,将数据按磁盘的个数来进行分段,然后同时将这些数据写进这些盘中。在所有的级别中,RAID 0的速度是最快的。但没有数据冗余,阵列中任何一个磁盘坏掉,意味着所有数据丢失。

 

 磁盘利用数:n(假设有n个磁盘)。

 

配置条件:最低两块磁盘,且分区大小尽量相同。

 

应用领域:对高磁盘容量及高速磁盘存取有特殊需求,而又不计较其高故障率的工作。当然,如果你正在使用集群,RAID 0 无疑是提高磁盘I/O性能的最好方法,因为在这种情况下,你就不用担心冗余的问题了。

 

2.RAID 1

 

特点:使用磁盘镜像(disk mirroring)的技术,在一个磁盘上存放数据的同时也在另一个磁盘上写一样的数据。因为有了备份磁盘,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。尽管其写入数据的速度比较慢,但因其数据是以分段的方式作储存,因而在读取时,它几乎和RAID 0有同样的性能。

 

磁盘利用数:n/2。

 

配置条件:最低两块磁盘,且分区大小尽量相同。

 

应用领域:数据库、金融系统等一些对数据有着高可靠性要求的领域。再者就是系统中写数据量比较少,而读数据量又比较多的情况下可以采用这一模式。

 

3.RAID 5

 

特点:以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个磁盘上。这样,任何一个磁盘损坏,都可以根据其他磁盘上的校验位来重建损坏的数据。并行读写数据,性能也很高。

  

磁盘利用数:n-1。

 

配置条件:最低三块硬盘,且分区大小尽量相同。

 

应用领域:适合于事务处理环境,例如民航售票处、销售系统等。

 

实现过程

 

1、创建分区-------》fdisk---{n---size---t---fd}---p---w

2、格式化   -------》mkfs.type /dev/hdxy

3、创建RAID------》mdadm

4、查看RAID------》

                                  more /proc/mdstat

                                  mdadm -D /dev/mdx

5、生成配置文件

                                 #mdadm -Ds > /etc/mdadm.conf

                                #vi /etc/mdadm.conf

                               DEVICE /dev/hdxy /dev/hdwq /dev/hd..

                               ARRAY /dev/mdx level=raidx num-devices=y UUID:*:*:*

6、格式化RAID

                                #mkfs.type /dev/mdx

7、挂载到相应工作目录 OR 修为/etc/fstab相应内容

                               #mount /dev/mdx /data

8、维护RAID

 

 A. 启动RAID #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文件则可以采用上面这种启动方式。

B.停止阵列
# mdadm -S /dev/md0

C.显示指定阵列的详细信息
# mdadm -D /dev/md0 
 

9、磁盘故障恢复

 

查看RAID现状:

# 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个。
经过几分钟后,再次查看当前阵列状态。

9.1 将/dev/sdb1标记为已损坏的设备
          # mdadm /dev/md0 -f /dev/sdb1

9.2      # more /proc/mdstat

9.3 移除损坏的设备 # mdadm /dev/md0 -r /dev/sdb1

9.4      # 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已经从阵列中移掉。

9.6将新设备添加到阵列中

下面的命令再次将/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作为备份设备再次出现在阵列中

10、实例:

/dev/hda6            1666        1690      200781   fd  Linux raid autodetect
/dev/hda7            1691        1715      200781   fd  Linux raid autodetect
/dev/hda8            1716        1740      200781   fd  Linux raid autodetect
/dev/hda9            1741        1765      200781   fd  Linux raid autodetect

# mdadm -Cv /dev/md0 -l5 -n3 -x1 /dev/hda[6-9]
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 64K
mdadm: /dev/hda6 appears to contain an ext2fs file system
    size=200780K  mtime=Thu Jan  1 08:00:00 1970
mdadm: /dev/hda7 appears to contain an ext2fs file system
    size=200780K  mtime=Thu Jan  1 08:00:00 1970
mdadm: /dev/hda8 appears to contain an ext2fs file system
    size=200780K  mtime=Thu Jan  1 08:00:00 1970
mdadm: /dev/hda9 appears to contain an ext2fs file system
    size=200780K  mtime=Thu Jan  1 08:00:00 1970
mdadm: size set to 200704K
Continue creating array? y
mdadm: array /dev/md0 started.

# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 hda8[3] hda9[4] hda7[1] hda6[0]
      401408 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
      [=======>.............]  recovery = 37.0% (74752/200704) finish=0.7min spe
ed=2875K/sec
unused devices: <none>

# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 hda8[2] hda9[3] hda7[1] hda6[0]
      401408 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

# mdadm -D /dev/md0
/dev/md0:
        Version : 00.90.01
  Creation Time : Sun May 28 22:34:38 2006
     Raid Level : raid5
     Array Size : 401408 (392.00 MiB 411.04 MB)
    Device Size : 200704 (196.00 MiB 205.52 MB)
   Raid Devices : 3
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sun May 28 22:35:47 2006
          State : clean
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 64K

    Number   Major   Minor   RaidDevice State
       0       3        6        0      active sync   /dev/hda6
       1       3        7        1      active sync   /dev/hda7
       2       3        8        2      active sync   /dev/hda8
       3       3        9       -1      spare   /dev/hda9
           UUID : a1d02f29:69e997bf:63ad3900:052261bc

# mkfs.ext3 /dev/md0
mke2fs 1.35 (28-Feb-2004)
max_blocks 411041792, rsv_groups = 50176, rsv_gdb = 256
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
100352 inodes, 401408 blocks
20070 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67633152
49 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729, 204801, 221185

Writing inode tables: done
inode.i_blocks = 4098, i_size = 67383296
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information:
done

This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
# mount /dev/md0 /data
# cp /sbin/* /data
# mdadm /dev/md0 -f /dev/hda6
mdadm: set /dev/hda6 faulty in /dev/md0

# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 hda8[2] hda9[3] hda7[1] hda6[4](F)
      401408 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU]
      [=====>...............]  recovery = 28.4% (58112/200704) finish=0.8min spe
ed=2905K/sec
unused devices: <none>

# mdadm -D /dev/md0

Number   Major   Minor   RaidDevice State
       0       3        9        0      active sync   /dev/hda9
       1       3        7        1      active sync   /dev/hda7
       2       3        8        2      active sync   /dev/hda8
       3       3        6       -1      faulty   /dev/hda6
           UUID : a1d02f29:69e997bf:63ad3900:052261bc
         Events : 0.18

# mdadm /dev/md0 -r /dev/hda6
mdadm: hot removed /dev/hda6
# mdadm -D /dev/md0
Number   Major   Minor   RaidDevice State
       0       3        9        0      active sync   /dev/hda9
       1       3        7        1      active sync   /dev/hda7
       2       3        8        2      active sync   /dev/hda8
           UUID : a1d02f29:69e997bf:63ad3900:052261bc

# mdadm /dev/md0 -a /dev/hda6
mdadm: hot added /dev/hda6

Number   Major   Minor   RaidDevice State
       0       3        9        0      active sync   /dev/hda9
       1       3        7        1      active sync   /dev/hda7
       2       3        8        2      active sync   /dev/hda8
       3       3        6       -1      spare   /dev/hda6

即:
mdadm /dev/md0 -f /dev/sdax
set faulty for sdax

mdadm /dev/md0 -r /dev/sdax
hot remove /dev/sdax from /dev/md0

mdadm /dev/md0 -a /dev/sdax
hot add /dev/sdax to /dev/md0

if the array is full ,new added /dev/sdax will be a spare device
it'll be auto added when a device in array is down

另生成CONF:

# mdadm -Ds > /etc/mdadm.conf
# vi /etc/mdadm.conf

DEVICE /dev/hda9 /dev/hda7 /dev/hda8 /dev/hda6
ARRAY /dev/md0 level=raid5 num-devices=3 UID=a1d02f29:69e997bf:63ad3900:052261bc

附:以下内容来自 manpage 页:
基本语法 : mdadm [mode] [options]
[mode] 有7种:
Assemble:将以前定义的某个阵列加入当前在用阵列。
Build:Build a legacy array ,每个device 没有 superblocks
Create:创建一个新的阵列,每个device 具有 superblocks
Manage: 管理阵列,比如 add 或 remove
Misc:允许单独对阵列中的某个 device 做操作,比如抹去superblocks 或 终止在用的阵列。
Follow or Monitor:监控 raid 1,4,5,6 和 multipath 的状态
Grow:改变raid 容量或 阵列中的 device 数目
可用的 [options]:
-A, --assemble:加入一个以前定义的阵列
-B, --build:Build a legacy array without superblocks.
-C, --create:创建一个新的阵列
-Q, --query:查看一个device,判断它为一个 md device 或是 一个 md 阵列的一部分
-D, --detail:打印一个或多个 md device 的详细信息
-E, --examine:打印 device 上的 md superblock 的内容
-F, --follow, --monitor:选择 Monitor 模式
-G, --grow:改变在用阵列的大小或形态
-h, --help:帮助信息,用在以上选项后,则显示该选项信息
--help-options
-V, --version
-v, --verbose:显示细节
-b, --brief:较少的细节。用于 --detail 和 --examine 选项
-f, --force
-c, --config= :指定配置文件,缺省为 /etc/mdadm/mdadm.conf
-s, --scan:扫描配置文件或 /proc/mdstat以搜寻丢失的信息。配置文件/etc/mdadm/mdadm.conf
create 或 build 使用的选项:
-c, --chunk=:Specify chunk size of kibibytes. 缺省为 64.
--rounding=: Specify rounding factor for linear array (==chunk size)
-l, --level=:设定 raid level.
--create可用:linear, raid0, 0, stripe, raid1,1, mirror, raid4, 4, raid5, 5, raid6, 6, multipath, mp.
--build可用:linear, raid0, 0, stripe.
-p, --parity=:设定 raid5 的奇偶校验规则:eft-asymmetric, left-symmetric, right-asymmetric, right-symmetric, la, ra, ls, rs.缺省为left-symmetric
--layout=:类似于--parity
-n, --raid-devices=:指定阵列中可用 device 数目,这个数目只能由 --grow 修改
-x, --spare-devices=:指定初始阵列的富余device 数目
-z, --size=:组建RAID1/4/5/6后从每个device获取的空间总数
--assume-clean:目前仅用于 --build 选项
-R, --run:阵列中的某一部分出现在其他阵列或文件系统中时,mdadm会确认该阵列。此选项将不作确认。
-f, --force:通常mdadm不允许只用一个device 创建阵列,而且创建raid5时会使用一个device作为missing drive。此选项正相反。
-a, --auto{=no,yes,md,mdp,part,p}{NN}: 

相关阅读 更多 +
排行榜 更多 +
无敌流浪汉3手机版下载

无敌流浪汉3手机版下载

飞行射击 下载
龙珠巅峰对决手游下载

龙珠巅峰对决手游下载

飞行射击 下载
杀戮尖塔mod手机版下载

杀戮尖塔mod手机版下载

棋牌卡牌 下载