zoukankan      html  css  js  c++  java
  • linux lvm

    linux lvm

    lvm 虽然不常用,但是在小型应用上偶尔还是需要扩容之类的操作。当我们使用的一个分区所剩空间大小已经不够使用了,这个时候我们没法对分区进行扩充,因为受到传统磁盘管理的限制,其不能够进行动态的磁盘管理。因此,为了解决这个问题,LVM技术就诞生了。

    Linux LVM介绍与配置

    1. LVM介绍

    LVM的全称是Logical Volumn Manager,是在Linux2.4内核以上实现的磁盘管理技术。它是Linux环境下对磁盘分区进行管理的一种机制。现在不仅仅是Linux系统上可以使用LVM这种磁盘管理机制,对于其它的类UNIX操作系统,以及windows操作系统都有类似与LVM这种磁盘管理软件。LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上次服务的是以逻辑卷的方式。

    2. LVM的优点与缺点

    2.1 lvm的优点

    1. 可以在系统运行的状态下动态的扩展文件系统的大小。
    2. 文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制。
    3. 可以增加新的磁盘到LVM的存储池中。
    4. 可以以镜像的方式冗余重要的数据到多个物理磁盘。
    5. 可以方便的导出整个卷组到另外一台机器。

    2.1 lvm的缺点

    1. 在从卷组中移除一个磁盘的时候必须使用reducevg命令(这个命令要求root权限,并且不允许在快照卷组中使用)。
    2. 当卷组中的一个磁盘损坏时,整个卷组都会受到影响。
    3. 因为加入了额外的操作,存贮性能受到影响。

    3. LVM的用法

    enter description here
    enter description here

    3.1 lvm的词汇解释

    • PV(Physical Volume):物理卷,处于LVM最底层,可以是物理硬盘或者分区。
    • PP(Physical Extend):物理区域,PV中可以用于分配的最小存储单元,可以在创建PV的时候制定(默认为4MB),组成同一VG中所有PV的PE大小应该相同。
    • VG(Volume Group):卷组,建立在PV之上,可以含有一个到多个PV。
    • LV(Logical Volume):逻辑卷,建立在VG之上,相当于原来分区的概念。不过大小可以动态改变。
    • 存储空间边界:物理边界:逻辑边界
    • 逻辑卷:
      扩展:物理 --> 逻辑
      缩减:逻辑 --> 物理
      缩减不能少于已经存储的所有数据空间的大小
      缩减存在较大的风险,操作需谨慎
    • 快照:snapshot

    3.2 lvm创建的命令介绍

    3.2.1 对于pv的命令

    pvcreate, pvs, pvdisplay, pvremove, pvmove, pvscan

    3.2.2 对于vg的命令

    vgcreate, vgs, vgdisplay, vgremove, vgextend, vgreduce, vgscan

    3.2.3 对于lv的命令

    lvcreate, lvs, lvdisplay, lvremove, lvextend, lvreduce, lvscan

    lvcreate
    				-n lv_name
    				-L #UNIT   {mMgGtT}
    				VG_NAME

    3.2.4 lvm的访问路径

    lv的访问路径:
    				1、/dev/VG_NAME/LV_NAME
    					/dev/myvg/mylv
    
    				2、/dev/mapper/VG_NAME-LV_NAME
    					/dev/mapper/myvg-mylv
    
    				此两者均为符号链接,指向的文件为/dev/dm-#

    3.2.5 创建快照卷

    lvcreate 
    			-L 
    			-n
    			-s 
    			-p r
    
    		注意:快照卷是对某逻辑卷进行的,因此必须跟目标逻辑卷在同一个卷组中;无须指明卷组;

    3.3 创建步骤

    创建一个由至少两个物理卷组成的大小为10G的卷组;要求,PE大小8M;而后在卷组中创建大小为5G的逻辑卷mylv1,格式化为ext4文件系统,开机自动挂载至/users目录;

    3.3.1 PV创建

    1. 用fdisk创建2个分区,注意分区的标记应该是lvm的,例如sdb5,sdb10
    2. PV创建
    [root@backup ~]# pvcreate /dev/sdb5 /dev/sdb10
      Physical volume "/dev/sdb5" successfully created.
      Physical volume "/dev/sdb10" successfully created.
      [root@backup ~]# pvs
      PV         VG Fmt  Attr PSize PFree
      /dev/sdb10    lvm2 ---  5.00g 5.00g
      /dev/sdb5     lvm2 ---  5.00g 5.00g
      [root@backup ~]# pvdisplay (查看详细信息)
      "/dev/sdb5" is a new physical volume of "5.00 GiB"
      --- NEW Physical volume ---
      PV Name               /dev/sdb5
      VG Name               
      PV Size               5.00 GiB
      Allocatable           NO
      PE Size               0   
      Total PE              0
      Free PE               0
      Allocated PE          0
      PV UUID               Ta4n50-e2vo-PyE2-w7hZ-Ikbp-wP6w-gncbuk
       
      "/dev/sdb10" is a new physical volume of "5.00 GiB"
      --- NEW Physical volume ---
      PV Name               /dev/sdb10
      VG Name               
      PV Size               5.00 GiB
      Allocatable           NO
      PE Size               0   
      Total PE              0
      Free PE               0
      Allocated PE          0
      PV UUID               167d2z-y5Hy-rQc3-fdyy-UZmn-0ara-9uNgiF
       
    1. 创建vg
    [root@backup ~]# vgcreate myvg -s 8m /dev/sdb5 /dev/sdb10
    Volume group "myvg" successfully created
    [root@backup ~]# 
    [root@backup ~]# 
    [root@backup ~]# vgs
    VG   #PV #LV #SN Attr   VSize VFree
    myvg   2   0   0 wz--n- 9.98g 9.98g
    [root@backup ~]# vgdisplay
    --- Volume group ---
    VG Name               myvg
    System ID             
    Format                lvm2
    Metadata Areas        2
    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                2
    Act PV                2
    VG Size               9.98 GiB
    PE Size               8.00 MiB
    Total PE              1278
    Alloc PE / Size       0 / 0   
    Free  PE / Size       1278 / 9.98 GiB
    VG UUID               GioUVV-eno8-vipm-7sdu-TsiP-BOUF-HGhwit
    1. 创建lv卷
    [root@backup ~]# lvcreate -n mylv1 -L 5G myvg
    WARNING: ext4 signature detected on /dev/myvg/mylv1 at offset 1080. Wipe it? [y/n]: y
    Wiping ext4 signature on /dev/myvg/mylv1.
    Logical volume "mylv1" created.
    [root@backup ~]# vgs
    VG   #PV #LV #SN Attr   VSize VFree
    myvg   2   1   0 wz--n- 9.98g 4.98g
    [root@backup ~]# vgdisplay
    --- Volume group ---
    VG Name               myvg
    System ID             
    Format                lvm2
    Metadata Areas        2
    Metadata Sequence No  2
    VG Access             read/write
    VG Status             resizable
    MAX LV                0
    Cur LV                1
    Open LV               0
    Max PV                0
    Cur PV                2
    Act PV                2
    VG Size               9.98 GiB
    PE Size               8.00 MiB
    Total PE              1278
    Alloc PE / Size       640 / 5.00 GiB
    Free  PE / Size       638 / 4.98 GiB
    VG UUID               GioUVV-eno8-vipm-7sdu-TsiP-BOUF-HGhwit
    [root@backup ~]# lvs
    LV    VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
    mylv1 myvg -wi-a----- 5.00g                 
    [root@backup ~]# lvdisplay
    --- Logical volume ---
    LV Path                /dev/myvg/mylv1
    LV Name                mylv1
    VG Name                myvg
    LV UUID                gBbQGU-2deH-1lSY-7a4i-G3Ev-mFmB-SQQXyt
    LV Write Access        read/write
    LV Creation host, time backup, 2019-07-18 09:14:51 +0800
    LV Status              available
    # open                 0
    LV Size                5.00 GiB
    Current LE             640
    Segments               2
    Allocation             inherit
    Read ahead sectors     auto
    - currently set to     8192
    Block device           253:0
    [root@backup ~]# mke2fs -t ext4 -L 'mylv1' /dev/myvg/mylv1       
    mke2fs 1.42.9 (28-Dec-2013)
    Filesystem label=mylv1
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    327680 inodes, 1310720 blocks
    1. 挂载至/users目录
    [root@backup ~]# echo "LABEL="mylv1"  /users   ext4   defaults    0    0 " >>/etc/fstab 
    [root@backup ~]# mount -a
    [root@backup ~]# df -h |grep /users
    /dev/mapper/myvg-mylv1  4.8G   20M  4.6G   1% /users

    3.4 扩展lv卷

    新建用lvm1,其家目录为/users/lvm1,而后su至lvm1用户,复制/etc/fstab文件至自己的家目录;扩展mylv1至7G,确保/users/lvvm1的数据不受影响;而后su至mageedu用户,验正数据可正常访问;

    3.4.1 扩展lv卷的方法

    • 先确定扩展的目标大小;并确保对应的卷组中有足够的空闲空间可用;
    • 扩展物理边界
      lvextend -L 4G /dev/myvg/mylv
    • 扩展逻辑边界
      resize2fs /dev/myvg/mylv

    3.4.2 上述例子步骤

    1. 新建 用户lvm1
      [root@backup ~]# useradd -m -d /users/lvm1 lvm1
      [root@backup ~]# cp /etc/fstab /users/lvm1/
    2. 扩容/users目录
    [root@backup lvm1]# lvextend -L 7G /dev/myvg/mylv1 
      Size of logical volume myvg/mylv1 changed from 5.00 GiB (640 extents) to 7.00 GiB (896 extents).
      Logical volume myvg/mylv1 successfully resized.
    [root@backup lvm1]# resize2fs /dev/myvg/mylv1 
    resize2fs 1.42.9 (28-Dec-2013)
    Filesystem at /dev/myvg/mylv1 is mounted on /users; on-line resizing required
    old_desc_blocks = 1, new_desc_blocks = 1
    The filesystem on /dev/myvg/mylv1 is now 1835008 blocks long.
    [root@backup lvm1]# df -h |grep users
    /dev/mapper/myvg-mylv1  6.8G   23M  6.4G   1% /users
    [root@backup lvm1]# ls -l /users/lvm1/
    total 4
    -rw-r--r--. 1 root root 605 Jul 18 10:04 fstab

    3.5 缩小LV卷

    缩减mylv1至4G,确保/users/mageedu的数据不受影响;而后su至mageedu用户,验正数据可正常访问;

    3.5.1 缩减lv卷的方法

    注意缩减lv卷风险很高,谨慎使用。

    1. 先确定缩减后的目标大小;并确保对应的目标逻辑卷大小中有足够的空间可容纳原有所有数据;
    2. 先制裁文件系统,并要执行强制检测
      e2fsck -f
    3. 缩减逻辑边界
      resize2fs DEVICE
    4. 缩减物理边界
      lvreduce

    3.5.2 上述例子步骤

    1. 卸载文件系统,e2fsck强制检查
    [root@backup /]# umount /users/
    [root@backup /]# e2fsck -f /dev/mapper/myvg-mylv1 
    e2fsck 1.42.9 (28-Dec-2013)
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    mylv1: 16/458752 files (0.0% non-contiguous), 67332/1835008 blocks
    1. 缩减逻辑边界到4G
    [root@backup ~]# resize2fs /dev/mapper/myvg-mylv1 4g
    resize2fs 1.42.9 (28-Dec-2013)
    Resizing the filesystem on /dev/mapper/myvg-mylv1 to 1048576 (4k) blocks.
    The filesystem on /dev/mapper/myvg-mylv1 is now 1048576 blocks long.
    1. 缩减物理边界到4G
    [root@backup ~]# lvreduce -L 4G /dev/mapper/myvg-mylv1 
      WARNING: Reducing active logical volume to 4.00 GiB.
      THIS MAY DESTROY YOUR DATA (filesystem etc.)
    Do you really want to reduce myvg/mylv1? [y/n]: y
      Size of logical volume myvg/mylv1 changed from 7.00 GiB (896 extents) to 4.00 GiB (512 extents).
      Logical volume myvg/mylv1 successfully resized.
    1. 重新挂载文件系统
    [root@backup /]# mount /dev/mapper/myvg-mylv1 /users
    [root@backup /]# cd /users && ls -l
    total 20
    drwx------. 2 root root 16384 Jul 18 09:17 lost+found
    drwx------. 2 lvm1 lvm1  4096 Jul 18 10:04 lvm1

    3.6 快照卷

    对mylv1创建快照卷snap-mylv1,并通过其cp内部的数据至/backups/目录中,要求保留原有属主属组等信息;

    3.6.1 lvm快照卷简述

    1. lvm支持快照卷,可以实时备份数据
    2. 快照卷是对某逻辑卷进行的,因此必须跟目标逻辑卷在同一个卷组中
    3. 快照卷无需指明卷组

    3.6.2 lvm创建步骤

    1. lvcreate工具创建
    [root@backup mapper]# lvcreate -s -n myvg-snap -p r  -L 30m /dev/mapper/myvg-mylv1 
      Rounding up size to full physical extent 32.00 MiB
      Logical volume "myvg-snap" created.
    1. 挂载快照卷
    [root@backup mapper]# mount /dev/mapper/myvg-myvg--snap /mnt
    mount: /dev/mapper/myvg-myvg--snap is write-protected, mounting read-only
    1. 确认快照卷内容,更改原卷,再查看快照卷
    [root@backup mnt]# echo "aaaaaa=bbbbb" >/users/aaa
    [root@backup mnt]# cat /users/aaa
    aaaaaa=bbbbb
    [root@backup mnt]# 
    [root@backup mnt]# cat /mnt/aaa
    aaa
  • 相关阅读:
    如何更改SQL Server2008默认数据库的存储路径
    虚拟内存页面文件pagefile.sys(棉文件)改变存放位置
    Redis热点数据高频访问问题以及解决方案
    gc日志收集和分析
    oauth2中client_id_to_access数据膨胀问题
    Redis慢查询日志
    24个Jvm面试题总结及答案
    springboot-使用assembly进行项目打包
    volatile关键字解读
    redis的zset结构跳表
  • 原文地址:https://www.cnblogs.com/chacha51/p/11380206.html
Copyright © 2011-2022 走看看