概述

为了满足在性能和冗余等方面的需求,LVM支持了下面三种Logic Volume:

  1. Linear Logic Volume   --线性逻辑卷
  2. Striped Logic Volume --条带化逻辑卷
  3. Mirror Logic Volume   --镜像逻辑卷

Linear Logic Volume

我们用lvcreate命令默认创建出来的就是线性逻辑卷,线性逻辑卷使用的PE可以来自一个PV,也可以来自多个PV,一般情况下是先从第一个PV中分配PE,如果这个PV的PE已经分配完了,再依次从第二个PV、第三个PV里分配。可以通过指定PV甚至PE的号段来让Linear LV的PE分散到各个PV上,但是如果其中一个PV坏了,那么这个Linear LV可能也就没法用了。Linear LV的size可以直接用-L指定大小,也可以用-l指定分配PE的个数。往Linear LV中写入数据时,先往第一个PV的PE中写,直到第一个PV上分配的空间用完了才会将数据写到第二个PV。

Linear LV只能满足弹性分配的需求,无法满足性能和冗余的需求,是最普通的volume,但是Linear LV也可以通过lvconvert命令切换成Mirror LV来提供冗余能力。

  1.  
    root@hunk-virtual-machine:/home/hunk# lvcreate -l 100 -n linearlv VolGroup1 /dev/sdc:1280-1305 /dev/sdd:1280-1
  2.  
    305 /dev/sde:1280-1305 /dev/sdf:1280-1305

Striped Logic Volume

Striped LV的底层存储布局类似于RAID0,它是跨多个PV的,具体是跨多少个PV用-i指定,但是肯定不能超过VG中PV的数量,Striped LV的最大size取决于剩余PE最少的那个PV。

Striping的意思是将每个参与Striping的PV划分成等大小的chunk(也叫做stripe unit),每个PV同一位置的这些chunk共同组成一个stripe。比如下面这张图(来自于RedHat6官方文档),包含三个PV,那么红色标识的1、2、3这3个chunk就组成了stripe1,4、5、6组成stripe2。chunk的大小可以通过-I或者--stripesize来指定,但是不能超过PE的大小。

比如,向Striped LV写入数据时,数据被分成等大小的chunk,然后将这些chunk顺序写入这些PV中。这样的话就会有多个底层disk drive并发处理I/O请求,可以得到成倍的聚合I/O性能。还是下面这张图,假如现在有一个4M数据块需要写入LV,stripesize设置的512K,LVM把它切成8个chunk,分别标识为chunk1、chunk2...,这些chunk写入PV的顺序如下:

  1. chunk1写入PV1
  2. chunk2写入PV2
  3. chunk3写入PV3
  4. chunk4写入PV1
  5. ...

因为LVM无法判断多个Physics Volume是否来自同一个底层disk,如果Striped LV使用的多个Physics Volume实际上是同一个物理磁盘上的不同分区,就会导致一个数据块被切成多个chunk分多次发给同一个disk drive,这种情况实际上Striped LV并不能提升性能,反而会使性能下降。所以说,Striped LV提升I/O性能的本质是让多个底层disk drive并行处理I/O请求,而不是表面上的把I/O分散到了多个PV上。

Striped LV主要满足性能需求,没有做任何冗余,所以没有容错能力,如果单个disk损坏,就会导致数据损坏。

root@hunk-virtual-machine:/home# lvcreate -L 20G --stripes 4 --stripesize 256 --name stripevol VolGroup1
 

Mirror Logic Volume

