当前位置: 首页>编程日记>正文

逻辑卷管理-LVM

目录

1. LVM的基本概念

2. Linux下创建和管理LVM

3. 环境准备

4. 物理卷管理

4.1. 创建物理卷

4.2. 显示物理卷

4.3. 删除物理卷

4. 卷组管理

4.1. 创建卷组

4.2. 显示卷组

4.3. 扩展卷组

4.4. 缩减卷组

4.5. 删除卷组

4.6. 分割卷组

4.7 组合卷组

5. 逻辑卷管理

5.1. 创建逻辑卷

5.2. 显示逻辑卷

5.3. 创建文件系统并挂载

5.4. 扩展逻辑卷

5.5. 缩减逻辑卷

5.6. 删除逻辑卷


       文件LVM是逻辑卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分析进行管理的一种机制。LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。在传统的磁盘管理机制中,上层应用是直接访问文件系统来对底层的物理硬盘进行读写。而在LVM中,它会将底层的硬盘进行封装,当我们通过软件去对底层的物理磁盘进行操作时,它不再是直接对分区进行操作,而是通过逻辑卷对底层的物理硬盘进行操作。LVM最大的特点就是可以对磁盘进行动态管理,因为逻辑卷的大小是可以动态调整的,而且不会丢失数据。逻辑卷的技术大大提高了磁盘管理的逻辑性。

1. LVM的基本概念

       LVM中的概念有物理卷、卷组、逻辑卷、物理区块和逻辑区块等,其含义如下:

  • 物理卷(Physical Volume, PV):物理卷是指硬盘/硬盘分区或者从逻辑上与硬盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但是与基本的物理存储介质(如硬盘、分区等)比较却包含有与LVM相关的管理参数。
  • 卷组(Volume Group, VG):卷组是由一个或多个物理卷组成的一个整体,在卷组中可以动态地添加或移除物理卷,卷组名称由用户自行定义。
  •  逻辑卷(Logical Volume,LV):逻辑卷是建立在卷组之上的,与物理卷无直接关系,对于逻辑卷来说,每一个卷组就是一个整体,从这个整体中切出一小块空间,作为用户创建文件系统基础,这一小块空间就称为逻辑卷。
  • 物理区块(Physical Extent, PE):每一个物理卷被划分为称为PE的基本单位,具有唯一编号的PE是可以被LVM寻址的最小单元,PE大小可配置,默认4MB。
  • 逻辑区块(Logical Extend,LE):逻辑卷也被划为为称为LE的可寻址的基本单元,在同一卷组中,LE的大小和PE是相同的,并且一一对应。

       图1描述了存储介质、物理卷、卷组、逻辑卷和文件系统之间的关系。

逻辑卷管理-LVM,第1张

图1. 存储介质、物理卷、卷组、逻辑卷和文件系统之间的关系

2. Linux下创建和管理LVM

       在UbuntuDebian Linux Mint 上安装 LVM的命令:

          sudo apt install lvm2

       在 CentOSFedoraAlmaLinux Red Hat 上安装 LVM的命令:

          sudo dnf install lvms

       LVM中的主要管理命令如表1所示。

表1. LVM中的管理命令
功能物理卷管理卷组管理逻辑卷管理
扫描(scan)pvscanvgscanlvscan
建立(create)pvcreatevgcreatelvcreate
显示(display)pvdisplayvgdisplaylvdisplay
删除(remove)pvremovevgremovelvremove
缩减(reduce)vgreducelvreduce
扩展(extend)vgextendlvextend

3. 环境准备

     准备4块硬盘:/dev/sdb、/dev/sdc、/dev/sdd和/dev/sde,每个硬盘的容量为10G。将硬盘/dev/sdc划分两个分区:/dev/sdc1和/dev/sdc2,其中,/dev/sdc的容量为2G,/dev/sdc2的容量为8G;将硬盘/dev/sdd划分为两个分区:/dev/sdd1和/dev/sdd2,其中,/dev/sdd1的容量5G,/dev/sdd2的容量为8G。

查看机器分区情况:

lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
...
sda      8:0    0    50G  0 disk 
├─sda1   8:1    0   512M  0 part /boot/efi
├─sda2   8:2    0     1K  0 part 
└─sda5   8:5    0  49.5G  0 part /
sdb      8:16   0    10G  0 disk 
sdc      8:32   0    10G  0 disk 
├─sdc1   8:33   0     2G  0 part 
└─sdc2   8:34   0     8G  0 part 
sdd      8:48   0    10G  0 disk 
├─sdd1   8:49   0     5G  0 part 
└─sdd2   8:50   0     5G  0 part 

sde     8:32   0    10G  0 disk 

...

4. 物理卷管理

4.1. 创建物理卷

       将硬盘/dev/sdb,以及硬盘分区/dev/sdc1、/dev/sdc2、/dev/sdd1、/dev/sdd2转换为物理卷,创建物理卷命令如下:

      # 将硬盘/dev/sdb创建为一个物理卷

         sudo pvcreate /dev/sdb   

WARNING: dos signature detected on /dev/sdb at offset 510. Wipe it? [y/n]: y
  Wiping dos signature on /dev/sdb.
  Physical volume "/dev/sdb" successfully created.

      # 将硬盘分区/dev/sdc1和/dev/sdc2创建为两个物理卷

         sudo pvcreate /dev/sdc[1,2]   

Physical volume "/dev/sdc1" successfully created.
Physical volume "/dev/sdc2" successfully created.

       # 将硬盘分区/dev/sdd1和/dev/sdd2创建为两个物理卷

          sudo pvcreate /dev/sdd1 /dev/sdd2 

Physical volume "/dev/sdd1" successfully created.
Physical volume "/dev/sdd2" successfully created.

4.2. 显示物理卷

       # 显示所有物理卷信息:

       sudo pvdisplay

  "/dev/sdb" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
 
PV Name               /dev/sdb
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               X8hoHa-3Osn-laEc-QlI3-1sT5-aaJZ-TvdTjg
   
  "/dev/sdc1" is a new physical volume of "<2.00 GiB"
  --- NEW Physical volume ---

  PV Name               /dev/sdc1
  VG Name               
  PV Size               <2.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               xC3MDe-V3NL-Xgsx-NSFb-8aaW-6OkA-W5CTlr
   
  "/dev/sdc2" is a new physical volume of "<8.00 GiB"
  --- NEW Physical volume ---
 
PV Name               /dev/sdc2
  VG Name               
  PV Size               <8.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               MTKNlr-Rk8T-v3qN-l8lR-QhB5-UtxR-3r3Ygt
   
  "/dev/sdd1" is a new physical volume of "<5.00 GiB"
  --- NEW Physical volume ---

  PV Name               /dev/sdd1
  VG Name               
  PV Size               <5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               OL6a9y-oDZG-j8G1-S0kV-2QT9-kBwS-PcnMS5
   
  "/dev/sdd2" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---

  PV Name               /dev/sdd2
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               dM8BcS-tHa7-7mnd-WYZ0-U0TG-7bPW-HLklmR 

       输出显示已经创建了5个物理卷:/dev/sdb、/dev/sdc1、/dev/sdc2、/dev/sdd1、/dev/sdd2。

      # 显示单个物理卷信息:

       sudo pvdisplay /dev/sdb

 "/dev/sdb" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               X8hoHa-3Osn-laEc-QlI3-1sT5-aaJZ-TvdTjg

4.3. 删除物理卷

      删除一个物理卷的命令如下:

      sudo pvremove /dev/sdd2

 Labels on physical volume "/dev/sdd2" successfully wiped.

4. 卷组管理

4.1. 创建卷组

      将物理卷/dev/sdb、/dev/sdc1和/dev/sdd1组组合成一个卷组,卷组的名称为vg1;将物理卷/dev/sdc2和/dev/sdd2组成一个卷组,卷组的名称为vg2。

      # 创建卷组vg1,该卷组是由物理卷/dev/sdb、/dev/sdc1和/dev/sdd1组成

         sudo vgcreate vg1 /dev/sdb /dev/sdc1 /dev/sdd1

