Linux LVM

阅读数:142 评论数:0

跳转到新版页面

分类

Linux

正文

一、简介

Logical Volume Manager,LVM的重点是可以弹性调整文件系统的容量。

PV   Physical Volume,通过fdisk(t)将实际的分区system id改为8e(LVM的标识符),然后经过pvcreate命令将它转成LVM最底层的物理卷(PV),之后才能将这些PV加以利用。
VG   Volume Group,将多个PV整合成一个VG
PE   Physical Extend,它是整个LVM最小的存储块,也就是里面的block大小。
LV   最终的VG还会切成LV,这个LV就是最后可以被格式化使用的类似分区。

二、操作

1、PV阶段

pvcreate将物理分区新建成PV
pvscan查询目前系统里面任何具有PV的磁盘
pvdisplay显示出目前系统上面的PV状态
pvremove将pv属性删除,让该分区不具有PV属性

(1)pvcreate

在使用 pvcreate 之前,您需要有一个未分区的磁盘或磁盘分区。以下是 pvcreate 命令的基本用法:

pvcreate /dev/sdx1

这里 /dev/sdx1 是一个示例设备文件名,它代表了一个磁盘分区。您应该替换为实际要用作物理卷的分区。

在执行 pvcreate 之后,您可以使用 vgcreate 创建一个卷组(Volume Group),然后使用 lvcreate 在该卷组上创建逻辑卷(Logical Volume)。

常用的选项:

-f 或 --force 强制创建物理卷,即使该设备已经被使用。
-v 或 --verbose 提供详细的输出信息。
-y 或 --yes 在执行操作前不再询问确认。
--uuid 指定物理卷的 UUID。
--zero y|n  在物理卷头部写入零,通常是出于安全考虑。

(2)pvscan

它扫描所有可用的硬盘寻找物理卷(Physical Volumes,PVs)。这个命令用于显示系统中的物理卷信息,包括它们的大小、使用情况、所属的卷组(Volume Group,VG)等信息。

当你连接了新的硬盘或者改变了现有硬盘上的物理卷时,pvscan 可以帮助系统识别这些变化。它也常常在系统启动时运行,以确保 LVM 系统的元数据是最新的。

执行该命令后,你会看到类似下面的输出:

  PV /dev/sda1   VG vg01   lvm2 [20.00 GiB / 0    free]
  PV /dev/sdb1   VG vg01   lvm2 [20.00 GiB / 20.00 GiB free]
  PV /dev/sdc1   VG vg02   lvm2 [10.00 GiB / 10.00 GiB free]
  Total: 3 [50.00 GiB] / in use: 3 [50.00 GiB] / in no VG: 0 [0   ]

这个输出显示了每个物理卷的设备路径、所属的卷组、LVM 版本、大小以及未分配空间的大小。

常用选项:

-s 或 --short 显示简短的输出信息。
--cache 更新缓存的物理卷信息。
-u 或 --uuid  显示物理卷的唯一标识符(UUID)

(3)pvdisplay

当您在系统上创建了物理卷后,您可以使用 pvdisplay 来查看这些物理卷的详细属性,比如它们的大小、使用情况、分配策略、物理扩展大小等。

要显示系统中所有物理卷的信息,您可以简单地运行:

pvdisplay

如果您只对特定的物理卷感兴趣,您可以指定设备名:

pvdisplay /dev/sdx1

pvdisplay 命令的输出通常包括以下信息:

  • 物理卷名称
  • 物理卷的大小
  • 物理卷的UUID
  • 是否分配了物理卷
  • 物理卷上的物理扩展(PE)总数和已使用的PE数
  • 物理卷所属的卷组名称
  • 物理卷上的数据分配策略

例如,您可能会看到类似以下的输出:

  --- Physical volume ---
  PV Name               /dev/sdx1
  VG Name               vg01
  PV Size               50.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              12799
  Free PE               0
  Allocated PE          12799
  PV UUID               H1f2t3-nJ5k-Lm8p-1r0t-2p4R-F2G3-hFt5Y0

