美文网首页
lvm基本操作

lvm基本操作

作者: 夜游上河园 | 来源:发表于2019-01-13 22:31 被阅读0次

    一、背景及特性

    LVM是Logical Volume Manager逻辑卷管理,包括分配磁盘,以及对逻辑卷进行striping/mirroring/resizing操作. 将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,相对于普通的磁盘分区有很大的灵活性:

    1.使系统管理员可以更方便的为应用与用户分配存储空间。
    2.在LVM管理下的存储卷可以按需要随时改变大小与移除 。
    3.LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如"sales'、'development')代替物理磁盘名(如'sda'、'sdb')来标识存储卷。

    二、原理

    LVM的基本术语

    术语 术语解释
    physicalvolume/PV物理卷 物理的磁盘分区,是lvm的基本存储逻辑块.
    Volume group/VG 卷组 由一个或者多个物理卷组成,可以在卷组上面创建一个或多个逻辑卷.
    Logicalvolume/LV逻辑卷 就是从VG中划分的逻辑分区,在逻辑卷上可以创建文件系统(比如/home,/usr等)
    physical extent/PE 每一个物理卷被划分为称为PE(PhysicalExtents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
    Logical extent/LE 逻辑卷也被划分为被称为LE(LogicalExtents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

    将一个或多个硬盘的分区即PV在逻辑上集合,相当于一个大硬盘即VG来使用./boot分区不可以在逻辑卷组上,否则bootloader会无法读取.

    逻辑卷组可以分成一个或多个逻辑卷中,逻辑卷挂在到不同的挂在点上,如/home,/等.当逻辑卷空间不够时,也可以通过freespace来扩大空间.

    三、创建及查询命令

    创建一个LVM系统

    1.创建分区

    sudo fdisk -l    查看磁盘分区表
    $ fdisk -l 
    Disk /dev/sda: 1073.7 GB, 1073741824000 bytes 
    255 heads, 63 sectors/track, 130541 cylinders, total 2097152000 sectors 
    Units = sectors of 1 * 512 = 512 bytes 
    Sector size (logical/physical): 512 bytes / 512 bytes 
    I/O size (minimum/optimal): 512 bytes / 512 bytes 
    Disk identifier: 0x0004caf1 
     
       Device Boot      Start         End      Blocks   Id  System 
    /dev/sda1   *        2048     3905535     1951744   83  Linux 
    /dev/sda2         3905536  2097149951  1046622208   8e  Linux LVM 
    

    sudo fdisk /dev/sdb 使用fdisk创建分区,根据设备文件的绝对路径(/dev/sda2)进入分区管理,进行各种操作和配置

    $ sudo fdisk/dev/sdb
    Device containsneither a valid DOS partition table, nor Sun, SGI or OSF disklabel
    Building a new DOSdisklabel with disk identifier 0x181c01b0.
    Changes will remainin memory only, until you decide to write them.
    After that, ofcourse, the previous content won't be recoverable.
    Warning: invalidflag 0x0000 of partition table 4 will be corrected by w(rite)
    Command (m forhelp): m
    Command action
    a toggle abootable flag
    b edit bsddisklabel
    c toggle thedos compatibility flag
    d delete apartition
    l list knownpartition types
    m print thismenu
    n add a newpartition
    o create a newempty DOS partition table
    p print thepartition table
    q quit withoutsaving changes
    s create a newempty Sun disklabel
    t change apartition's system id
    u changedisplay/entry units
    v verify thepartition table
    w write tableto disk and exit
    x extrafunctionality (experts only)
    

    如下链接有非常详细的图片过程:

    http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html

    https://www.howtoforge.com/linux_lvm

    parttprope #使分区表生效,不用重启
    fdisk -l 
    cat/proc/partitons #查看验证
    

    注意:一定要指定分区的格式为8e,这是LVM的分区格式;一个物理硬盘可以分成一个或多个分区,分区所用空间总和可以小于等于硬盘的大小,剩下的为freespace, 可以以后再用.

    2.创建PV物理卷

    pvcreate /dev/sdb1/dev/sdb2或者pvcreate vg00 /dev/sdb{1,2}
    pvdisplay #或者pvs或者pvscan查看已存在pv
    $ pvdisplay
    --- Physicalvolume ---
    PV Name /dev/sda2
    VG Name vg00
    PV Size 998.14 GiB / not usable 4.00 MiB
    Allocatable yes
    PE Size 4.00 MiB
    Total PE 255522
    Free PE 111120
    Allocated PE 144402
    PV UUID YfhPzW-8kE4-suZM-97ON-uIdC-nOwr-hYuu4J
    

    3.创建vg卷组

    vgcreate vg00/dev/sdb1 /dev/sdb2 #利用一个或多个物理卷来创建逻辑卷组.
    vgdisplay  #或者vgs或者vgscan查看验证
    

    4.创建lv逻辑卷

    PV创建好了才能建立VG,VG建立好了才能创建逻辑卷.

    lvcreate -L 100M -nlv-test1 vg00 #在vg00卷组创建一个大小为100M,名为lv-test1的逻辑卷.
    lvdisplay #或者lvs或者lvscan显示lv信息
    $ lvdisplay
    --- Logical volume---
    LV Path /dev/vg00/swap
    LV Name swap
    VG Name vg00
    LV UUID Xlal23-STfh-khN6-Drh8-dYMY-UCIn-I77H2y
    LV Write Access read/write
    LV Creation host,time mali-builder6, 2018-04-24 15:44:56 +0800
    LV Status available
    # open 2
    LV Size 29.80 GiB
    Current LE 7629
    Segments 1
    Allocation inherit
    Read ahead sectors auto
    - currently set to 256
    Block device 252:0
    --- Logical volume---
    LV Path /dev/vg00/root
    LV Name root
    VG Name vg00
    LV UUID Qi6h7X-qPuw-O3Eg-wxEW-qNTc-AulQ-ux8KRP
    LV Write Access read/write
    LV Creation host,time mali-builder6, 2018-04-24 15:44:56 +0800
    LV Status available
    # open 1
    LV Size 13.97 GiB
    Current LE 3576
    Segments 1
    Allocation inherit
    Read ahead sectors auto
    - currently set to 256
    Block device 252:1
    --- Logical volume---
    LV Path /dev/vg00/tmp
    LV Name tmp
    VG Name vg00
    LV UUID twQEC7-PD5h-VgKW-AW5L-Azb9-hnY0-ylW8QB
    LV Write Access read/write
    LV Creation host,time mali-builder6, 2018-04-24 17:50:26 +0800
    LV Status available
    # open 0
    LV Size 20.00 GiB
    Current LE 5120
    Segments 1
    Allocation inherit
    Read ahead sectors auto
    - currently set to 256
    Block device 252:2
    

    5.lv格式化和挂载

    逻辑卷创建好了之后,就可以在上面创建文件系统了.

    注意:逻辑卷的引用需要逻辑卷的设备文件,逻辑卷的设备文件有两种书写形式:

    /dev/vg_name/lv_name
    /dev/mapper/vg_name-lv_name
    

    经过格式化操作之后,LV才能存储数据

    mkfs -t ext4/dev/vg00/lv-test1

    将格式化后的LV分区挂载到指定的目录下面.

    mkdir /root/test
    mount/dev/vg00/lv-test1 /root/test/
    

    (创建好之后,会在/dev/mapper/生成一个软连接名字为”卷组-逻辑卷”)

    ll /dev/vgdata/vg00
    df -h
    

    /etc/fstab里面添加自动mount

    四、管理命令

    任务 PV阶段 VG阶段 LV阶段
    查找(scan) pvscan vgscan lvscan
    新建(create) pvcreate vgcreate lvcreate
    显示(display) pvdisplay vgdisplay lvdisplay
    增加(extend) vgextend lvextend
    减少(reduce) vgreduce lvreduce
    删除(remove) pvremove vgremove lvremove
    改变容量(resize) pvresize lvresize
    改变属性(attribute) pvchange vgchange lvchange

    1.扩大卷组

    pvcreate /dev/sdb3#再创建一个物理卷分区
    vgextend vg00/dev/sdb3 #将创建好的分区加入到需要扩大的卷组中
    vgs #查看
    

    2.扩大逻辑卷

    首先要确定逻辑卷对应的卷组下有足够扩充的空间.

    lvextend -L +66gG/dev/mapper/vg00-root
    resize2fs/dev/mapper/vg00-root
    lvs
    

    3.缩减卷组

    有时候,某些分区坏了,可能需要移除逻辑卷.同时卷组的空间大小也减少了.

    pvmove /dev/sdb1/dev/sdb2 #通过pvmove命令转移空间数据
    vgreduce vg00/dev/sdb1 #将分区从卷组vg00里面移除除去
    pvremove /dev/sdb1 #通过pvremove命令将分区从系统中删除掉(不一定需要)
    

    4.缩减逻辑卷

    umount mount_point #先卸载逻辑卷
    e2fsck -f/dev/vg00/lv_name #通过e2fsck命令检测逻辑卷上空余空间
    resize2fs/dev/vg00/lv_name size_new #将文件系统减小至size_new大小
    lvreduce -L size_new /dev/vg00/lv_name #将逻辑卷大小减小至size_new
    df -hl查看
    mount/dev/vg00/lv_name /mount_point #重新挂载,继续使用
    

    注意:文件系统大小和逻辑卷大小一定要保持一致才行。如果逻辑卷大于文件系统,由于部分区域未格式化成文件系统会造成空间的浪费。如果逻辑卷小于文件系统,哪数据就出问题了。

    5.删除逻辑卷,卷组和物理卷

    umount /mount_point #先卸载逻辑卷
    vim /etc/fstab #修改下fstab里面逻辑卷的自动挂载信息
    lvremove/dev/vg00/lv_name #删除逻辑卷
    vgremove vg00 #删除卷组
    pvremove /devsdb1/dev/sdb2 #将物理卷转化成普通分区
    用pvs/vgs/lvs查看
    sudo fdisk /dev/sdb1#更改分区ID标识,修改成普通linux分区,而不是8e.
    

    6.创建快照卷

    https://www.tecmint.com/take-snapshot-of-logical-volume-and-restore-in-lvm/ 这个文章说的非常详细,推荐下。

    快照(snapshot)是LVM所提供的一个非常有用的特性。它的原理是复制Origin原始卷的元数据(metadata)来创建一个逻辑卷,并没有复制物理卷上的任何数据,因此它的创建过程是实时瞬间完成的。快照是特殊类型的逻辑卷,它含有创建时刻所指定的原始逻辑卷的完整数据,您可以操作快照而无需担心数据的变更令备份失效。

    当一个snapshot创建的时候,仅拷贝原始卷里的源数据,这不是物理上的数据拷贝,因此snapshot的创建特别快,当原始卷里的数据有写入时,备份卷开始记录原始卷哪些数据发生了变化,然后在原始卷新数据覆盖旧数据时,将旧数据拷贝到snapshot的预留空间里,起到备份数据的作用,就保证了所有数据和创建备份卷之前的数据一致性。

    而对于snapshot的读操作,如果是读取数据块是没有修改过的,那么会将读操作直接重定向到原始卷上,如果是要读取已经修改过的块,那么就读取拷贝到snapshot中的块。所以当原始卷破坏了之后还能用snapshot备份的数据还原.

    注意:snapshot其实是一个逻辑卷;snapshot只能对同一个卷组的逻辑卷进行备份.

    #创建快照
    lvcreate --snapshot--size 50g --name snapshot_name /dev/vg00/lv_name
    lvscan #查看
    #挂在快照卷
    mkdir /tmp/snapshot
    mount/dev/vg00/snapshot_name /tmp/snapshot
    #此时的快照卷就像是普通的逻辑卷,可以进行增加,缩小,删除等操作
    #此时你可以在原来的逻辑卷内进行修改等操作
    #恢复快照
    umount /tmp/snapshot #卸载
    lvconvert --merge /dev/vg00/snapshot_name #方法一
    #或者方法二
    lvchange --refresh vg00/snapshot_name
    lvremove --force vg00/snapshot_name

    相关文章

      网友评论

          本文标题:lvm基本操作

          本文链接:https://www.haomeiwen.com/subject/zlfrdqtx.html