Skip to content

逻辑卷管理

1. LVM 介绍

LVM( Logical Volume Manager )是一个device mapper框架,用来提供逻辑卷管理能力。逻辑卷存在于块设备和具体文件系统之间,可以让上层应用忽略块设备的物理布局,达到更方便更灵活使用设备的目的。

使用LVM的正常流程:

  1. 将物理设备映射为物理卷
  2. 将物理卷组成逻辑卷组
  3. 在逻辑卷组中划分逻辑卷
  4. 使用逻辑卷,格式化文件系统

2. 物理卷管理

2.1 创建物理卷

[root@localhost ~]# pvcreate /dev/vdb
Physical volume "/dev/vdb" successfully created.

通过pvcreate命令创建物理卷,如果目标设备中已存在文件系统会提示是否需要格式化

WARNING: ext4 signature detected on /dev/vdb at offset 1080. Wipe it? [y/n]:

创建时默认会以设备目前可用最大大小创建

2.2 查看物理卷

pvdisplay 命令用于显示物理卷(Physical Volume)的属性信息,包括物理卷的名称、UUID、大小、状态、分配情况等等。

[root@localhost ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/vdb
  VG Name               test
  PV Size               200.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              51199
  Free PE               51199
  Allocated PE          0
  PV UUID               gQB42U-IKt2-517n-RB3q-p9ob-bAz7-Ggvjtd

使用 pvdisplay 命令时,可以不带任何参数,直接执行该命令,它会列出系统中所有的物理卷的信息。也可以指定一个或多个物理卷的名称作为参数,只显示指定物理卷的信息。

pvdisplay 命令的输出结果包括以下信息:

  • 物理卷的名称(PV Name)
  • 物理卷的 UUID(UUID)
  • 物理卷的大小(Total PE / Free PE)
  • 物理卷的状态(Allocatable / Exported / Missing)
  • 物理卷的属性(例如,是否加密、是否只读等等)
  • 物理卷所属的卷组(VG Name)
  • 物理卷上的逻辑卷(LV Name)

pvs则用来查看物理卷的状态

[root@localhost ~]# pvs
  PV         VG Fmt  Attr PSize    PFree   
  /dev/vdb     lvm2 ---  <200.00g <200.00g

2.3 修改物理卷属性

pvchange 命令是 Linux 系统中 LVM(逻辑卷管理)的一个命令,用于更改物理卷的属性。以下是 pvchange 命令的使用方法:

pvchange [options] [PhysicalVolumePath...]

其中,PhysicalVolumePath 是要更改属性的物理卷路径,可以指定多个物理卷路径,用空格分隔。

以下是一些常用的选项:

  • -a, --all: 更改所有物理卷的属性。

  • -x, --allocatable y/n: 设置物理卷是否可分配。y 表示可分配,n 表示不可分配。

  • -t, --test: 测试模式,不会实际更改物理卷的属性,而是显示将要执行的操作。

以下是一些示例:

1、将物理卷 /dev/sdb1 设置为不可分配(需要先将其分配给逻辑卷组,下同):

pvchange -x n /dev/sdb1

2、将所有物理卷设置为可分配:

pvchange -x y -a

3、测试将物理卷 /dev/sdb1 设置为不可分配的操作:

pvchange -x n -t /dev/sdb1

在使用 pvchange 命令时,请注意备份重要数据,并谨慎操作,以免造成数据丢失或其他不必要的损失。

2.4 删除物理卷

[root@localhost ~]# pvremove /dev/vdb 
  Labels on physical volume "/dev/vdb" successfully wiped.

3. 逻辑卷组管理

3.1 创建卷组

vgcreate 命令用于创建一个新的卷组(Volume Group),并将一个或多个物理卷(Physical Volume)添加到该卷组中。它是 LVM(Logical Volume Manager) 管理工具中的一个命令,可以帮助管理员创建新的卷组,以便在该卷组上创建逻辑卷(Logical Volume)。

使用 vgcreate 命令时,需要指定要创建的卷组的名称作为参数,以及要添加到该卷组中的物理卷的名称。例如,要创建一个名为 myvg 的卷组,并将物理卷 /dev/sdb1 添加到该卷组中,可以使用以下命令:

vgcreate myvg /dev/sdb1

如果要将多个物理卷添加到卷组中,可以在命令中指定多个物理卷的名称,例如:

vgcreate myvg /dev/sdb1 /dev/sdc1 /dev/sdd1

在创建卷组时,还可以使用一些选项来指定卷组的属性,例如卷组的大小、PE(Physical Extent)的大小等等。常用的选项包括:

  • -s:指定 PE 的大小。
  • -c:指定卷组的最大 PE 数量。
  • -A:指定卷组的自动扩展属性。
  • -v:显示详细的创建过程。

例如,要创建一个 PE 大小为 16MB 的卷组,并将物理卷 /dev/sdb1 添加到该卷组中,可以使用以下命令:

vgcreate -s 16M myvg /dev/sdb1

需要注意的是,创建卷组时需要指定至少一个物理卷,否则无法创建卷组。同时,创建卷组时需要确保物理卷的状态正常,并且没有被其他卷组使用。

3.2 查看卷组

vgdisplay 命令用于显示卷组(Volume Group)的属性信息,包括卷组的名称、UUID、大小、状态、物理卷的数量、逻辑卷的数量等等。它是 LVM(Logical Volume Manager) 管理工具中的一个命令,可以帮助管理员查看卷组的详细信息。

使用 vgdisplay 命令时,可以不带任何参数,直接执行该命令,它会列出系统中所有的卷组的信息。也可以指定一个或多个卷组的名称作为参数,只显示指定卷组的信息。

vgdisplay 命令的输出结果包括以下信息(通过-v可以显示更多属性):

  • 卷组的名称(VG Name)
  • 卷组的 UUID(VG UUID)
  • 卷组的大小(VG Size)
  • 卷组的状态(VG Status)
  • 卷组的属性(例如,是否只读、是否自动扩展等等)
  • 卷组中物理卷的数量(PV Count)
  • 卷组中逻辑卷的数量(LV Count)
  • 卷组中可用的 PE 数量(Free PE)
  • 卷组中已分配的 PE 数量(Allocated PE)
  • 卷组中 PE 的大小(PE Size)

通过 vgdisplay 命令,管理员可以查看卷组的详细信息,了解卷组的使用情况,以及卷组中物理卷和逻辑卷的情况,从而更好地管理 LVM 系统。

3.3 修改卷组属性

vgchange 命令用于修改卷组(Volume Group)的属性信息,例如修改卷组的 UUID、标记卷组为只读或可写等等。

使用 vgchange 命令时,需要指定要修改的卷组的名称作为参数,以及要修改的属性选项。常用的选项包括:

  • -u:修改卷组的 UUID。
  • -x:标记卷组为不可用状态。
  • -a:标记卷组为可用状态。
  • -r:标记卷组为只读状态。
  • -w:标记卷组为可写状态。

例如,要将卷组 myvg 标记为只读状态,可以使用以下命令:

vgchange -r myvg

需要注意的是,修改卷组的属性信息可能会对 LVM 系统的运行产生影响,因此在使用 vgchange 命令时,需要谨慎操作,确保修改的属性信息是正确的,并且不会对系统造成不良影响。同时,修改卷组的属性信息可能会影响到卷组中的逻辑卷,因此在修改卷组属性之前,需要确保卷组中的逻辑卷的状态正常,并且没有被其他进程使用。

3.4 伸缩卷组

3.4.1 拓展

vgextend 命令用于将一个或多个物理卷(Physical Volume)添加到已有的卷组(Volume Group)中。

使用 vgextend 命令时,需要指定要扩展的卷组的名称作为参数,以及要添加到该卷组中的物理卷的名称。例如,要将物理卷 /dev/sdc1 添加到卷组 myvg 中,可以使用以下命令:

vgextend myvg /dev/sdc1

如果要将多个物理卷添加到卷组中,可以在命令中指定多个物理卷的名称,例如:

vgextend myvg /dev/sdc1 /dev/sdd1

在扩展卷组时,还可以使用一些选项来指定卷组的属性,例如卷组的大小、PE(Physical Extent)的大小等等。常用的选项包括:

  • -s:指定 PE 的大小。
  • -c:指定卷组的最大 PE 数量。
  • -v:显示详细的扩展过程。

例如,要将物理卷 /dev/sdc1 添加到卷组 myvg 中,并将 PE 大小设置为 16MB,可以使用以下命令:

vgextend -s 16M myvg /dev/sdc1

需要注意的是,扩展卷组时需要确保物理卷的状态正常,并且没有被其他卷组使用。同时,扩展卷组可能会影响到卷组中的逻辑卷,因此在扩展卷组之前,需要确保卷组中的逻辑卷的状态正常,并且没有被其他进程使用。

3.4.2 缩减

vgreduce 命令可以将物理卷从卷组中删除,并将其空间返回给卷组。以下是 vgreduce 命令的语法:

vgreduce [options] VG PV [PV...]

其中,VG 表示要操作的卷组名称,PV 表示要从卷组中移除的物理卷名称。以下是 vgreduce 命令的一些常用选项:

  • -a, --all: 移除卷组中的所有物理卷。
  • -f, --force: 强制执行操作,即使可能会导致数据丢失。
  • -t, --test: 执行测试操作,不会实际执行移除操作。

以下是 vgreduce 命令的一些示例:

  1. 移除卷组 vg01 中的物理卷 /dev/sdb1
    vgreduce vg01 /dev/sdb1
    
  2. 移除卷组 vg01 中的所有物理卷:
    vgreduce -a vg01
    
  3. 在测试模式下移除卷组 vg01 中的物理卷 /dev/sdb1
    vgreduce -t vg01 /dev/sdb1
    

需要注意的是,在执行 vgreduce 命令时,需要谨慎操作,以避免数据丢失或其他不良后果。在执行实际操作之前,建议先使用 -t 选项进行测试,以确保操作不会对数据造成损害。

3.5 删除卷组

vgremove 命令可以将卷组及其相关的逻辑卷和物理卷全部删除。以下是 vgremove 命令的语法:

vgremove [options] VG

其中,VG 表示要删除的卷组名称。以下是 vgremove 命令的一些常用选项:

  • -f, --force: 强制执行操作,即使可能会导致数据丢失。
  • -t, --test: 执行测试操作,不会实际执行删除操作。

以下是 vgremove 命令的一些示例:

  1. 删除卷组 vg01
    vgremove vg01
    
  2. 在测试模式下删除卷组 vg01
    vgremove -t vg01
    

需要注意的是,在执行 vgremove 命令时,需要谨慎操作,以避免数据丢失或其他不良后果。在执行实际操作之前,建议先使用 -t 选项进行测试,以确保操作不会对数据造成损害。

4. 逻辑卷管理

4.1 创建逻辑卷

lvcreate 命令可以从一个或多个卷组中分配空间来创建逻辑卷,并指定逻辑卷的大小、名称、文件系统类型等参数。以下是 lvcreate 命令的语法:

lvcreate [options] VG -n LV

其中,VG 表示要创建逻辑卷的卷组名称,LV 表示要创建的逻辑卷名称。以下是 lvcreate 命令的一些常用选项:

  • -L, --size: 指定逻辑卷的大小,可以使用单位 BKMGTP
  • -n, --name: 指定逻辑卷的名称。
  • -r, --readahead: 指定逻辑卷的预读块数。
  • -y, --yes: 自动回答所有提示,不需要确认。

以下是 lvcreate 命令的一些示例:

  1. 创建一个大小为 10GB 的逻辑卷 lv01
    lvcreate -L 10G -n lv01 vg01
    
  2. 创建一个大小为 100MB 的逻辑卷 lv02,并指定文件系统类型为 ext4
    lvcreate -L 100M -n lv02 vg01 -t ext4
    
  3. 创建一个大小为 1TB 的逻辑卷 lv03,并指定预读块数为 256:
    lvcreate -L 1T -n lv03 vg01 -r 256
    

需要注意的是,在执行 lvcreate 命令时,需要确保卷组中有足够的空间来创建逻辑卷。在创建逻辑卷之前,建议先使用 vgdisplay 命令查看卷组的空间使用情况。另外,创建逻辑卷之后,还需要使用 mkfs 命令创建文件系统,并使用 mount 命令将逻辑卷挂载到文件系统中。

4.2 查看逻辑卷

lvdisplay 命令可以显示逻辑卷的名称、大小、卷组、状态等信息。以下是 lvdisplay 命令的语法:

lvdisplay [options] [LV...]

其中,LV 表示要显示信息的逻辑卷名称。如果不指定 LV 参数,则会显示所有逻辑卷的信息。以下是 lvdisplay 命令的一些常用选项:

  • -a, --all: 显示所有逻辑卷的信息。
  • -c, --colon: 以冒号分隔的格式显示信息。
  • -m, --maps: 显示逻辑卷和物理卷之间的映射关系。
  • -v, --verbose: 显示详细信息。

以下是 lvdisplay 命令的一些示例:

  1. 显示逻辑卷 lv01 的信息:
    lvdisplay lv01
    
  2. 显示所有逻辑卷的信息:
    lvdisplay -a
    
  3. 以冒号分隔的格式显示逻辑卷 lv01 的信息:
    lvdisplay -c lv01
    

需要注意的是,在执行 lvdisplay 命令时,需要确保当前用户具有足够的权限来访问逻辑卷的信息。在显示逻辑卷的信息之前,建议先使用 vgdisplay 命令查看卷组的信息,以确保逻辑卷所在的卷组存在且正常。

4.3 拓展逻辑卷

lvextend 命令是 LVM(逻辑卷管理器)中的一个命令,用于扩展一个逻辑卷的大小。它可以从一个或多个卷组中分配空间来扩展逻辑卷,并将其大小增加到指定的大小。以下是 lvextend 命令的语法:

lvextend [options] LV

其中,LV 表示要扩展的逻辑卷名称。以下是 lvextend 命令的一些常用选项:

  • -L, --size: 指定逻辑卷的新大小,可以使用单位 BKMGTP
  • -r, --resizefs: 自动调整逻辑卷上的文件系统大小。
  • -y, --yes: 自动回答所有提示,不需要确认。

以下是 lvextend 命令的一些示例:

  1. 将逻辑卷 lv01 的大小增加到 20GB:
    lvextend -L 20G lv01
    
  2. 将逻辑卷 lv02 的大小增加到 200MB,并自动调整文件系统大小:
    lvextend -L 200M -r lv02
    

需要注意的是,在执行 lvextend 命令时,需要确保卷组中有足够的空间来扩展逻辑卷。在扩展逻辑卷之前,建议先使用 lvdisplay 命令查看逻辑卷的信息,以确保逻辑卷存在且正常。另外,扩展逻辑卷之后,还需要使用 resize2fs 命令(如果是 ext 文件系统)或其他相应的命令来调整文件系统大小。

4.4 伸缩逻辑卷

lvresize 命令可以从一个或多个卷组中分配空间来调整逻辑卷的大小,并将其大小调整到指定的大小。与 lvextend 命令不同的是,lvresize 命令可以同时缩小和扩展逻辑卷的大小。以下是 lvresize 命令的语法:

lvresize [options] LV

其中,LV 表示要调整大小的逻辑卷名称。以下是 lvresize 命令的一些常用选项:

  • -L, --size: 指定逻辑卷的新大小,可以使用单位 BKMGTP
  • -r, --resizefs: 自动调整逻辑卷上的文件系统大小。
  • -y, --yes: 自动回答所有提示,不需要确认。

以下是 lvresize 命令的一些示例( lvresize需要lv先格式化成具体的文件系统,并且不同的文件系统可能有不同的大小限制 ):

  1. 将逻辑卷 lv01 的大小增加到 20GB:
    lvresize -L 20G lv01
    
  2. 将逻辑卷 lv02 的大小缩小到 100MB,并自动调整文件系统大小:
    lvresize -L 100M -r lv02
    

需要注意的是,在执行 lvresize 命令时,需要确保卷组中有足够的空间来调整逻辑卷的大小。在调整逻辑卷的大小之前,建议先使用 lvdisplay 命令查看逻辑卷的信息,以确保逻辑卷存在且正常。另外,调整逻辑卷的大小之后,还需要使用 resize2fs 命令(如果是 ext 文件系统)或其他相应的命令来调整文件系统大小。

4.5 删除逻辑卷

lvremove 命令可以将逻辑卷及其相关的文件系统、逻辑卷快照等全部删除。以下是 lvremove 命令的语法:

lvremove [options] LV

其中,LV 表示要删除的逻辑卷名称。以下是 lvremove 命令的一些常用选项:

  • -f, --force: 强制执行操作,即使可能会导致数据丢失。
  • -y, --yes: 自动回答所有提示,不需要确认。

以下是 lvremove 命令的一些示例:

  1. 删除逻辑卷 lv01
    lvremove lv01
    
  2. 强制删除逻辑卷 lv02,即使可能会导致数据丢失:
    lvremove -f lv02
    

需要注意的是,在执行 lvremove 命令时,需要谨慎操作,以避免数据丢失或其他不良后果。在执行实际操作之前,建议先使用 -y 选项进行确认,以确保操作不会对数据造成损害。另外,删除逻辑卷之后,还需要使用 umount 命令将逻辑卷从文件系统中卸载。

5. 文件系统管理

接下来就是在设备上创建并挂载使用一个文件系统。需要执行以下步骤:

  1. 使用 fdisk 命令对设备进行分区(如果大于2T,需要使用parted工具)。可以根据需要创建一个或多个分区,例如:
    fdisk /dev/sdb
    
  2. 使用 mkfs 命令创建文件系统。可以根据需要选择不同的文件系统类型,例如:
    mkfs.ext4 /dev/sdb1
    
  3. 创建一个目录,作为文件系统的挂载点。可以使用 mkdir 命令创建一个目录,例如:
    mkdir /mnt/myfs
    
  4. 使用 mount 命令将文件系统挂载到目录中。例如:
    mount /dev/sdb1 /mnt/myfs
    

现在,文件系统已经成功挂载到 /mnt/myfs 目录中,可以在该目录下进行文件操作了。如果需要卸载文件系统,可以使用 umount 命令,例如:

umount /mnt/myfs

需要注意的是,在执行这些操作时,需要确保当前用户具有足够的权限来进行分区、创建文件系统和挂载文件系统。另外,需要根据实际情况选择合适的文件系统类型和存储介质大小。