逻辑卷(LVM)管理

LVM

LVM 逻辑卷管理器(实现一个可以弹性调整容量的文件系统,而不是着眼于效能与安全。)

PV(Physical Volume): 物理卷

我们实际的分区(partitiono)或磁盘(disk)需要调整系统标识符(systemID)为8e(LVM的标识符),然后再经过pvcreate的指令将它转成LVM最底层的物理卷(PV)

相关名词
VG(Volume Group) 卷组--就是LVM组合起来的大磁盘,最多包含65534个PE
LV(Logic Volume) 逻辑卷,其名称通常为/dev/vgname/lvname,数据写入LV有两种模式:线性(一个partition写完再写另一个),交错(就像raid0)
PE(Physical Extent) 物理范围块(预设为4MB,是LV的最小储存区块)
LV(逻辑卷) 在32位系统上最多仅能含有65534个PE(物理范围块),因此预设的LVM的LV会有256G

各命令使用与创建流程

流程如下:
1.分区或磁盘 -->(fdisk修改前者的SystemID为8e) -->(pvcreate命令)-->2.PV物理卷
    各阶段的相关命令:

    PV阶段:pv名称就是分区名或磁盘名如 /dev/sdb2
        fdisk /path/to/partition:修改分区或磁盘的SystemID为8e
        pvscan: 搜寻目前系统里面任何具有PV的磁盘
        pvcreate /path/to/partition: 将实体分区或磁盘创建成为PV
            pvdisplay [/path/to/partition]: 显示目前系统上面的PV状态
        pvmove: 将指定pv里的已经被分配的PE移到其它的pv里
                        例如:pvmove /dev/sdc1 /dev/scb1
        pvremove : 将PV属性(擦除元数据)移除,让该partition不具有PV属性.
                                    
    VG阶段:
        vgcreate: 就是主要建立VG的指令
        用法格式: vgcreate [-s Num[bBsSkKmMgGtTpPeE]] VG名 PV名
            -s, --physicalextentsize : 后面接PE的大小(size),单位可以是m,g,t(大小写均可)不写的话默认为4M
            例: vgcreate -s 16M uangianlap_VG /dev/sdb{1,2,3}
        vgscan: 搜寻系统上面是否有VG存在?
        vgdisplay VG名: 显示目前系统上面的VG状态
        vgextend VG名 增加的PV名: 在VG内增加额外的PV  
            例如:vgextend vbirdvg /dev/sdc1    这里VG在创建的时候指定PE的大小了,所以这里不用再指定。
            
        vgreduce VG名 pv名: 在VG内移除PV
        vgchange: 设定VG是否启动(active)
        vgremove VG名: 删除一个VG
            vgrename 
                
    LV阶段:
        lvcreate: 建立LV
        用法格式:lvcreate [-L NUM[mgt]] [-n LV名] VG名
                -L|--size: 逻辑卷的大小(必须为PE(创建VG时指定)的倍数) LogicalVolumeSize[b|B|s|S|k|K|m|M|g|G|t|T|p|P|e|E]
                -l: 后面可以接PE的个数,
                -n,--name: 接逻辑卷名
                -T|--thin: 创建一个Thin Pool
        lvscan: 查询系统上面的LV
        lvdisplay: 显示系统上面的LV状态
        lvextend : 扩展LV里面容量(扩展的其实是物理边界大小,需要运行resize2fs命令,如resize2fs -p /dev/myvg/testlv 进行逻辑大小的调整)
            用法格式: lvextend -L [+]size  LogicalVolumePath [PhysicalVolumePath](没有+号则指定最终大小为size)
                    -L, --size=[bBsSkKmMgGtTpPeE]: 
        resize2fs(针对ext系文件系统): 例如,resize2fs /PATH/TO/PV 3G 其调整的是逻辑边界大小
        lvreduce  LV名: 在LV里面减少容量
            用法格式: lvreduce [-]LogicalVolumeSize[bBsSkKmMg-GtTpPeE]}
        lvremove LV名... : 删除一个LV                
        lvresize: 对LV进行容量大小的调整.

扩展LV:不需要卸载文件系统

    1.lvextend -L 5G /dev/myvg/testlv    (需要确定VG里有相应的未分配容量可用)
    2.resize2fs -p /dev/myvg/testlv 