(4)pvremove

用于从系统中删除一个或多个物理卷(Physical Volume,PV)。在你执行 pvremove 之前,确保物理卷上没有任何卷组(Volume Group,VG)或者逻辑卷(Logical Volume,LV)存在,因为 pvremove 只能在没有任何LVM卷依赖于该物理卷的情况下执行。

如果物理卷当前是某个卷组的一部分,你必须先使用 vgreduce 命令从卷组中移除物理卷,或者如果整个卷组都不再需要了,可以使用 vgremove 命令来删除整个卷组。

在确认物理卷可以安全移除后,你可以使用以下命令来移除物理卷:

pvremove /dev/sdx1

如果成功,pvremove 通常不会显示任何输出,但会将物理卷从 LVM 的管理中移除,并清除相关的元数据,使得该设备不再被识别为一个物理卷。

2、VG阶段

vgcreate [-s N[mgt]] VG名称 PV名称
-s:后面接PE的大小,可以使用m,g,t
vgscan 查找系统上面是否有vg
vgdisplay 显示目前系统上的vg状态
vgextend 在VG中添加 PV
vgreduce 从VG中删除PV
vgchange 设置 VG是否启动
vgremove 删除一个VG

(1)vgcreate

用于创建一个新的卷组(Volume Group,VG)。一个卷组是一个或多个物理卷的集合,你可以在其中创建逻辑卷(Logical Volumes,LVs)。

创建卷组的基本语法如下:

vgcreate [options] VolumeGroupName PhysicalVolumePath1 [PhysicalVolumePath2 ...]

你可以一次性指定多个物理卷来创建卷组。

例如,如果你有两个物理卷 /dev/sdb1 和 /dev/sdc1,你想要创建一个名为 vgdata 的卷组,你可以使用以下命令:

vgcreate vgdata /dev/sdb1 /dev/sdc1

(2)vgscan

执行 vgscan 命令会搜索系统中的所有物理卷(PVs),识别那些已经配置为 LVM 卷组的物理卷,并将发现的卷组信息显示出来。

此外,vgscan 命令也可以更新 /etc/lvm/.cache 文件,这个文件包含了当前系统中所有卷组和物理卷的缓存信息。

(3)vgdisplay

用于显示有关卷组(Volume Groups,VGs)的信息。这个命令会列出系统中所有卷组的详细信息,包括它们的大小、剩余空间、物理卷数、逻辑卷数等。

当你执行 vgdisplay 命令时,它将显示以下信息:

  • 卷组名称(VG Name)
  • 卷组访问权限(Access)
  • 卷组状态(Status)
  • 卷组大小(VG Size)
  • 可用空间(Free PE / Size)
  • 已用空间(Allocated PE / Size)
  • 物理卷(PVs)的数量
  • 逻辑卷(LVs)的数量
  • 快照卷的数量(如果有)
  • 卷组的物理扩展大小(PE Size)
  • 和其他一些详细信息

基本的 vgdisplay 命令格式如下:

vgdisplay [options] [VolumeGroupName]

(4)vgextend

它允许你将一个新的物理卷(Physical Volume, PV)添加到现有的卷组(Volume Group, VG)中。这样做可以增加卷组的大小,从而为逻辑卷(Logical Volumes, LVs)提供更多的空间。

当你的系统需要更多的存储空间时,你可以通过添加新的硬盘或者分区作为物理卷,并将其加入到已有的卷组中来扩展存储容量。

vgextend 命令的基本语法如下:

vgextend VolumeGroupName /dev/PhysicalVolumePath

其中,VolumeGroupName 是你想要扩展的卷组的名称,/dev/PhysicalVolumePath 是新物理卷的设备路径。

在执行 vgextend 之前,你需要确保新的物理卷已经被初始化为 LVM 物理卷。

(5)vgreduce

用于从现有的卷组中移除一个或多个物理卷(Physical Volumes, PVs)。这个命令常常在你需要从卷组中剔除损坏的硬盘或者不再需要某个物理卷的时候使用。

在使用 vgreduce 之前,你应该确保要移除的物理卷上没有存储逻辑卷的数据。如果有,你需要先迁移或删除相关的逻辑卷。

vgreduce 命令的基本语法如下:

vgreduce VolumeGroupName /dev/PhysicalVolumePath

这里的 VolumeGroupName 是你想要缩减的卷组的名称,而 /dev/PhysicalVolumePath 是你想要从卷组中移除的物理卷的设备路径。

如果你想要从卷组中移除所有空闲的物理卷,可以使用 --all 选项:

vgreduce vgdata --all

在某些情况下,如果物理卷上的数据已经被移动或删除,但 LVM 元数据仍然认为该物理卷被占用,你可能需要使用 --removemissing 选项,这个选项会尝试修复或清除丢失的物理卷的元数据:

vgreduce --removemissing VolumeGroupName

(6)vgchange

它用于更改卷组(Volume Group, VG)的属性,或者激活/停用卷组中的所有逻辑卷(Logical Volumes, LVs)。这个命令在系统维护、卷组管理或数据恢复时非常有用。

激活一个卷组中的所有逻辑卷,使其可以被系统访问:

vgchange -ay VolumeGroupName

这里 -ay 选项表示自动(auto)激活(activate)卷组中的所有逻辑卷。

停用一个卷组中的所有逻辑卷,使其不可被系统访问:

vgchange -an VolumeGroupName

这里 -an 选项表示自动(auto)停用(deactivate)卷组中的所有逻辑卷。

更改卷组中逻辑卷的可见性,例如,使卷组中的所有逻辑卷在系统启动时自动激活:

vgchange -ay --sysinit VolumeGroupName

--sysinit 选项通常用于系统初始化脚本中,以确保在系统启动时逻辑卷处于激活状态。

更改卷组的最大逻辑卷数量:

vgchange -l MaxLVs VolumeGroupName

其中 -l 后面跟的是你想要设置的最大逻辑卷数量。

更改卷组的最大物理卷数量:

vgchange -p MaxPVs VolumeGroupName

其中 -p 后面跟的是你想要设置的最大物理卷数量。

更改卷组的元数据副本数量:

vgchange --metadataprofile MetadataProfile VolumeGroupName

其中 --metadataprofile 后面跟的是元数据配置文件的名称,用于调整卷组的元数据副本数量。

(7)vgremove

用于删除一个现有的卷组(Volume Group, VG)。在删除卷组之前,你需要确保该卷组中没有任何活动的逻辑卷(Logical Volumes, LVs),因为删除包含活动逻辑卷的卷组可能会导致数据丢失。

在删除一个卷组之前,通常的步骤包括:

卸载所有相关的文件系统。

使用 lvremove 删除卷组中的所有逻辑卷。

 使用 vgchange 命令停用卷组(如果需要)。

删除卷组的基本命令格式如下:

vgremove VolumeGroupName

如果卷组中的物理卷(Physical Volumes, PVs)已经物理上不存在了(比如硬盘已经被移除),你可能需要使用额外的选项来强制删除卷组:

vgremove --force VolumeGroupName

但是,谨慎使用 --force 选项,因为它可能会导致数据丢失,特别是如果你错误地删除了错误的卷组。

3、LV阶段

lvcreate [-L N[mgt]] [-n LV名称] VG名称
lvcreate [-l N] [-n LV名称] VG名称
-L:后面接容量,可以是M,G,T,
-l:扣面接PE的个数
-n:后面接LV我名称
 
lvscan:查询系统上面的LV
lvdisplay:显示系统上面的LV状态
lvextend:扩容LV
lvreduce:减容LV
lvremove:删除一个LV
lvresize:对LV大小的调整

(1)lvcreate

逻辑卷是在物理卷(Physical Volumes, PVs)之上的一个虚拟块设备,它可以被格式化并挂载为文件系统。