Volume group "vg1" successfully created

      # 创建卷组vg2,该卷组是由物理卷/dev/sdc2和/dev/sdd2组成

         sudo vgcreate vg2 /dev/sdc2 /dev/sdd2

Volume group "vg2" successfully created

4.2. 显示卷组

      # 显示所有卷组信息:

      sudo vgdisplay

--- Volume group ---

VG Name               vg2
  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               12.99 GiB
  PE Size               4.00 MiB
  Total PE              3326
  Alloc PE / Size       0 / 0   
  Free  PE / Size       3326 / 12.99 GiB
  VG UUID               6nr7m3-ZsN5-YS6B-XKOd-XWPa-tuw6-hz365v
   
  --- Volume group ---
 
VG Name               vg1
  System ID             
  Format                lvm2
  Metadata Areas        3
  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                3
  Act PV                3
  VG Size               <16.99 GiB
  PE Size               4.00 MiB
  Total PE              4349
  Alloc PE / Size       0 / 0   
  Free  PE / Size       4349 / <16.99 GiB
  VG UUID               Isf2u3-0OGe-56zB-wf8k-0JZU-WOce-CJXJPt

       输出显示创建了2个卷组:vg1和vg2。

      # 显示单个卷组信息:

        sudo vgdisplay vg1

 --- Volume group ---
  VG Name               vg1
  System ID             
  Format                lvm2
  Metadata Areas        3
  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                3
  Act PV                3
  VG Size               <16.99 GiB
  PE Size               4.00 MiB
  Total PE              4349
  Alloc PE / Size       0 / 0   
  Free  PE / Size       4349 / <16.99 GiB
  VG UUID               Isf2u3-0OGe-56zB-wf8k-0JZU-WOce-CJXJPt

       显示卷组的命令还有:

      vgscan:扫描卷组的所有磁盘,并重新构建LVM缓存文件,同时显示卷组。

      vgs:使用可配置格式显示卷组信息,每行一个卷组。

4.3. 扩展卷组

      扩展卷组是指像一个卷组中增加一个或多个物理卷,示例如下:

      # 创建一个新的物理卷/dev/sde

         sudo pvcreate /dev/sde

 Physical volume "/dev/sde" successfully created.

      # 将新创建的物理卷/dev/sde加入到卷组vg2中

        sudo vgextend vg2 /dev/sde

 Volume group "vg2" successfully extended

4.4. 缩减卷组

      缩减卷组是指从一个卷组中移除一个    或多个物理卷,示例如下:

      # 将物理卷/dev/sde从卷组vg2中移除

       sudo vgreduce vg2 /dev/sde

Removed "/dev/sde" from volume group "vg2"

4.5. 删除卷组

      使用vgremove命令可以删除不包含逻辑卷的卷组,示例如下:

     # 删除逻辑卷vg2

      sudo vgremove vg2

Volume group "vg2" successfully removed

4.6. 分割卷组

       使用vgsplit命令可以拆分卷组中的物理卷,并创建新的卷组。示例如下:

      # 将卷组vg2中的物理卷/devsde拆分为一个新的卷组vg3

        sudo vgsplit vg2 vg3 /dev/sde

New volume group "vg3" successfully split from "vg2"

4.7 组合卷组

        使用lvmerge命令可以将两个卷组合并为一个更大的卷组,在合并卷组之前,确保两个卷组中的逻辑卷没有重叠,否则合并操作将会失败。示例如下:

      # 把卷组vg3合并到卷组vg2中

        sudo vgmerge -v vg2 vg3

 Checking for volume group "vg2"
  Checking for volume group "vg3"
  Archiving volume group "vg3" metadata (seqno 2).
  Archiving volume group "vg2" metadata (seqno 5).
  Writing out updated volume group
  WARNING: updating old metadata to 6 on /dev/sde for VG vg2.
  Creating volume group backup "/etc/lvm/backup/vg2" (seqno 6).

  Volume group "vg3" successfully merged into "vg2"

5. 逻辑卷管理

5.1. 创建逻辑卷

      在卷组vg1上创建一个大小为5GB,名称为lv11的逻辑卷:

      sudo lvcreate -L 5GB -n lv11 vg1