缩减LV:

    1.取消LV挂载 umount /mnt/lv0 
    2.e2fsck -f /dev/vg0/lv0   (在 缩减之前应该先强行检查文件,以确保文件系统处于移植性状态)
    3.resize2fs /dev/vg0/lv0 10G(并确保缩减到的大小能可存储原有的数据.)
    4.lvreduce -L 10G /dev/vg0/lv0
    5.mount -a

快照卷

1.其生命周期为整个数据时长:在这段时长内,数据的增长量不能走出快照卷大小
2.快照卷应该是只读的

  1. 跟原卷在同一卷组内
    创建格式: lvcreate -L # -n SLV_NAME -s -p r /PATH/TO/LV
    移除快照卷: lvremove /dev/myvg/testlv-snap

lvresize

例如:lvresize -L +500M /dev/vbirdvg/vbirdlv   (前提是LV所在的VG里至少有500M的空闲容量(vgdisplay VG名 查看))
            xfs_info /srv/lvm:
            xfs_growfs /srv/lvm: 将lvm变更后的容量同步更新到挂载点(这里因为vbirdlv写入的文件系统是xfs所以才用此命令)
            
            resize2fs: 
                用法:resize2fs [-f] [device] [size]
                例如:resize2fs /dev/vbirdvg/vbirdlv

逻辑卷实例操作:

            1.划分4个分区,如/dev/sdb{1..4},每个分区为1G,设置system ID为8e
            2.pvcreate /dev/sdb{1..4} 分别创建4个PV,其名称与partition一样。
            3.pvscan 或 pvdisplay检查一下是否执行成功
            4.vgcreate -s 16M vbirdvg /dev/sdb{1..4}     创建VG ,另外意到这里vg名可以任意指定
                                                                                  -s 自定义每个PE的大小为16M
            5.vgscan 或 vgdisplay 检查
            6.lvcreate -l 200 -n vbirdlv vbirdvg                创建LV,  -l参数指定PE个数, 最后一个参数是VG名
            7. ls -l /dev/vbirdvg/vbirdlv;  lvdisplay      检查LV是否创建成功,注意LV的名称。
            8. mkfs -t ext4 /dev/vbirdvg/vbirdlv         给创建的LV创建文件系统(格式化)
            9. mkdir /mnt/lvm 创建挂载目录
            10. mount /dev/vbirdvg/vbirdlv /mnt/lvm       挂载LV设备文件
            11.如何扩展LV的容量--> vgextend vbirdvg /dev/sdc1 -->在VG里添加一个PV
            12.lvresize -l +100 /dev/vbirdvg/vbirdlv   -->注意这里的+号不能少,不然的话将是设定lv的PE总数为100个的意思。
                                                          而且这里对lv大小作调整的同时并不需要解除其挂载关系。
            13.到了这一步我们的LV里应该已经有了300个PE即4.68G的大小,但是执行df -Th /mnt/lvm时却只看到还是上一次200个                                                       
               的200个PE,但是lvdisplay时却是增加了的。所以这里还是要使用resize2fs(只对ext系的文件系统有效)处理一下。
            14.执行命令: resize2fs /dev/vbirdvg/vbirdlv   
            15.第11步是扩展LV容量,那么要缩小该如何设置呢? 先解挂载umont /mnt/lvm 
                2.e2fsck -f /dev/vg0/lv0
                3.resize2fs /dev/vg0/lv0 10G
                4.lvreduce -L 10G /dev/vg0/lv0
                5.mount -a
                例如:lvresize -L +500M /dev/vbirdvg/vbirdlv  
                (前提是LV所在的VG里至少有500M的空闲容量(vgdisplay VG名 查看))
            注:如果pv还有空闲也可以删除一个pv,具体步骤如下:
                1.pvscan 看看没有被分配给lv的容量有没有至少任意一个pv那么大
                2.如果1成立的话,则可以用pvmove命令将指定一个或多个pv中
                3.在VG中删除pv中分配pe为0的pv
                4.执行pvremove移除前两步指定的pv

你可能感兴趣的:(逻辑卷(LVM)管理)