创建新逻辑卷时,你可以指定它的大小、名称以及它所属的卷组。以下是一些常见的 lvcreate 命令选项和示例:

创建一个指定大小的逻辑卷:

lvcreate -L Size -n LVName VolumeGroupName

其中 -L 后面跟的是逻辑卷的大小(可以用M, G, T等单位表示),-n 后面跟的是逻辑卷的名称。

创建一个使用卷组中所有剩余空间的逻辑卷:

lvcreate -l 100%FREE -n LVName VolumeGroupName

其中 -l 后面跟的是逻辑卷大小的逻辑扩展单元数量或百分比。

创建一个镜像逻辑卷,用于数据冗余:

lvcreate -L Size -m1 -n LVName VolumeGroupName

其中 -m1 表示创建一个镜像,-m1 后面的数字表示镜像的数量。

创建一个快照逻辑卷,用于备份或其他目的:

lvcreate -L Size -s -n SnapshotLVName /dev/VolumeGroupName/OriginalLVName

其中 -s 表示创建一个快照,SnapshotLVName 是快照逻辑卷的名称,OriginalLVName 是你要快照的原始逻辑卷。

创建一个条带化逻辑卷,用于提高性能:

lvcreate -L Size -i NumberOfStripes -n LVName VolumeGroupName

其中 -i 后面跟的是条带的数量。

(2)lvscan

它扫描所有可用的逻辑卷,并显示它们的状态。这个命令非常有用,因为它可以快速提供系统上所有逻辑卷的概览,包括它们是否已激活(active)或者未激活(inactive)。

当你运行 lvscan 命令时,它会输出类似下面的信息:

ACTIVE            '/dev/vgname/lvname' [size] inherit
INACTIVE          '/dev/vgname/lvname2' [size] inherit

这里:

  • /dev/vgname/lvname 表示逻辑卷的设备路径,其中 vgname 是卷组的名称,lvname 是逻辑卷的名称。
  • [size] 显示了逻辑卷的大小。
  • ACTIVE 或 INACTIVE 表示逻辑卷当前的状态。

(3)lvdisplay

用于显示逻辑卷(Logical Volume, LV)的详细信息。当你运行 lvdisplay 命令时,它会列出系统中每个逻辑卷的详细信息,包括大小、布局、分配策略、读写状态等。

以下是一些 lvdisplay 命令的示例和可能的输出:

  • 显示所有逻辑卷的信息:

lvdisplay
  • 显示特定卷组中的所有逻辑卷的信息:
lvdisplay /dev/vgname
  • 显示特定逻辑卷的信息:
lvdisplay /dev/vgname/lvname

当你运行 lvdisplay,你可能会看到类似下面的输出:

  --- Logical volume ---
  LV Path                /dev/vgname/lvname
  LV Name                lvname
  VG Name                vgname
  LV UUID                XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
  LV Write Access        read/write
  LV Creation host, time hostname, 2021-01-01 12:00:00 +0000
  LV Status              available
  # open                 1
  LV Size                100.00 MiB
  Current LE             25
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

这个输出提供了关于逻辑卷的一些关键信息:

  • LV Path:逻辑卷的设备路径。
  • LV Name:逻辑卷的名称。
  • VG Name:包含逻辑卷的卷组的名称。
  • LV UUID:逻辑卷的唯一标识符。
  • LV Write Access:逻辑卷的读写访问权限。
  • LV Creation host, time:逻辑卷创建的主机和时间。
  • LV Status:逻辑卷的状态,比如是否可用。
  • # open:当前打开该逻辑卷的文件描述符数量。
  • LV Size:逻辑卷的大小。
  • Segments:逻辑卷的分段数量。
  • Allocation:逻辑卷的分配策略。
  • Read ahead sectors:读取预读扇区的数量。
  • Block device:逻辑卷对应的块设备标识。

(4)lvextend

这个命令允许你扩展现有的逻辑卷,以便使用卷组(VG)中未分配的空间,从而增加存储容量。

在使用 lvextend 之前,你需要确保卷组中有足够的未使用的物理扩展(PEs)。如果没有足够的空间,你可能需要先添加一个新的物理卷(PV)到卷组,或者减小其他逻辑卷的大小来释放空间。

以下是使用 lvextend 的一些常见用法:

增加逻辑卷大小,指定增加的绝对值(例如,增加1GB):

lvextend -L +1G /dev/vgname/lvname

增加逻辑卷到特定大小(例如,增加到5GB):

lvextend -L 5G /dev/vgname/lvname

使用卷组中所有剩余的空间来扩展逻辑卷:

lvextend -l +100%FREE /dev/vgname/lvname

指定从特定物理卷扩展逻辑卷:

lvextend /dev/vgname/lvname /dev/sdx1

在使用 lvextend 成功扩展逻辑卷后,你可能还需要扩展文件系统,以便操作系统能够使用新增的空间。对于 ext4 文件系统,你可以使用 resize2fs 命令,而对于 XFS 文件系统,你可以使用 xfs_growfs 命令。例如:

对于 ext4 文件系统:

resize2fs /dev/vgname/lvname

对于 XFS 文件系统:

xfs_growfs /dev/vgname/lvname

(5)lvreduce

这个命令允许你释放逻辑卷中不再需要的空间,并将其返回给卷组(VG),以便可以将这些空间分配给其他逻辑卷或保留未来使用。

在使用 lvreduce 之前,你需要非常小心,因为如果不正确地使用,可能会导致数据丢失。在减小逻辑卷的大小之前,务必确保你的数据已经备份,并且理解你正在做的操作。

以下是使用 lvreduce 的一些常见用法:

减小逻辑卷大小,指定减小的绝对值(例如,减少1GB):

lvreduce -L -1G /dev/vgname/lvname

减小逻辑卷到特定大小(例如,减小到5GB):

lvreduce -L 5G /dev/vgname/lvname

减小逻辑卷的大小,指定减少的百分比(例如,减少20%):

lvreduce -l -20% /dev/vgname/lvname

在使用 lvreduce 之前,如果逻辑卷上有文件系统,你通常需要先减小文件系统的大小,以避免文件系统被破坏。文件系统的缩减必须在缩减逻辑卷之前完成。

对于 ext4 文件系统,你可以使用 resize2fs 命令来先减小文件系统的大小,例如:

umount /dev/vgname/lvname
e2fsck -f /dev/vgname/lvname
resize2fs /dev/vgname/lvname 5G
lvreduce -L 5G /dev/vgname/lvname
mount /dev/vgname/lvname

请注意,对于某些文件系统,如 XFS,你不能减小它们的大小,因此在创建逻辑卷时就要特别谨慎。

(6)lvremove

用于删除一个或多个逻辑卷(LV)。使用此命令时,所指定的逻辑卷将被永久删除,其上的数据也会丢失。因此,在执行 lvremove 之前,务必确认数据已经备份或者逻辑卷上的数据不再需要。

以下是使用 lvremove 的一些基本步骤:

首先,确保没有任何进程正在使用逻辑卷。如果逻辑卷已经挂载,你需要先卸载它。使用 umount 命令可以卸载文件系统:

umount /dev/vgname/lvname

确认逻辑卷的名称,并且再次检查是否有任何数据需要备份。 

使用 lvremove 命令删除逻辑卷:

lvremove /dev/vgname/lvname

或者,如果你在一个命令中删除多个逻辑卷,可以这样做:

lvremove /dev/vgname/lvname1 /dev/vgname/lvname2

(7)lvresize

这个命令可以增加或减少逻辑卷的大小,但是在使用它时需要小心,因为错误的操作可能会导致数据丢失。

在使用 lvresize 之前,如果你要减小逻辑卷的大小,务必先缩减文件系统的大小,以防止数据损坏。如果你要增加逻辑卷的大小,通常需要在调整逻辑卷大小后扩展文件系统,以便使用新增的空间。

以下是 lvresize 的一些基本用法:

增加逻辑卷大小,指定增加的绝对值(例如,增加1GB):

lvresize -L +1G /dev/vgname/lvname

增加逻辑卷到特定大小(例如,增加到10GB):

lvresize -L 10G /dev/vgname/lvname

增加逻辑卷的大小,指定增加的百分比(例如,增加10%):

lvresize -l +10%FREE /dev/vgname/lvname

在增加逻辑卷大小之后,你需要扩展文件系统以使用新增的空间。对于 ext4 文件系统,你可以使用 resize2fs 命令来扩展文件系统,通常不需要卸载文件系统:

resize2fs /dev/vgname/lvname

减小逻辑卷大小,指定减小的绝对值(例如,减少1GB):

lvresize -L -1G /dev/vgname/lvname

减小逻辑卷到特定大小(例如,减小到5GB):

lvresize -L 5G /dev/vgname/lvname

在减小逻辑卷大小之前,你需要先减小文件系统的大小,对于 ext4 文件系统,可以使用 resize2fs 命令在卸载文件系统之后进行缩减:

umount /dev/vgname/lvname
e2fsck -f /dev/vgname/lvname
resize2fs /dev/vgname/lvname 5G
lvresize -L 5G /dev/vgname/lvname
mount /dev/vgname/lvname

请记住,对于某些文件系统,如 XFS,你不能减小它们的大小。

三、常用示例

1、放大LV

用fdisk (t)设置新的具有8e systemID的分区

partprobe
#创建PV
pvcreate /dev/hda10
#查看系统中所有具有PV的磁盘
pvscan
#显示系统上的VG状态
vgdisplay
# 把PV添加到VG中
vgextend /centos /dev/hda10
#PV中PE添加到LV中,-L 单位为“kKmMgGtT”字节,-l 指定逻辑卷的大小(LE数)
lvresize -l +179 /dev/centos/home
#显示lv状态
lvdisplay
#当文件系统是xfs时,文件系统扩容
#查看文件系统格式 
df -T
xfs_growfs /dev/centos/home
# 或者使用resize2fs
resize2fs /dev/centos/home




相关推荐

一、思路 1、使用lsattr查看文件是否i(不可变动)属性,如果有的话就使用chattr移除。 2、如果文件没有i属性,则逐层目录查看属性,原来父目录有i属性,使用chattr -i xxx命令去掉

一、概述 在 Linux 系统中,"too many open files" 错误通常表示一个进程已经达到了它能够打开的文件描述符的最大数量。每个进程都有一个限制,这个限制指定了它可以同时打开的文件描

1)rpm -qa|grep java rpm是管理套件, -qa 使用询问模式,查询所有套件 (2) rpm -e --nodeps xx.openj

一、安装ffmpeg 1、安装nux dextop yum源 2、yum安装 sudo yum install ffmpeg ffmpeg-devel -y # 验证是否安装成功 ffmpeg -h

一、概述 1、为什么Linus不使用GPLv3 在 PC 上,只要你得到了某个程序的源代码,就可以自行编译生成二进制程序,然后替换掉原有的二进制程序,你的程序自由很容易得到保证。然而 iPod、iPh

说明:这种方式只是用于方便阅读代码,因为可以在源代间快速索引跳跃。但是最后可能会有一些warning,可以不必关心,如果是强迫症,可以使用下面这种方式来去掉。

一、概述 在Linux系统中,/usr/bin和/usr/local/bin是两个常见的目录,用于存放可执行文件(二进制文件)。 很多应用都安装在/usr/local下面,先看一下automake工具

  一、概述 vmstat命令是最常见的Linux/Unix监控工具,可以监控给定时间间隔服务器的CPU使用率、内存使用、IO情况。相比top命令,可以查看到整个机器的CPU、内存、IO的使用情况,而

一、概述 sar,System Activity Reporter。是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁

一、简介 简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 二、使用方法 1、基本语法  awk '条件类型1 {动作1} 条件类型2{动作2} ...