Mirror LV就是各个PV之间做冗余,类似于RAID1,通过-m指定冗余数量。Mirror LV提供冗余能力,可以有效解决磁盘单点故障问题,但是性能方面没有帮助。Linear LV和Mirror LV直接用lvconvert工具来相互切换,Mirror LV在创建后也可以更改冗余数,具体用法请参考man page。

  1.  
    root@hunk-virtual-machine:/home/hunk# lvcreate -l 100 -m1 -n mirrorvol VolGroup1
  2.  
    Logical volume "mirrorvol" created.
  3.  
    root@hunk-virtual-machine:/home/hunk# lvdisplay /dev/VolGroup1/mirrorvol -m
  4.  
    --- Logical volume ---
  5.  
    LV Path /dev/VolGroup1/mirrorvol
  6.  
    LV Name mirrorvol
  7.  
    VG Name VolGroup1
  8.  
    LV UUID YxgfYi-c7nK-wk4v-rlu1-vRdh-MTMb-uVfl2v
  9.  
    LV Write Access read/write
  10.  
    LV Creation host, time hunk-virtual-machine, 2018-11-29 01:39:44 +0800
  11.  
    LV Status available
  12.  
    # open 0
  13.  
    LV Size 400.00 MiB
  14.  
    Current LE 100
  15.  
    Mirrored volumes 2
  16.  
    Segments 1
  17.  
    Allocation inherit
  18.  
    Read ahead sectors auto
  19.  
    - currently set to 256
  20.  
    Block device 252:8
  21.  
     
  22.  
    --- Segments ---
  23.  
    Logical extents 0 to 99:
  24.  
    Type raid1
  25.  
    Monitoring monitored
  26.  
    Raid Data LV 0
  27.  
    Logical volume mirrorvol_rimage_0
  28.  
    Logical extents 0 to 99
  29.  
    Raid Data LV 1
  30.  
    Logical volume mirrorvol_rimage_1
  31.  
    Logical extents 0 to 99
  32.  
    Raid Metadata LV 0 mirrorvol_rmeta_0
  33.  
    Raid Metadata LV 1 mirrorvol_rmeta_1

测试Linaer/Striped LV

准备多个disk

在测试环境中添加了4个virtual disk,size都是10GB。

先用这4个virtual disk创建一个type为linear,size为20GB的Linaer LV,从后面查询LV的详情可以看出,这个LV实际上跨了3个PV。

  1.  
    root@hunk-virtual-machine:/home/hunk# pvcreate /dev/sd[cdef]
  2.  
    Physical volume "/dev/sdc" successfully created
  3.  
    Physical volume "/dev/sdd" successfully created
  4.  
    Physical volume "/dev/sde" successfully created
  5.  
    Physical volume "/dev/sdf" successfully created
  1.  
    root@hunk-virtual-machine:/home/hunk# vgcreate VolGroup1 /dev/sd[cdef]
  2.  
    Volume group "VolGroup1" successfully created
  1.  
    root@hunk-virtual-machine:/home/hunk# lvcreate -L 20G -n linnervol VolGroup1
  2.  
    Logical volume "linnervol" created.
  1.  
    root@hunk-virtual-machine:/home/hunk# mkfs.ext4 /dev/VolGroup1/linnervol
  2.  
    root@hunk-virtual-machine:/home/hunk# mount /dev/VolGroup1/linnervol /volumetest
  3.  
    root@hunk-virtual-machine:/home/hunk# df -h |grep linnervol
  4.  
    /dev/mapper/VolGroup1-linnervol 20G 44M 19G 1% /volumetest

测试Linear LV

现在,用bonnie++来模拟IO,不停地向这个LV中写入数据。

  1.  
    root@hunk-virtual-machine:/volumetest# bonnie++ -n 0 -u 0 -r `free -m | grep 'Mem:' | awk '{print $2}'` -s $(echo "scale=0;`free -m | grep 'Mem:' | awk '{print $2}'`*2" | bc -l) -f -b -d /volumetest/
  2.  
    Using uid:0, gid:0.
  3.  
    Writing intelligently...

在新窗口用bwm-ng来监控4个磁盘的IO速率,我们发现只有sdc上面有I/O请求,然而其他disk都很空闲,看着sdc一个家伙在忙。