Logical volume "lv11" created.

      在卷组vg1上创建一个大小为6GB,名称为lv12的逻辑卷:

       sudo lvcreate -L 6GB -n lv12 vg1

Logical volume "lv12" created.

       在卷组vg2上创建一个名称为lv21的逻辑卷,该逻辑卷的大小为卷组剩余空间的40%:

       sudo lvcreate -l 40%VG -n lv21 vg2

Logical volume "lv21" created.

注:参数l指定卷组中剩余可用空间的百分比作为逻辑卷的大小

5.2. 显示逻辑卷

      显示所有的逻辑卷信息:

      sudo lvdisplay

 --- Logical volume ---
  LV Path                /dev/vg2/lv21
  LV Name                lv21
  VG Name                vg2

  LV UUID                4wmsnY-JJ6a-05wV-FXFn-ojN2-A1AS-0T2TYF
  LV Write Access        read/write
  LV Creation host, time myvm1, 2024-05-10 07:42:11 +0800
  LV Status              available
  # open                 0
  LV Size                <9.20 GiB
  Current LE             2354
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2
   
  --- Logical volume ---

  LV Path                /dev/vg1/lv11
  LV Name                lv11
  VG Name                vg1

  LV UUID                5195Ei-gZA6-50iR-Dyv6-iUTY-8QlK-PCam7I
  LV Write Access        read/write
  LV Creation host, time myvm1, 2024-05-09 21:35:36 +0800
  LV Status              available
  # open                 1
  LV Size                6.00 GiB
  Current LE             1536
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
   
  --- Logical volume ---

  LV Path                /dev/vg1/lv12
  LV Name                lv12
  VG Name                vg1

  LV UUID                NQslUU-vRdZ-g6Wr-D6Sf-3Jzm-U0DY-CGiX2c
  LV Write Access        read/write
  LV Creation host, time myvm1, 2024-05-09 22:16:13 +0800
  LV Status              available
  # open                 1
  LV Size                6.00 GiB
  Current LE             1536
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

      sudo lvs

  LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv11 vg1 -wi-ao----  6.00g                                                    
  lv12 vg1 -wi-ao----  6.00g                                                    
  lv21 vg2 -wi-a----- <9.20g   

       显示单个逻辑卷的信息:

       sudo lvdisplay /dev/lvg1/lv11

--- Logical volume ---
  LV Path                /dev/vg1/lv11
  LV Name                lv11
  VG Name                vg1
  LV UUID                5195Ei-gZA6-50iR-Dyv6-iUTY-8QlK-PCam7I
  LV Write Access        read/write
  LV Creation host, time myvm1, 2024-05-09 21:35:36 +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     256
  Block device           253:0

5.3. 创建文件系统并挂载

       在逻辑卷/dev/vg1/lv11上创建ext4文件系统:

      sudo mkfs  -t ext4 /dev/vg1/lv11

创建含有 1310720 个块(每块 4k)和 327680 个inode的文件系统
文件系统UUID:45f86733-16e7-4b27-9fd2-80daaf8fb8d6
超级块的备份存储于下列块: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736

正在分配组表: 完成                            
正在写入inode表: 完成                            
创建日志(16384 个块) 完成
写入超级块和文件系统账户统计信息: 已完成

      在逻辑卷/dev/vg1/lv12上创建ext4文件系统:

      sudo mkfs -t ext4 /dev/vg1/lv12

创建含有 1572864 个块(每块 4k)和 393216 个inode的文件系统
文件系统UUID:f6793315-8995-46ff-bd9b-a9cf7dee3624
超级块的备份存储于下列块: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736

正在分配组表: 完成                            
正在写入inode表: 完成                            
创建日志(16384 个块) 完成
写入超级块和文件系统账户统计信息: 已完成

       创建挂载点

        sudo mkdir /mnt/lv11

        sudo mkdir /mnt/lv12

       挂载逻辑卷

        sudo mount /dev/vg1/vg11 /mnt/lv11

        sudo mount /dev/vg1/vg12 /mnt/lv12

      查看磁盘挂载信息:

       df -Th

