--begin 由itlife365.com 收集整理于csdn的cybertan
一、条带化的概念
一般以LVM管理的存储,一个vg中可能会有很多pv,同样的,一个lv可能跨越多块pv,为了使硬盘存储速度加快,就会用到条带化的技术,即把连续的数据分成大小相同的数据块,然后依次存储在各个pv上。类似于RAID0,使存储速度加快。但并不会使数据像RAID0一样危险容易丢失,因为在正式使用中,不会像此时做测试一样没有任何保障地将多块硬盘做成一个vg,而是普遍连接的后台存储,在划分LUN之前,已经在物理硬盘上做好RAID5或RAID1,在RAID5或RAID1的基础上再划分出多块LUN,即系统上的pv,即使pv所在硬盘损坏,但有底层的硬RAID冗余,并不会丢失数据。
条带单元大小:即条带化的LV中,每一个条带单元的大小,对应于I/O中数据块的大小。对于Oracle来讲,db_block_size即设定的数据块大小。而db_file_multiblock_read_count就一次读取时最多并行的数据块的个数,db_block_size和db_file_multiblock_read_count相乘即一次总的I/O大小。这个大小不能超过操作系统的最大I/O (max_io_size)值。在ORACLE应用中,lv条带的大小一般设置为两倍或两倍以上的Oracle块大小,因为假如设置成与Oracle数据块相同大小,无法保证Oracle数据块的边界正好与条带单元的边界对应,如果不对应的话,就会出现大量的一个I/O由两个条带单元,来处理的情况。
条带大小的原则:
对于高并发并且IO请求小的情况下,一块物理硬盘处理多个I/O请求,低并发但I/O请求较大时,可能需要多块硬盘处理一个I/O请求。原则上的要求是一次I/O请求能被一次性处理完成。
大概的条带化的概念就是这样。
二、条带化lv的创建
先看本机中的VG情况,只有一个vg00,物理硬盘个数是从/dev/sdd到/dev/sdi一共6块。
[root@itlife365.com~]# vgscan
Reading all physical volumes. This may take a while...
Found volume group "vg00" using metadata type lvm2
将每块硬盘做为一个PV,先全部执行完成。为了一会做lvextend的测试,先用前三块硬盘创建vg01
[root@itlife365.com~]# pvcreate /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi
Physical volume "/dev/sdd" successfully created
Physical volume "/dev/sde" successfully created
Physical volume "/dev/sdf" successfully created
Physical volume "/dev/sdg" successfully created
Physical volume "/dev/sdh" successfully created
Physical volume "/dev/sdi" successfully created
[root@itlife365.com~]# vgcreate /dev/vg01 /dev/sdd /dev/sde /dev/sdf
Volume group "vg01" successfully created
[root@itlife365.com~]# vgdisplay vg01
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 5.99 GB
PE Size 4.00 MB
Total PE 1533
Alloc PE / Size 0 / 0
Free PE / Size 1533 / 5.99 GB
VG UUID W6EwVP-YIva-iCqr-KuZf-B3jt-4cA3-4XcSv4
再创建条带化的lv,下面用到的lvextend的参数如下:
-i:此处写lv用到的pv的数量,不能超过所在vg的pv数量,一般设置与vg的pv个数相同
-I:条带单元大小,单位Kb
-L:lv的大小,默认为Mb,可带单位G,M,K
-l:小写L,分配给lv的LE个数,对应于VG中的PE,在上条vgdisplay的输出中可看到VG中一共有1533个PE。
-n:自定义lv的名字,默认从lvol0开始往下排。
为了下面测试条带化下的lvextend,所以将此vg的所有空间都给这个lv,即1533个LE,一共5.99G的可用空间。
lvcreate -i 2 -I 8192 -l 2558 -n crmdb
[root@itlife365.com~]# lvcreate -i 3 -I 64 -l 1533 -n stripe_lv vg01
Logical volume "stripe_lv" created
[root@itlife365.com~]# lvdisplay /dev/vg01/stripe_lv
--- Logical volume ---
LV Name /dev/vg01/stripe_lv
VG Name vg01
LV UUID TyF4aW-gegH-Vmxi-hWUl-a7t7-Vw5V-B64Eik
LV Write Access read/write
LV Status available
# open 0
LV Size 5.99 GB
Current LE 1533
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 768
Block device 253:4
执行格式化和挂载
[root@itlife365.com~]# mkfs.ext3 /dev/vg01/stripe_lv
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
784896 inodes, 1569792 blocks
78489 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1610612736
48 block groups
32768 blocks per group, 32768 fragments per group
16352 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@itlife365.com ~]# mkdir /stripe
[root@itlife365.com ~]# mount /dev/vg01/stripe_lv /stripe/
[root@itlife365.com ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-lv_root 6.0G 398M 5.3G 7% /
/dev/mapper/vg00-lv_usr 6.8G 1.7G 4.8G 26% /usr
/dev/mapper/vg00-lv_data 93M 5.6M 83M 7% /data
/dev/sdc1 988M 24M 914M 3% /boot
/dev/mapper/vg01-stripe_lv 5.9G 141M 5.5G 3% /stripe
三、条带化lv的扩展
然后测试给此条带化的lv扩容,先vgextend,再lvextend.
条带化的lv扩展需要新增pv的时候,有个重要条件,增加的pv数量必须与lv现有的pv数量相同或成倍数关系。想想RAID0的原理就知道了,抽象地说,数据分成大小相同的数据块,然后依次存储在每块硬盘,如果要扩大,必然要每块硬盘都相应扩大。此处先只增加一块硬盘看是否可以。
[root@itlife365.com~]# vgextend /dev/vg01 /dev/sdg
Volume group "vg01" successfully extended
增加硬盘后,可以看到vg size变大为7.98G,并且PE数量变为2044,pv数量变为4个。
[root@itlife365.com~]# vgdisplay /dev/vg01
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 4
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 4
Act PV 4
VG Size 7.98 GB
PE Size 4.00 MB
Total PE 2044
Alloc PE / Size 1533 / 5.99 GB
Free PE / Size 511 / 2.00 GB
VG UUID W6EwVP-YIva-iCqr-KuZf-B3jt-4cA3-4XcSv4
因为有2G的可用空间,此处试着增加100M,但是结果是失败的,提示不够用。
[root@itlife365.com ~]# lvextend -L+100 /dev/vg01/stripe_lv
Using stripesize of last segment 64.00 KB
Rounding size (1558 extents) down to stripe boundary size for segment (1557 extents)
Extending logical volume stripe_lv to 6.08 GB
Insufficient suitable allocatable extents for logical volume stripe_lv: 24 more required
然后再以LE的方式增加,一共有511个可用的PE,即最大应该可增加511个LE,此处只增加10个仍然失败,提示需要额外的9个。
[root@itlife365.com ~]# lvextend -l+10 /dev/vg01/stripe_lv Using stripesize of last segment 64.00 KB Rounding size (1543 extents) down to stripe boundary size for segment (1542 extents) Extending logical volume stripe_lv to 6.02 GB Insufficient suitable allocatable extents for logical volume stripe_lv: 9 more required
看起来增加1个应该可以,每次执行也都提示成功。但是每次都提示增加到1534个LE。
[root@itlife365.com ~]# lvextend -l+1 /dev/vg01/stripe_lv
Using stripesize of last segment 64.00 KB
Rounding size (1534 extents) down to stripe boundary size for segment (1533 extents)
Extending logical volume stripe_lv to 5.99 GB
Logical volume stripe_lv successfully resized
[root@itlife365.com ~]# lvextend -l+1 /dev/vg01/stripe_lv
Using stripesize of last segment 64.00 KB
Rounding size (1534 extents) down to stripe boundary size for segment (1533 extents)
Extending logical volume stripe_lv to 5.99 GB
Logical volume stripe_lv successfully resized
然后以lvdisplay查看,LE的数量仍为1533,并未增加。至于为何会显示增加1个成功,就不晓得了~~~但从结果知道,其实并没有增加
[root@itlife365.com ~]# lvdisplay /dev/vg01/stripe_lv
--- Logical volume ---
LV Name /dev/vg01/stripe_lv
VG Name vg01
LV UUID TyF4aW-gegH-Vmxi-hWUl-a7t7-Vw5V-B64Eik
LV Write Access read/write
LV Status available
# open 1
LV Size 5.99 GB
Current LE 1533
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 768
Block device 253:4
再把剩余的另外2个pv加上,就一共增加了3个pv,正好与vg01的原pv数量相同,成倍数关系。此时vg01的pv个数变成了6个,是原来的2倍。
[root@itlife365.com ~]# vgextend /dev/vg01 /dev/sdh /dev/sdi Volume group "vg01" successfully extended [root@itlife365.com ~]# vgdisplay /dev/vg01 --- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 6 Metadata Sequence No 7 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 6 Act PV 6 VG Size 11.98 GB PE Size 4.00 MB Total PE 3066 Alloc PE / Size 1788 / 6.98 GB Free PE / Size 1278 / 4.99 GB VG UUID W6EwVP-YIva-iCqr-KuZf-B3jt-4cA3-4XcSv4
再用lvextend扩展空间,分别从LE和SIZE的角度扩展,均提示成功。
[root@itlife365.com ~]# lvextend -L+1024 /dev/vg01/stripe_lv Using stripesize of last segment 64.00 KB Rounding size (1789 extents) down to stripe boundary size for segment (1788 extents) Extending logical volume stripe_lv to 6.98 GB Logical volume stripe_lv successfully resized [root@itlife365.com ~]# resize2fs /dev/vg01/stripe_lv resize2fs 1.39 (29-May-2006) Filesystem at /dev/vg01/stripe_lv is mounted on /stripe; on-line resizing required Performing an on-line resize of /dev/vg01/stripe_lv to 1830912 (4k) blocks. The filesystem on /dev/vg01/stripe_lv is now 1830912 blocks long. [root@itlife365.com ~]# lvdisplay /dev/vg01/stripe_lv --- Logical volume --- LV Name /dev/vg01/stripe_lv VG Name vg01 LV UUID TyF4aW-gegH-Vmxi-hWUl-a7t7-Vw5V-B64Eik LV Write Access read/write LV Status available # open 1 LV Size 6.98 GB Current LE 1788 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 768 Block device 253:4 [root@itlife365.com ~]# lvextend -l+1278 /dev/vg01/stripe_lv Using stripesize of last segment 64.00 KB Extending logical volume stripe_lv to 11.98 GB Logical volume stripe_lv successfully resized [root@itlife365.com~]# resize2fs /dev/vg01/stripe_lv resize2fs 1.39 (29-May-2006) Filesystem at /dev/vg01/stripe_lv is mounted on /stripe; on-line resizing required Performing an on-line resize of /dev/vg01/stripe_lv to 3139584 (4k) blocks. The filesystem on /dev/vg01/stripe_lv is now 3139584 blocks long. [root@dbabc.net ~]# lvdisplay /dev/vg01/stripe_lv --- Logical volume --- LV Name /dev/vg01/stripe_lv VG Name vg01 LV UUID TyF4aW-gegH-Vmxi-hWUl-a7t7-Vw5V-B64Eik LV Write Access read/write LV Status available # open 1 LV Size 11.98 GB Current LE 3066 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 768 Block device 253:4
查看大小
[root@itlife365.com~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg00-lv_root 6.0G 398M 5.3G 7% / /dev/mapper/vg00-lv_usr 6.8G 1.7G 4.8G 26% /usr /dev/mapper/vg00-lv_data 93M 5.6M 83M 7% /data /dev/sdc1 988M 24M 914M 3% /boot /dev/mapper/vg01-stripe_lv 12.0G 141M 11.6G 97% /stripe
--end 由itlife365.com 收集整理