bwm-ng -i disk -I sdc,sdd,sde,sdf
 
  1.  
    bwm-ng v0.6 (probing every 0.500s), press 'h' for help
  2.  
    input: disk IO type: rate
  3.  
    \ iface Rx Tx Total
  4.  
    ==============================================================================
  5.  
    sdc: 0.00 KB/s 12263.47 KB/s 12263.47 KB/s
  6.  
    sdd: 0.00 KB/s 0.00 KB/s 0.00 KB/s
  7.  
    sde: 0.00 KB/s 0.00 KB/s 0.00 KB/s
  8.  
    sdf: 0.00 KB/s 0.00 KB/s 0.00 KB/s
  9.  
    ------------------------------------------------------------------------------
  10.  
    total: 0.00 KB/s 12263.47 KB/s 12263.47 KB/s

我们继续查看LV中写入数据的量,直到写入数据超过10G时,发现sdc已经不再处理I/O请求了,因为数据已经塞满了嘛。而sdd开始继续处理持续的I/O请求。在写入数据10G多一点的时候,中间实际上有个过度过程,就是sdc和sdf都在处理I/O,这个是因为缓冲造成的。

  1.  
    root@hunk-virtual-machine:/home/hunk# df -h |grep linner
  2.  
    /dev/mapper/VolGroup1-linnervol 20G 11G 8.1G 57% /volumetest
  1.  
    bwm-ng v0.6 (probing every 0.500s), press 'h' for help
  2.  
    input: disk IO type: rate
  3.  
    | iface Rx Tx Total
  4.  
    ==============================================================================
  5.  
    sdc: 0.00 KB/s 0.00 KB/s 0.00 KB/s
  6.  
    sdd: 0.00 KB/s 12263.47 KB/s 12263.47 KB/s
  7.  
    sde: 0.00 KB/s 0.00 KB/s 0.00 KB/s
  8.  
    sdf: 0.00 KB/s 0.00 KB/s 0.00 KB/s
  9.  
    ------------------------------------------------------------------------------
  10.  
    total: 0.00 KB/s 12263.47 KB/s 12263.47 KB/s

测试Stripe LV

移除前面使用的Linear LV

  1.  
    root@hunk-virtual-machine:/home# lvremove /dev/VolGroup1/linnervol
  2.  
    Do you really want to remove and DISCARD active logical volume linnervol? [y/n]: y
  3.  
    Logical volume "linnervol" successfully removed

创建一个条带化的LV

  1.  
    root@hunk-virtual-machine:/home# lvcreate -L 20G --stripes 4 --stripesize 256 --name stripevol VolGroup1
  2.  
    WARNING: ext4 signature detected on /dev/VolGroup1/stripevol at offset 1080. Wipe it? [y/n]: y
  3.  
    Wiping ext4 signature on /dev/VolGroup1/stripevol.
  4.  
    Logical volume "stripevol" created.
  5.  
    root@hunk-virtual-machine:/home# lvdisplay /dev/VolGroup1/stripevol -m
  6.  
    --- Logical volume ---
  7.  
    LV Path /dev/VolGroup1/stripevol
  8.  
    LV Name stripevol
  9.  
    VG Name VolGroup1
  10.  
    LV UUID z0MGOg-g6JL-hiE8-9Gt0-RZAJ-K29m-I6tcrS
  11.  
    LV Write Access read/write
  12.  
    LV Creation host, time hunk-virtual-machine, 2018-11-27 01:45:41 +0800
  13.  
    LV Status available
  14.  
    # open 0
  15.  
    LV Size 20.00 GiB
  16.  
    Current LE 5120
  17.  
    Segments 1
  18.  
    Allocation inherit
  19.  
    Read ahead sectors auto
  20.  
    - currently set to 4096
  21.  
    Block device 252:6
  22.  
     
  23.  
    --- Segments ---
  24.  
    Logical extents 0 to 5119: #Striped LV映射的PE均匀分布在了4个PV上
  25.  
    Type striped
  26.  
    Stripes 4
  27.  
    Stripe size 256.00 KiB
  28.  
    Stripe 0:
  29.  
    Physical volume /dev/sdc
  30.  
    Physical extents 0 to 1279
  31.  
    Stripe 1:
  32.  
    Physical volume /dev/sdd
  33.  
    Physical extents 0 to 1279
  34.  
    Stripe 2:
  35.  
    Physical volume /dev/sde
  36.  
    Physical extents 0 to 1279
  37.  
    Stripe 3:
  38.  
    Physical volume /dev/sdf
  39.  
    Physical extents 0 to 1279
  1.  
    root@hunk-virtual-machine:/home# mkfs.ext4 /dev/VolGroup1/stripevol
  2.  
    mke2fs 1.42.13 (17-May-2015)
  3.  
    Creating filesystem with 5242880 4k blocks and 1310720 inodes
  4.  
    Filesystem UUID: 51dbdea0-48fc-4324-9974-42443e424aa0
  5.  
    Superblock backups stored on blocks:
  6.  
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
  7.  
    4096000
  8.  
     
  9.  
    Allocating group tables: done
  10.  
    Writing inode tables: done
  11.  
    Creating journal (32768 blocks): done
  12.  
    Writing superblocks and filesystem accounting information: done
  13.  
     
  14.  
    root@hunk-virtual-machine:/home# mount /dev/VolGroup1/stripevol /volumetest/
  15.  
    root@hunk-virtual-machine:/home# df -h |grep stripe
  16.  
    /dev/mapper/VolGroup1-stripevol 20G 44M 19G 1% /volumetest