文件系统             类型      容量  已用  可用 已用% 挂载点
...
/dev/mapper/vg1-lv11 ext4      4.9G   24K  4.6G    1% /mnt/lv11
/dev/mapper/vg1-lv12 ext4      5.9G   24K  5.6G    1% /mnt/lv12

      为了机器重启后自动挂载逻辑卷,打开文件:

       sudo nano /etc/fstab

     在文件中最后添加如下信息:

/dev/vg1/lv11 /mnt/lv11 ext4 defaults,nofail,discard 0 0
/dev/vg1/lv12 /mnt/lv12 ext4 defaults,nofail,discard 0 0

      保存并关闭文件。

5.4. 扩展逻辑卷

      逻辑卷的最大优点是,当空间不足时,可以随时对其进行扩展。

      将逻辑卷lv11的空间扩展1GB:

      sudo lvextend -L +1GB /dev/vg1/lv11

 Size of logical volume vg1/lv11 changed from 5.00 GiB (1280 extents) to 6.00 GiB (1536 extents).
  Logical volume vg1/lv11 successfully resized.

      上述命令   实际上并没有增加文件系统的大小,而只是增加了逻辑卷的大小。为了使文件系统增长,我们需要使用以下命令调整文件系统的大小。

        sudo resize2fs /dev/vg1/lv11

/dev/vg1/lv11 上的文件系统已被挂载于 /mnt/lv11;需要进行在线调整大小
old_desc_blocks = 1, new_desc_blocks = 1
/dev/vg1/lv11 上的文件系统现在为 1572864 个块(每块 4k)。

5.5. 缩减逻辑卷

       可以使用lvreduce命令减小一个逻辑卷的大小,但在执行此操作之前需要非常小心,以确保不会丢失数据。在对逻辑卷进行任何缩减操作之前,强烈建议备份相关数据,以避免意外丢失。对于要缩小的逻辑卷,需要确保其文件系统支持缩小,对于 ext4 文件系统,首先可以使用resize2fs命令先缩小文件系统,然后使用lvreduce命令实际缩小逻辑卷的大小。

      例如,逻辑卷/dev/vg1/lv11的大小为5GB,其文件系统的大小也为5GB,该逻辑卷挂载到目录/mnt/lv11上,如果想要将该逻辑卷缩减为4GB,步骤如下:

      1) 卸载目录

        sudo umount /mnt/lv11

     2) 检查文件系统

        sudo e2fsck -f /dev/vg1/lv11

e2fsck 1.45.5 (07-Jan-2020)
第 1 步:检查inode、块和大小
第 2 步:检查目录结构
第 3 步:检查目录连接性
第 4 步:检查引用计数
第 5 步:检查组概要信息
/dev/vg1/lv11:11/393216 文件(0.0% 为非连续的), 46190/1572864 块

      3) 缩小文件系统

         sudo resize2fs /dev/vg1/lv11 4G

将 /dev/vg1/lv11 上的文件系统调整为 1048576 个块(每块 4k)。
/dev/vg1/lv11 上的文件系统现在为 1048576 个块(每块 4k)。

     4) 缩小逻辑卷

        sudo lvreduce -L 4G /dev/vg1/lv11

WARNING: Reducing active logical volume to 4.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg1/lv11? [y/n]: y
  Size of logical volume vg1/lv11 changed from 6.00 GiB (1536 extents) to 4.00 GiB (1024 extents).
  Logical volume vg1/lv11 successfully resized.

5.6. 删除逻辑卷

       可以使用lvremove命令删除逻辑卷。在删除逻辑卷前,先卸载其挂载的目录,删除逻辑卷后,数据将无法恢复。

      例如,逻辑卷/dev/vg1/lv12挂载到目录/mnt/lv12,删除该逻辑卷的步骤:

     1) 卸载目录

        sudo umount /mnt/lv12

     2)删除逻辑卷

        sudo lvremove /dev/vg1/lv12

Do you really want to remove and DISCARD active logical volume vg1/lv12? [y/n]: y
  Logical volume "lv12" successfully removed

相关文章: