LVM逻辑卷介绍

1. 逻辑卷介绍

LVM全称为逻辑卷管理(Logical Volume Manager),是一种在Linux操作系统中用于管理和优化磁盘存储的技术。LVM提供了一种灵活的方式来管理硬盘和分区,它允许用户在不中断系统服务的情况下动态调整存储容量,提高了存储资源的利用率和管理效率。

优点包括:

  • 允许在系统运行时动态地增加或减少逻辑卷的大小,无需重新分区或重启系统,极大提升了存储管理的灵活性。
  • 将多个物理磁盘组合成卷组,实现了存储资源的池化,使得存储空间可以更高效地被管理和分配。
  • 提供了一个统一的抽象层来管理存储,使得添加、删除或更换磁盘变得简单易行,降低了管理复杂度。

缺点包括:

  • 相较于传统的分区管理,配置和管理较为复杂,需要一定的学习成本。
  • 虽然可以优化存储性能,但在某些场景下,尤其是涉及大量小文件读写时,由于额外的抽象层,可能会有轻微的性能损失。
  • 在特定情况下,例如系统崩溃,恢复LVM配置可能比标准分区更为复杂。
  • 本身需要占用少量的系统资源,包括磁盘空间用于元数据管理,以及在处理大量I/O请求时可能消耗更多的CPU资源。

LVM技术是在硬LVM介绍盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。用户不必关心物理硬盘设备的低层架构和布局,就可以实现对硬盘分区的动态调整,LVM的技术架构如图。

在这里插入图片描述

LVM体系结构包括三个基本概念:

  • 物理卷(Physical Volume, PV):LVM的基础构建块,通常对应于一个硬盘分区或整个硬盘。物理卷上包含可供LVM使用的存储容量,这些容量被划分为称为“物理区域(physical extents)”的小块。
  • 卷组(Volume Group, VG):一个或多个物理卷可以组合成一个卷组,这构成了LVM的存储池。卷组中的物理区域形成了一个连续的地址空间,LVM在此基础上创建逻辑卷。
  • 逻辑卷(Logical Volume, LV):从卷组中分配一部分物理区域创建而成,逻辑卷对操作系统来说就像一个普通的块设备,可以在其上创建文件系统。逻辑卷的大小可以根据需要动态调整,而且可以轻松迁移或扩展,而不会影响到数据的可用性。
  • 三者之间的关系类似于PV组成LG,LG分割出LV

LVM的核心理念:

物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列, 这都可以。卷组建立在物理卷之上,一个卷组可以包含多个物理卷,而且在卷组创建之后也 可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立 后可以动态地扩展或缩小空间。

2. 部署逻辑卷

部署LVM时,需要逐个配置物理卷、卷组和逻辑卷。常用部署命令如下:

功能物理卷管理命令卷组管理命令逻辑卷管理命令
扫描pvscanvgscanlvscan
建立pvcreatevgcreatelvcreate
显示pvdisplayvgdisplaylvdisplay
删除pvremovevgremovelvremove
扩展vgextendlvextend
缩小vgreducelvreduce

演示:在虚拟机中添加两块新硬盘设备,然后开机

  • 第一步:查看硬盘
[root@localhost ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 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 label type: dos
Disk identifier: 0x000bc797

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200     5244927     1572864   82  Linux swap / Solaris
/dev/sda3         5244928    41943039    18349056   83  Linux

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 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 /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 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
  • 第二步:让新添加的两块硬盘设备支持LVM技术(创建物理卷)
[root@localhost ~]# pvcreate /dev/sdb /dev/sdc
  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.
  
# 提示没有该命令的话,则安装软件包 yum -y install lvm2
  • 第三步:把两块硬盘设备加入到storage卷组中,然后查看卷组的状态
# 创建卷组
[root@localhost ~]# vgcreate storage /dev/sdb /dev/sdc
  Volume group "storage" successfully created
  
# 语法: vgcreate 卷组名 磁盘1 磁盘2 ...
# 查看卷组
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               storage
  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               19.99 GiB
  PE Size               4.00 MiB
  Total PE              5118
  Alloc PE / Size       0 / 0   
  Free  PE / Size       5118 / 19.99 GiB
  VG UUID               FdPjR1-cfK2-Hs1a-h6nh-hEZZ-1dun-bBhOSp
  • 第四步:切割出一个5G的逻辑卷设备

在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位,所使用的参数为-L。例如,使用-L 5G生成一个大小为5GB的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为 4MB。例 如,使用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷。

[root@localhost ~]# lvcreate -n vo1 -L 5G storage 
  Logical volume "vo1" created.
[root@localhost ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/storage/vo1
  LV Name                vo1
  VG Name                storage
  LV UUID                fpfIpY-9PLx-nxiS-5I9h-akH2-vH1W-CJxdha
  LV Write Access        read/write
  LV Creation host, time localhost, 2024-07-11 16:26:11 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
  • 第五步:把生成好的逻辑卷进行格式化,然后挂载使用

Linux 系统会把LVM 中的逻辑卷设备存放在/dev设备目录中(实际上是做了一个符号链接),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组 名称/逻辑卷名称)。

[root@localhost dev]# find / -name vo1
/dev/storage/vo1
[root@localhost dev]# mkfs.ext4 /dev/storage/vo1 
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

[root@localhost ~]# mkdir ceshi
[root@localhost ~]# mount /dev/storage/vo1 ceshi/
  • 查看挂载状态,并写入到配置文件,使其永久生效。
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 476M     0  476M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.7M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/sda3                 18G  2.0G   16G  12% /
/dev/sda1               1014M  132M  883M  13% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/mapper/storage-vo1  4.8G   20M  4.6G   1% /root/ceshi

echo "/dev/storage/vo1 /root/ceshi ext4 defaults 0 0" >> /etc/fstab

3. 扩容逻辑卷

  • 第一步:把上一个实验中的逻辑卷vo1扩展至7G
# 卸载设备和挂载点(可选)
[root@localhost ~]# umount /root/ceshi

[root@localhost ~]# lvextend -L 7G /dev/storage/vo1 
  Size of logical volume storage/vo1 changed from 6.00 GiB (1536 extents) to 7.00 GiB (1792 extents).
  Logical volume storage/vo1 successfully resized.
  • 第二步:检查硬盘完整性,并重置硬盘容量。
[root@localhost ~]# e2fsck -f /dev/storage/vo1 
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
/dev/storage/vo1: 11/393216 files (0.0% non-contiguous), 62574/1572864 blocks

[root@localhost ~]# resize2fs /dev/storage/vo1 
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/vo1 to 1835008 (4k) blocks.
The filesystem on /dev/storage/vo1 is now 1835008 blocks long.
  • 第三步:重新挂载硬盘设备并查看挂载状态。
[root@localhost ~]# mount -a
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 476M     0  476M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.7M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/sda3                 18G  2.0G   16G  12% /
/dev/sda1               1014M  132M  883M  13% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/mapper/storage-vo1  6.8G   23M  6.4G   1% /root/ceshi
  • 注意1:e2fsck命令、resize2f命令、xfs_growf命令

e2fsck是检查ext2、ext3、ext4等文件系统的正确性和完整性,并修复任何问题。如果有任何问题,请根据提示进行修复。

resize2fs是ext2/ext3/ext4文件系统重定义大小工具。使用中将调整文件系统的大小,并根据需要扩展或收缩文件系统。

xfs_growf是xfs文件系统重定义大小工具。在处理xfs文件系统时,使用xfs_growf替换resize2fs。

  • 不卸载的方式(挂载扩容)
[root@localhost ~]# lvextend -L 7G /dev/storage/vo1 
Size of logical volume storage/vo1 changed from 6.00 GiB (1536 extents) to 7.00 GiB (1792 extents).
Logical volume storage/vo1 successfully resized.
[root@localhost ~]# resize2fs /dev/storage/vo1 
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/vo1 to 1835008 (4k) blocks.
The filesystem on /dev/storage/vo1 is now 1835008 blocks long.  
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 476M     0  476M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.7M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/sda3                 18G  2.0G   16G  12% /
/dev/sda1               1014M  132M  883M  13% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/mapper/storage-vo1  6.8G   23M  6.4G   1% /root/ceshi

4. 缩小逻辑卷

相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,其丢失数据的风险更大。所以在生产 环境中执行相应操作时,一定要提前备份好数据。另外Linux系统规定,在对LVM逻辑卷进 行缩容操作之前,要先检查文件系统的完整性(当然这也是为了保证我们的数据安全)。在执 行缩容操作前记得先把文件系统卸载掉。

  • 第一步:检查文件系统的完整性。
[root@localhost ~]# umount /root/ceshi 
[root@localhost ~]# e2fsck -f /dev/storage/vo1     # 不先卸载的话,执行该命令会报错
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
/dev/storage/vo1: 11/655360 files (0.0% non-contiguous), 79663/2621440 blocks
  • 第二步:把逻辑卷vo的容量减小到5G
[root@localhost ~]# resize2fs /dev/storage/vo1 5G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/vo1 to 1310720 (4k) blocks.
The filesystem on /dev/storage/vo1 is now 1310720 blocks long.

[root@localhost ~]# lvreduce -L 5G /dev/storage/vo1 
  WARNING: Reducing active logical volume to 5.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce storage/vo1? [y/n]: y
  Size of logical volume storage/vo1 changed from 10.00 GiB (2560 extents) to 5.00 GiB (1280 extents).
  Logical volume storage/vo1 successfully resized.
  • 第三步:重新挂载文件系统并查看系统状态。
[root@localhost ~]# mount -a
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 476M     0  476M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.7M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/sda3                 18G  2.0G   16G  12% /
/dev/sda1               1014M  132M  883M  13% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/mapper/storage-vo1  4.8G   20M  4.6G   1% /root/ceshi

5. 逻辑卷快照

LVM 还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,可 以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快 照卷进行覆盖还原。LVM的快照卷功能有两个特点:

  • 快照卷的容量必须等同于逻辑卷的容量;
  • 快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。

首先查看卷组的信息。

[root@localhost ~]# vgdisplay 
  --- Volume group ---
  VG Name               storage
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  6
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               19.99 GiB
  PE Size               4.00 MiB
  Total PE              5118
  Alloc PE / Size       1280 / 5.00 GiB
  Free  PE / Size       3838 / 14.99 GiB
  VG UUID               FdPjR1-cfK2-Hs1a-h6nh-hEZZ-1dun-bBhOSp

通过卷组的输出信息可以清晰看到,卷组中已经使用了 5GB 的容量,空闲容量还有 14.99GB。接下来用重定向往逻辑卷设备所挂载的目录中写入一个文件。

[root@localhost ~]# echo "Welcome to LVM" > /root/ceshi/readme.txt
[root@localhost ~]# ls -l /root/ceshi/
total 20
drwx------ 2 root root 16384 Jul 11 16:34 lost+found
-rw-r--r-- 1 root root    15 Jul 11 19:41 readme.txt
  • 第1步:使用-s参数生成一个快照卷,使用-L参数指定切割的大小。另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作。
[root@localhost ~]# lvcreate -L 5G -s -n BAK /dev/storage/vo1 
  Logical volume "BAK" created.
[root@localhost ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/storage/vo1
  LV Name                vo1
  VG Name                storage
  LV UUID                fpfIpY-9PLx-nxiS-5I9h-akH2-vH1W-CJxdha
  LV Write Access        read/write
  LV Creation host, time localhost, 2024-07-11 16:26:11 +0800
  LV snapshot status     source of
                         BAK [active]
  LV Status              available
  # open                 1
  LV Size                5.00 GiB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   
  --- Logical volume ---
  LV Path                /dev/storage/BAK
  LV Name                BAK
  VG Name                storage
  LV UUID                bYJmju-ZZn2-FYkw-PcUq-H7k8-awBM-LHLm1u
  LV Write Access        read/write
  LV Creation host, time localhost, 2024-07-11 19:51:46 +0800
  LV snapshot status     active destination for vo1
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             1280
  COW-table size         5.00 GiB
  COW-table LE           1280
  Allocated to snapshot  0.01%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
  • 第2步:在逻辑卷所挂载的目录中创建一个1GB的垃圾文件,然后再查看快照卷的状态。可以发现存储空间占的用量上升了。
[root@localhost ~]# dd if=/dev/zero of=/root/ceshi/files count=1 bs=1024M
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 18.5166 s, 58.0 MB/s
[root@localhost ~]#  lvdisplay 
  --- Logical volume ---
  LV Path                /dev/storage/vo1
  LV Name                vo1
  VG Name                storage
  LV UUID                fpfIpY-9PLx-nxiS-5I9h-akH2-vH1W-CJxdha
  LV Write Access        read/write
  LV Creation host, time localhost, 2024-07-11 16:26:11 +0800
  LV snapshot status     source of
                         BAK [active]
  LV Status              available
  # open                 1
  LV Size                5.00 GiB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   
  --- Logical volume ---
  LV Path                /dev/storage/BAK
  LV Name                BAK
  VG Name                storage
  LV UUID                bYJmju-ZZn2-FYkw-PcUq-H7k8-awBM-LHLm1u
  LV Write Access        read/write
  LV Creation host, time localhost, 2024-07-11 19:51:46 +0800
  LV snapshot status     active destination for vo1
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             1280
  COW-table size         5.00 GiB
  COW-table LE           1280
  Allocated to snapshot  20.08%                #### 存储空间占的用量上升了
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
  • 第3步:为了校验SNAP快照卷的效果,需要对逻辑卷进行快照还原操作。在此之前记得先卸载掉逻辑卷设备与目录的挂载。
[root@localhost ~]# umount /root/ceshi 
[root@localhost ~]# lvconvert --merge /dev/storage/BAK
  Merging of volume storage/BAK started.
  storage/vo1: Merged: 80.57%
  storage/vo1: Merged: 100.00%
  • 第4步:快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的1GB的垃圾文件也被清除了。
[root@localhost ~]#  mount -a 
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 476M     0  476M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.7M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/sda3                 18G  2.0G   16G  12% /
/dev/sda1               1014M  132M  883M  13% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/mapper/storage-vo1  4.8G   20M  4.6G   1% /root/ceshi

6. 删除逻辑卷

当生产环境中想要重新部署LVM或者不再需要使用LVM时,则需要执行LVM的删除 操作。为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备, 这个顺序不可颠倒。

  • 第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。
[root@localhost ~]# umount /root/ceshi 
[root@localhost ~]# vim /etc/fstab 
#
# /etc/fstab
# Created by anaconda on Mon Apr  8 15:58:05 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=04637479-3fb2-40e0-9873-276b5a7ca53f /                       xfs     defaults        0 0
UUID=af29a88b-a46b-4654-bdbd-405ca8d6c294 /boot                   xfs     defaults        0 0
UUID=438d68b3-2f2b-4f3d-96ef-d0e5f26babf3 swap                    swap    defaults        0 0
# /dev/storage/vo1 /root/ceshi ext4 defaults 0 0
  • 第2步:删除逻辑卷设备,需要输入y来确认操作。
[root@localhost ~]# lvremove /dev/storage/vo1 
Do you really want to remove active logical volume storage/vo1? [y/n]: y
  Logical volume "vo1" successfully removed
  • 第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。
[root@localhost ~]# vgremove storage 
  Volume group "storage" successfully removed
  • 第4步:删除物理卷设备。
[root@localhost ~]# pvremove /dev/sdb /dev/sdc 
  Labels on physical volume "/dev/sdb" successfully wiped.
  Labels on physical volume "/dev/sdc" successfully wiped.

在上述操作执行完毕之后,再执行lvdisplayvgdisplaypvdisplay命令来查看LVM 的信息时就不会再看到信息了。

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值