用同样的方法测试这个条带化的LV,不过这里的测试比较粗糙,不仅忽略了很多测试要素,前面对Linear LV的测试中bwm的I/O速率是每0.5s一次的采样值,而这里Striped LV的取的I/O速率是30s内的均值。不过我们这里并不是想得到准确的I/O速率,就先不考虑这些因素吧。明显能看出来4个disk在并行的处理I/O请求,也就是给Striped LV的I/O请求最终被分散到了多个底层disk上面,这样聚合的I/O效率必然会高出好几倍。

bwm-ng -i disk -I sdc,sdd,sde,sdf
 
  1.  
    bwm-ng v0.6 (probing every 0.500s), press 'h' for help
  2.  
    input: disk IO type: avg (30s) --取30S内采用的均值
  3.  
    / iface Rx Tx Total
  4.  
    ==============================================================================
  5.  
    sdc: 0.13 KB/s 10010.92 KB/s 10011.05 KB/s
  6.  
    sdd: 0.00 KB/s 10174.32 KB/s 10174.32 KB/s
  7.  
    sde: 0.00 KB/s 6563.85 KB/s 6563.85 KB/s
  8.  
    sdf: 0.00 KB/s 6113.09 KB/s 6113.09 KB/s
  9.  
    ------------------------------------------------------------------------------
  10.  
    total: 0.13 KB/s 32862.18 KB/s 32862.32 KB/s
 
 

