• Linux_day12_LVM


    12.1 LVM简介

    LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。
    与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如"sales’、 ‘development’)代替物理磁盘名(如’sda’、‘sdb’)来标识存储卷。

    12.2 LVM的基本组成

    前面谈到,LVM是在磁盘分区和文件系统之前添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上创建文件系统。首先我们先谈论一下几个LVM术语:

    1、物理存储介质(The physical media):

    这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最底层的存储单元。

    2、物理卷(physical volume):

    物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数.

    3、卷组(Volume Group):

    LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。

    4、逻辑卷(logical volume):

    LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统。

    5、物理块(physical extent):

    每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。

    简单来说就是:

    PV:是物理的磁盘分区
    VG:LVM中的物理磁盘分区,也就是PV必须加入VG,可以将VG理解为一个仓库或者几个大的硬盘
    LV:也就是从VG中划分的逻辑分区

    在这里插入图片描述

    12.3 LVM的优缺点

    1、优点

    比起传统的硬盘分区管理方式,LVM更富有灵活性

    • 将多块硬盘看做一个大硬盘
    • 使用逻辑卷(LV),可以创建跨众多硬盘空间的分区
    • 可以创建小的逻辑卷(LV),在空间不足时可以动态调整大小
    • 在调整逻辑卷(LV)大小时可以不用考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间。
    • 可以在线(online)对逻辑卷(LV)和卷组(VG)进行创建、删除、调整大小等操作。不过LVM上的文件系统也需要重新调整大小,好在某些文件系统(例如ext4)也支持在线操作。
    • 无需重新启动服务,就可以将服务中用到的逻辑卷(LV)在线(online)/动态(live)迁移至别的硬盘上。
    • 允许创建快照,可以保存文件系统的备份,同时使服务的下线时间(downtime)降低到最小。
    • 支持各种设备映射目标(device-mapper targets),包括透明文件系统加密和缓存常用数据(caching of frequently used data)。这将允许你创建一个包含一个或多个磁盘、并用LUKS加密的系统,使用LVM on top 可轻松地管理和调整这些独立的加密卷 (例如. /, /home, /backup等) 并免去开机时多次输入密钥的麻烦。
    2、缺点
    • 在系统设置时需要更复杂的额外步骤
    • Windows系统不支持LVM,若使用双系统,你将无法在windows上访问LVM分区。

    12.4 LVM的使用

    1、创建和管理LVM

    要创建LVM系统,一般需要经过一下步骤:

    1、首先确认系统中是否安装了lvm工具:
    [root@www root]# rpm –qa|grep lvm
    lvm2-2.02.130-5.el7.x86_64
    如果命令结果输入类似于上例,那么说明系统已经安装了LVM管理工具;如果命令没有输出则说明没有安装LVM管理工具,则需要从网络下载或者从光盘装LVM rpm工具包。 
    
    2、创建分区
    使用分区工具(如:fdisk等)创建LVM分区,方法和创建其他一般分区的方式是一样的,区别仅仅是LVM的分区类型为8e。
    
    [root@localhost ~]# fdisk /dev/sda
    欢迎使用 fdisk (util-linux 2.23.2)。
    更改将停留在内存中,直到您决定将更改写入磁盘。
    使用写入命令前请三思。
    命令(输入 m 获取帮助):n
    Partition type:
       p   primary (3 primary, 0 extended, 1 free)
       e   extended
    Select (default e): e
    已选择分区 4
    起始 扇区 (45467648-83886079,默认为 45467648):
    将使用默认值 45467648
    Last 扇区, +扇区 or +size{K,M,G} (45467648-83886079,默认为 83886079):
    将使用默认值 83886079
    分区 4 已设置为 Extended 类型,大小设为 18.3 GiB
    命令(输入 m 获取帮助):n
    All primary partitions are in use
    添加逻辑分区 5
    起始 扇区 (45469696-83886079,默认为 45469696):
    将使用默认值 45469696
    Last 扇区, +扇区 or +size{K,M,G} (45469696-83886079,默认为 83886079)+2G
    分区 5 已设置为 Linux 类型,大小设为 2 GiB
    命令(输入 m 获取帮助):n
    All primary partitions are in use
    添加逻辑分区 6
    起始 扇区 (49666048-83886079,默认为 49666048):
    将使用默认值 49666048
    Last 扇区, +扇区 or +size{K,M,G} (49666048-83886079,默认为 83886079)+2G
    分区 6 已设置为 Linux 类型,大小设为 2 GiB
    
    命令(输入 m 获取帮助):t
    分区号 (1-6,默认 6):5
    Hex 代码(输入 L 列出所有代码):8e
    已将分区“Linux”的类型更改为“Linux LVM”
    
    命令(输入 m 获取帮助):t
    分区号 (1-6,默认 6):
    Hex 代码(输入 L 列出所有代码):8e
    已将分区“Linux”的类型更改为“Linux LVM”
    
    命令(输入 m 获取帮助):w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
    The kernel still uses the old table. The new table will be used at
    the next reboot or after you run partprobe(8) or kpartx(8)
    正在同步磁盘。
    [root@localhost ~]# partprobe 
    Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)/dev/sr0 已按照只读方式打开。
    Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)/dev/sr0 已按照只读方式打开。
    Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)/dev/sr0 已按照只读方式打开。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    1.1 创建逻辑卷

    将新创建的两个分区/dev/sda5,/dev/sda6转化成物理卷,主要是添加LVM属性信息并划分PE存储单元。

    [root@localhost ~]# pvcreate  /dev/sda5 /dev/sda6
      Physical volume "/dev/sda5" successfully created
    WARNING: swap signature detected on /dev/sda6 at offset 4086. Wipe it? [y/n]: y
      Wiping swap signature on /dev/sda6.
      Physical volume "/dev/sda6" successfully created
    
    • 1
    • 2
    • 3
    • 4
    • 5

    创建卷组 vgdata,并将刚才创建好的两个物理卷加入该卷组,可以看出默认PE大小为4MB,PE是卷组的最小存储单元,可以通过-s来修改大小。

    [root@localhost ~]# vgcreate vgdata /dev/sda5 /dev/sda6
      Volume group "vgdata" successfully created
     
     
    [root@localhost ~]# vgs
      VG     #PV #LV #SN Attr   VSize VFree
      vgdata   2   0   0 wz--n- 3.99g 3.99g
    
    
    [root@localhost ~]# vgdisplay 
      --- Volume group ---
      VG Name               vgdata
      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               3.99 GiB
      PE Size               4.00 MiB
      Total PE              1022
      Alloc PE / Size       0 / 0   
      Free  PE / Size       1022 / 3.99 GiB
      VG UUID               gbmuvk-zeBX-YodK-Wf1S-7OV9-kdpF-myD1It
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    从物理卷vgdata上分割1G给新的逻辑卷lvdata1

    [root@localhost ~]# lvcreate -L 9G -n lvdata1 vgdata
    WARNING: xfs signature detected on /dev/vgdata/lvdata1 at offset 0. Wipe it? [y/n]: y
      Wiping xfs signature on /dev/vgdata/lvdata1.
      Logical volume "lvdata1" created.
    [root@localhost ~]# lvs
      LV      VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lvdata1 vgdata -wi-a----- 1.00g 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    使用mkfs.ext4命令在逻辑卷lvdata1上创建ext4文件系统

    [root@localhost ~]# mkfs.ext4 /dev/vgdata/lvdata1 
    mke2fs 1.42.9 (28-Dec-2013)
    文件系统标签=
    OS type: Linux
    块大小=4096 (log=2)
    分块大小=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    65536 inodes, 262144 blocks
    13107 blocks (5.00%) reserved for the super user
    第一个数据块=0
    Maximum filesystem blocks=268435456
    8 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks: 
            32768, 98304, 163840, 229376
    
    Allocating group tables: 完成                            
    正在写入inode表: 完成                            
    Creating journal (8192 blocks): 完成
    Writing superblocks and filesystem accounting information: 完成
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    将创建好的文件系统挂载到/data1上

    [root@localhost ~]# mkdir /data1
    [root@localhost ~]# mount /dev/vgdata/lvdata1  /data1
    [root@localhost ~]# df -h
    文件系统                    容量  已用  可用 已用% 挂载点
    /dev/sda2                    20G  6.6G   13G   34% /
    devtmpfs                    899M     0  899M    0% /dev
    tmpfs                       913M   88K  913M    1% /dev/shm
    tmpfs                       913M  9.0M  904M    1% /run
    tmpfs                       913M     0  913M    0% /sys/fs/cgroup
    /dev/sda1                   197M  139M   59M   71% /boot
    tmpfs                       183M   12K  183M    1% /run/user/0
    /dev/sr0                    3.8G  3.8G     0  100% /run/media/root/RHEL-7.2 Server.x86_64
    /dev/mapper/vgdata-lvdata1  976M  2.6M  907M    1% /data1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    便于以后服务器重启自动挂载,需要将创建好的文件系统挂载信息添加到/etc/fstab里面,UUID可以通过blkid命令来查询。

    [root@localhost ~]# vim /etc/fstab
    UUID="084af02e-fd5e-4b61-bffd-16655ba04602"  /data1 ext4 defaults 0 0
    
    • 1
    • 2
    2、逻辑卷lvdata1不够用了,如何扩展

    给逻辑卷添加空间不会影响以前空间的使用,所以无需卸载文件系统,直接通过命令lvextend -L +500M /dev/vgdata/lvdata1 或者lvextend -l 2.5G /dev/vgdata/lvdata1 给lvdata1增加500M空间(lvadta1目前是2G空间)设置完成后,记得使用resize2fs命令来同步文件系统

    [root@localhost ~]# lvextend -L  +500M /dev/vgdata/lvdata1
      Size of logical volume vgdata/lvdata1 changed from 1.00 GiB (256 extents) to 1.49 GiB (381 extents).
      Logical volume lvdata1 successfully resized.
    [root@localhost ~]# lvs
      LV      VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lvdata1 vgdata -wi-ao---- 1.49g 
    
    
    [root@localhost ~]# resize2fs /dev/vgdata/lvdata1 ----------------------------ext4
    resize2fs 1.42.9 (28-Dec-2013)
    Filesystem at /dev/vgdata/lvdata1 is mounted on /data1; on-line resizing required
    old_desc_blocks = 1, new_desc_blocks = 1
    The filesystem on /dev/vgdata/lvdata1 is now 390144 blocks long.
    [root@localhost ~]# df -h
    文件系统                    容量  已用  可用 已用% 挂载点
    /dev/sda2                    20G  6.6G   14G   34% /
    devtmpfs                    899M     0  899M    0% /dev
    tmpfs                       913M   88K  913M    1% /dev/shm
    tmpfs                       913M  9.0M  904M    1% /run
    tmpfs                       913M     0  913M    0% /sys/fs/cgroup
    /dev/sda1                   197M  139M   59M   71% /boot
    tmpfs                       183M   12K  183M    1% /run/user/0
    /dev/sr0                    3.8G  3.8G     0  100% /run/media/root/RHEL-7.2 Server.x86_64
    /dev/mapper/vgdata-lvdata1  1.5G  3.0M  1.4G    1% /data1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    3、当卷组不够用的情况下,如何扩大卷组

    重新从第二块硬盘上创建一个分区sda7,具体操作步骤省略,并将创建好的分区加入到已存在的卷组vgdata中,通过pvs命令查看是否成功

    [root@localhost ~]# vgextend vgdata /dev/sda7
      Physical volume "/dev/sda7" successfully created
      Volume group "vgdata" successfully extended
    
    [root@localhost ~]# pvs
      PV         VG     Fmt  Attr PSize PFree  
      /dev/sda5  vgdata lvm2 a--  2.00g 520.00m
      /dev/sda6  vgdata lvm2 a--  2.00g   2.00g
      /dev/sda7  vgdata lvm2 a--  2.00g   2.00g
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    4、当硬盘空间不够用的情况下,如何减少逻辑卷的空间释放给其他逻辑卷使用

    减少逻辑卷空间,步骤如下:

    • 1、先卸载逻辑卷lvdata(取消挂载)
    • 2、然后通过e2fsck命令检测逻辑卷上的剩余空间
    • 3、使用resizes2fs将文件系统减少到700M
    • 4、再使用lvreduce命令将逻辑卷减少到700M

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

    [root@localhost ~]# umount /data1
    [root@localhost ~]# e2fsck -f /dev/mapper/vgdata-lvdata1 
    e2fsck 1.42.9 (28-Dec-2013)
    第一步: 检查inode,,和大小
    第二步: 检查目录结构
    第3步: 检查目录连接性
    Pass 4: Checking reference counts
    第5步: 检查簇概要信息
    /dev/mapper/vgdata-lvdata1: 11/98304 files (0.0% non-contiguous), 15140/390144 blocks
    
    [root@localhost ~]# resize2fs /dev/mapper/vgdata-lvdata1  700M
    resize2fs 1.42.9 (28-Dec-2013)
    
    
    
    Resizing the filesystem on /dev/mapper/vgdata-lvdata1 to 179200 (4k) blocks.
    The filesystem on /dev/mapper/vgdata-lvdata1 is now 179200 blocks long.
    
    [root@localhost ~]# lvreduce -L 700M /dev/vgdata/lvdata1 
      WARNING: Reducing active logical volume to 700.00 MiB
      THIS MAY DESTROY YOUR DATA (filesystem etc.)
    Do you really want to reduce lvdata1? [y/n]: y
      Size of logical volume vgdata/lvdata1 changed from 1.49 GiB (381 extents) to 700.00 MiB (175 extents).
      Logical volume lvdata1 successfully resized.
    
    
    完成之后,就可以通过mount命令挂载重新使用了
    [root@localhost ~]# mount /dev/vgdata/lvdata1  /data1
    [root@localhost ~]# mount | grep data1
    /dev/mapper/vgdata-lvdata1 on /data1 type ext4 (rw,relatime,seclabel,data=ordered)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    5、如果某一块磁盘或者分区故障了如何将数据快速转移到相同的卷组其他的空间去

    1、通过pvmove命令转移空间数据
    2、通过vgreduce命令将即将坏的磁盘或者分区从卷组vgdata里面移除除去。
    3、通过pvremove命令将即将坏的磁盘或者分区从系统中删除掉。

    [root@localhost ~]# pvs
      PV         VG     Fmt  Attr PSize PFree
      /dev/sda5  vgdata lvm2 a--  2.00g 2.00g
      /dev/sda6  vgdata lvm2 a--  2.00g 1.31g
      /dev/sda7  vgdata lvm2 a--  2.00g 2.00g
    [root@localhost ~]# pvmove /dev/sda6 /dev/sda7
      /dev/sda6: Moved: 4.6%
      /dev/sda6: Moved: 100.0%
    [root@localhost ~]# pvs
      PV         VG     Fmt  Attr PSize PFree
      /dev/sda5  vgdata lvm2 a--  2.00g 2.00g
      /dev/sda6  vgdata lvm2 a--  2.00g 2.00g
      /dev/sda7  vgdata lvm2 a--  2.00g 1.31g
    [root@localhost ~]# vgreduce vgdata /dev/sda6
      Removed "/dev/sda6" from volume group "vgdata"
    [root@localhost ~]# pvremove /dev/sda6
      Labels on physical volume "/dev/sda6" successfully wiped
    4、手工拆除硬盘或者通过一些工具修复分区。
    [root@localhost ~]# pvs
      PV         VG     Fmt  Attr PSize PFree
      /dev/sda5  vgdata lvm2 a--  2.00g 2.00g
      /dev/sda7  vgdata lvm2 a--  2.00g 1.31g
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    6、删除整个逻辑卷

    1、先通过umount命令卸载掉逻辑卷lvdata1
    2、修改/etc/fstab里面逻辑卷的挂载信息,否则系统有可能启动不起来。
    3、通过lvremove 删除逻辑卷lvdata1
    4、通过vgremove 删除卷组vgdata
    5、通过pvremove 将物理卷转化成普通分区。

    [root@localhost ~]# umount /dev/mapper/vgdata-lvdata1 
    [root@localhost ~]# lvremove /dev/vgdata/lvdata1 
    Do you really want to remove active logical volume lvdata1? [y/n]: y
      Logical volume "lvdata1" successfully removed
    [root@localhost ~]# vgremove vgdata 
      Volume group "vgdata" successfully removed
    [root@localhost ~]# pvremove /dev/sda5 /dev/sda6
      Labels on physical volume "/dev/sda5" successfully wiped
      No PV label found on /dev/sda6.
    
    
    删除完了,别忘了修改分区的id标识。修改成普通Linux分区即可。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    总结:LVM逻辑卷是Linux里面一个很棒的空间使用机制,因为分区在没有格式化的情况下是没有办法加大或者放小的。通过LVM可以将你的磁盘空间做到灵活自如。

    最后,我们可以用一张图,再来理解下LVM
    在这里插入图片描述

  • 相关阅读:
    【精讲】vue2框架 GitHub数据获取(内含详细解析)
    大气科学模式:WRF-chem、AERMOD模型、WRF模式、WRFDA资料同化、机器学习气象、CMAQ、SMOKE
    ChatGPT 入门指南:与 AI 进行愉快互动的秘诀大揭秘!
    第十六章数据管理组织和角色期望4分
    buuctf_练[CSAWQual 2019]Web_Unagi
    nginx网站服务
    使用 webpack 打包 express 应用
    逐字稿 | 8 视频理解论文串讲(上)【论文精读】
    Prompt Engineering (Prompt工程)
    node基础之三:http 模块
  • 原文地址:https://blog.csdn.net/weixin_44244493/article/details/127687208