分类: LINUX
2009-10-11 21:34:32
用bitmap实现对raid -1 的优化
环境:
RHEL5.3,磁盘阵列raid-1(可以建立在不同磁盘或分区上,在本实验中我们使用sdb和sdd)
原理描述:
在mdadm操作中,bitmap用于记录RAID 阵列从上次同步之后更改的部分,即记录RAID阵列有多少个块已经同步(resync)。RAID 阵列会定期将信息写入到bitmap 中。在一般情况下,磁盘阵列在重启之后会有一个完整的同步过程。如果有bitmap,那么只有被修改后的数据才会被同步。在另一种情况下,如果阵列一块磁盘被取出,bitmap不会被清除,当这块磁盘重新加入阵列时,同样只会同步改变过的数据。所以bitmap能够减少磁盘阵列同步的时间,起到优化raid1的作用。Bitmap一般写入的位置是磁盘的metadata或者我们成为外部的另外,要注意的是,bitmap只是对raid1的功能,对raid0等其他设备来说是没有意义的。
Bitmap的使用:
Bitmap一般写入磁盘的metadata中,也可以写入文件系统的某个目录下。由参数—bitmap后面的参数来决定,internal表示写入metadata,也可指定目录.
1) 在建立时使用
[root@localhost ~]# mdadm -C /dev/md0 -l1 -n2 /dev/sd[bd]1 --bitmap=internal
mdadm: array /dev/md0 started.
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sdb1[1] sdd1 [0]
503872 blocks [2/2] [UU]
bitmap: 62/62 pages [248KB], 4KB chunk
unused devices:< none>
2) 在建完raid1之后使用
开启bitmap
[root@localhost ~]# mdadm /dev/md0 --grow --bitmap=internal
关闭bitmap:
[root@localhost ~]# mdadm /dev/md0 --grow --bitmap=none
3) 保存在文件中举例
[root@localhost ~]# mdadm -C /dev/md0 -l1 -n2 /dev/sd[bd]1 --bitmap=/tmp/bitmap
4) 另外,可以使用—examine-bitmap或者-X来查看存储在文件或者设备元数据中的 bitmap记录的信息,当存储在元数据区时,参数是/dev/sdx,当参数是文件时,要注意的是使用bitmap文件记录要求这个文件不能在RAID阵列上或者其相关的设备上,而且使用assemble命令时要指定bitmap文件名字。另外,--bitmap-chunk表示每个bit位代表RAID设备多大的数据块,单位是KB;而--delay(或者其缩写-d)指定多长事件同步bitmap信息到文件或者设备上,单位是秒,默认是5秒。--force(或者其缩写)表示覆盖掉已经存在bitmap文件。
[root@localhost ~]# mdadm –X /dev/sdb1
或者[root@localhost ~]# mdadm –X /tmp/aaa(文件名)
unused devices:
Filename : /dev/sdb1
Magic : 6d746962
Version : 4
UUID : bcccddb7:0f529abd:672e1f66:7e68bbc8
Events : 6
Events Cleared :6
State : OK
Chunksize : 4 KB
Daemon : 5s flush period
Write Mode : Normal
Sync Size : 2096384 (2047.59 MiB 2146.70 MB)
Bitmap : 125968 bits (chunks), 0 dirty (0.0%)
5) bitmap模式在阵列处于降级(degrade)状态能够记录有哪些块被写过,当那个暂时失效的磁盘使用--re-add参数被重新添加后,阵列只重构这期间修改的数据块,减少阵列重构的时间。bitmap信息中dirty的数量表示降级期间被修改过的块。
#mdadm /dev/md0 -f /dev/sdb /dev/sd
#cat /proc/mdstat
#mdadm -X /tmp/md0-bm
#mdadm dd if=/dev/zero of=/dev/md0 bs=1M count=1024
#mdadm -X /tmp/md0-bm
#mdadm /dev/md0 -r /dev/sdb --re-add /dev/sdb
#cat /proc/mdstat
#mdadm -X /tmp/md0-bm