Linux LVM--三种Logic Volume的更多相关文章

  1. Ubuntu Linux系统三种方法添加本地软件库

    闲着没事教教大家以Ubuntu Linux系统三种方法添加本地软件库,ubuntu Linux使用本地软件包作为安装源——转2007-04-26 19:47新手重新系统的概率很高,每次重装系统后都要经 ...

  2. Linux的三种网络适配器

    Linux的三种网络适配器 分别为:桥接模式(Bridged),NAT模式,仅主机模式. 仅主机模式:        2>NAT模式 NAT 是虚拟机和本地网络使用一个ip地址 3>桥接模 ...

  3. Linux 下三种提高工作效率的文件处理技巧

    Linux 下三种提高工作效率的文件处理技巧 在 Linux 下工作,打交道最多的就是文件了,毕竟 Linux 下工作一切皆文件嘛.Linux 也为大家提供了多种用于处理文件的命令,合理使用这些命令可 ...

  4. Linux 下三种方式设置环境变量

    1.在Windows 系统下,很多软件安装都需要配置环境变量,比如 安装 jdk ,如果不配置环境变量,在非软件安装的目录下运行javac 命令,将会报告找不到文件,类似的错误. 2.那么什么是环境变 ...

  5. 【环境变量】Linux 下三种方式设置环境变量

    1.在Windows 系统下,很多软件安装都需要配置环境变量,比如 安装 jdk ,如果不配置环境变量,在非软件安装的目录下运行javac 命令,将会报告找不到文件,类似的错误. 2.那么什么是环境变 ...

  6. 【环境变量】Linux 下三种方式设置环境变量与获取环境变量

    1.在Windows 系统下,很多软件安装都需要配置环境变量,比如 安装 jdk ,如果不配置环境变量,在非软件安装的目录下运行javac 命令,将会报告找不到文件,类似的错误. 2.那么什么是环境变 ...

  7. 在Linux中三种让crontab每秒执行任务的方法

    第一种方法: 1.创建脚本文件 cat phplog.sh 2.编辑脚本内容 #!/bin/bash while : ;do /home/scripts.sh 2>/dev/null & ...

  8. linux 自启动 | 三种方式自启动

    linux 实现自启动有多种方式,通过Linux 底层启动原理介绍,便可以理解以下几种方式 这里简单介绍一下这几种方式 一.自定义开机程序   /etc/rc.d/rc.local  1.vim  / ...

  9. Linux中三种SCSI target的介绍之STGT

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/scaleqiao/article/deta ...

随机推荐

  1. VC6.0- C语言-winsocket-警告warning C4761

    错误介绍 操作系统:windows10 IDE:VC6.0 语言:C语言 项目内容简介:编写一个双人网络海战棋对战游戏 警告类型:警告warning C4761 integral size misma ...

  2. Windows MySql增量备份、完整备份采坑之路

    1.前言 这周公司交给我一个任务,负责项目Mysql数据库的备份,因为项目上线后数据是一个大问题,出了什么问题数据才是最大的问题,备份这时候就显得尤为重要, 公司项目的思路是:在项目系统设置内可以勾选 ...

  3. C# vb实现浮雕特效滤镜效果

    在.net中,如何简单快捷地实现Photoshop滤镜组中的浮雕效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步 ...

  4. MVC比WebForm的优势,为什么使用MVC

    前言 如果你看了最近微软的议程,你会发现他们现在的焦点除了MVC,还是MVC.问题在于为什么微软如此热衷于丢弃传统的APS.NET Webform而转向ASP.NET MVC?本文就主要来讨论这个问题 ...

  5. ② Python3.0 运算符

    Python3.0 语言支持的运算符有: 算术运算符.比较(关系)运算符.赋值运算符.逻辑运算符.位运算符.成员运算符.身份运算符.运算符优先级 一.算术运算符 常见的算术运算符有+,-,*,/,%, ...

  6. PKCS 标准

    PKCS 标准 The Public-Key Cryptography Standards (PKCS)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请.证书更新.证书 ...

  7. 深入理解TCP三握四挥

    面试中被问到不少次TCP的三握四挥,今天特意来做一个总结(一些资料是很久前找的,忘了参考的链接了) 一.三次握手 首先来看一张图 最初,客户机A与服务器B的TCP进程都处于 CLOSED 状态. 然后 ...

  8. SQL*Plus 与数据库的交互(SQL*Plus时什么)

    Oracle 的 SQL*Plus 是与数据库进行交互的客户端工具,在 SQL*Plus中,可以运行 SQL*Plus 命令与 SQL*Plus 语句.   SQL*Plus 时一个基于 C/S 两层 ...

  9. python(if判断)

    一.if判断 如果 条件满足,才能做某件事情, 如果 条件不满足,就做另外一件事情,或者什么也不做 注意: 代码的缩进为一个 tab 键,或者 4 个空格 在 Python 开发中,Tab 和空格不要 ...

  10. php与ajax技术

    web2.0的到来,ajax逐渐成为主流,什么是ajax,ajax的开发模式,优点,使用技术.(ajax概述,ajax使用的技术,需要注意的 问题,在PHP应用ajax技术的应用) 什么是ajax,a ...