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就是最后可以被格式化使用的类似分区。 |
二、操作
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 的管理中移除,并清除相关的元数据,使得该设备不再被识别为一个物理卷。
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),因为删除包含活动逻辑卷的卷组可能会导致数据丢失。
在删除一个卷组之前,通常的步骤包括:
卸载所有相关的文件系统。 |
使用 |
使用 |
删除卷组的基本命令格式如下:
vgremove VolumeGroupName
如果卷组中的物理卷(Physical Volumes, PVs)已经物理上不存在了(比如硬盘已经被移除),你可能需要使用额外的选项来强制删除卷组:
vgremove --force VolumeGroupName
但是,谨慎使用 --force
选项,因为它可能会导致数据丢失,特别是如果你错误地删除了错误的卷组。
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,你不能减小它们的大小。
三、常用示例
用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