介绍
LVM或逻辑卷管理是一种存储设备管理技术,使用户能够汇集和抽象组件存储设备的物理布局,从而实现更轻松,更灵活的管理。 利用设备映射器Linux内核框架,当前迭代LVM2可用于将现有存储设备收集到组中,并根据需要从组合空间分配逻辑单元。
在本指南中,我们将介绍如何使用LVM管理存储设备。 我们将向您展示如何显示有关卷和潜在目标的信息,如何创建和销毁各种类型的卷,以及如何通过调整大小或转换来修改现有卷。 我们将使用Ubuntu 18.04服务器来演示这些操作。
先决条件
为了跟进,您应该可以访问Ubuntu 18.04服务器。 您需要为非root用户配置为管理任务配置的sudo
权限。 您可以按照我们的Ubuntu 18.04初始服务器设置指南来创建必要的帐户。
要熟悉LVM组件和概念并测试基本的LVM配置,请在开始本教程之前按照我们的LVM指南简介进行操作 。
准备好后,使用sudo
用户登录服务器。
显示有关物理卷,卷组和逻辑卷的信息
能够轻松获取有关系统中各种LVM组件的信息非常重要。 幸运的是,LVM工具套件提供了大量工具,用于显示有关LVM中每个层的信息。
显示有关所有LVM兼容块存储设备的信息
要显示LVM可能管理的所有可用块存储设备,请使用lvmdiskscan
命令:
sudo lvmdiskscan
Output /dev/sda [ 200.00 GiB]
/dev/sdb [ 100.00 GiB]
2 disks
2 partitions
0 LVM physical volume whole disks
0 LVM physical volumes
我们可以看到可能用作LVM物理卷的设备。
这可能是添加新存储设备以与LVM一起使用时的第一步。
显示有关物理卷的信息
将标头写入存储设备以将其标记为可以自由地用作LVM组件。 具有这些标头的设备称为物理卷 。
您可以使用带有-l
选项的lvmdiskscan
显示系统上的所有物理设备,该选项仅返回物理卷:
sudo lvmdiskscan -l
Output WARNING: only considering LVM devices
/dev/sda [ 200.00 GiB] LVM physical volume
/dev/sdb [ 100.00 GiB] LVM physical volume
2 LVM physical volume whole disks
0 LVM physical volumes
pvscan
命令与上面的命令非常相似,因为它会搜索所有可用设备的LVM物理卷。 输出格式有点不同,它包含少量附加信息:
sudo pvscan
Output PV /dev/sda VG LVMVolGroup lvm2 [200.00 GiB / 0 free]
PV /dev/sdb VG LVMVolGroup lvm2 [100.00 GiB / 10.00 GiB free]
Total: 2 [299.99 GiB] / in use: 2 [299.99 GiB] / in no VG: 0 [0 ]
如果您需要更多细节, pvs
和pvdisplay
命令是更好的选择。
pvs
命令具有高度可配置性,可以以多种不同格式显示信息。 由于可以严格控制其输出,因此在需要编写脚本或自动化时经常使用它。 它的基本输出提供了类似于早期命令的有用的一目了然的摘要:
sudo pvs
Output PV VG Fmt Attr PSize PFree
/dev/sda LVMVolGroup lvm2 a-- 200.00g 0
/dev/sdb LVMVolGroup lvm2 a-- 100.00g 10.00g
对于更详细,人类可读的输出, pvdisplay
命令通常是更好的选择:
sudo pvdisplay
Output --- Physical volume ---
PV Name /dev/sda
VG Name LVMVolGroup
PV Size 200.00 GiB / not usable 4.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 51199
Free PE 0
Allocated PE 51199
PV UUID kRUOyU-0ib4-ujPh-kAJP-eeQv-ztRL-4EkaDQ
--- Physical volume ---
PV Name /dev/sdb
VG Name LVMVolGroup
PV Size 100.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 25599
Free PE 2560
Allocated PE 23039
PV UUID udcuRJ-jCDC-26nD-ro9u-QQNd-D6VL-GEIlD7
正如您所看到的, pvdisplay
命令通常是获取有关物理卷的详细信息的最简单命令。
要发现已映射到每个卷的逻辑扩展区,请将-m
选项传递给pvdisplay
:
sudo pvdisplay -m
Output --- Physical volume ---
PV Name /dev/sda
VG Name LVMVolGroup
PV Size 200.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 51199
Free PE 38395
Allocated PE 12804
PV UUID kRUOyU-0ib4-ujPh-kAJP-eeQv-ztRL-4EkaDQ
--- Physical Segments ---
Physical extent 0 to 0:
Logical volume /dev/LVMVolGroup/db_rmeta_0
Logical extents 0 to 0
Physical extent 1 to 5120:
Logical volume /dev/LVMVolGroup/db_rimage_0
Logical extents 0 to 5119
. . .
在尝试确定哪个数据保存在哪个物理磁盘上以进行管理时,这非常有用。
显示卷组的信息
LVM还有大量工具可显示有关卷组的信息。
vgscan
命令可用于扫描系统以查找可用的卷组。 它还会在必要时重建缓存文件。 将卷组导入新系统时,这是一个很好的命令:
sudo vgscan
Output Reading all physical volumes. This may take a while...
Found volume group "LVMVolGroup" using metadata type lvm2
该命令不会输出太多信息,但它应该能够找到系统上的每个可用卷组。 要显示更多信息,可以使用vgs
和vgdisplay
命令。
与物理卷对应物一样, vgs
命令具有多种功能,可以以各种格式显示大量信息。 由于其输出可以轻松操作,因此在需要编写脚本或自动化时经常使用它。 例如,一些有用的输出修改是显示物理设备和逻辑卷路径:
sudo vgs -o +devices,lv_path
Output VG #PV #LV #SN Attr VSize VFree Devices Path
LVMVolGroup 2 4 0 wz--n- 299.99g 10.00g /dev/sda(0) /dev/LVMVolGroup/projects
LVMVolGroup 2 4 0 wz--n- 299.99g 10.00g /dev/sda(2560) /dev/LVMVolGroup/www
LVMVolGroup 2 4 0 wz--n- 299.99g 10.00g /dev/sda(3840) /dev/LVMVolGroup/db
LVMVolGroup 2 4 0 wz--n- 299.99g 10.00g /dev/sda(8960) /dev/LVMVolGroup/workspace
LVMVolGroup 2 4 0 wz--n- 299.99g 10.00g /dev/sdb(0) /dev/LVMVolGroup/workspace
对于更详细,人类可读的输出, vgdisplay
命令通常是最佳选择。 添加-v
标志还提供有关构建卷组的物理卷的信息,以及使用卷组创建的逻辑卷:
sudo vgdisplay -v
Output Using volume group(s) on command line.
--- Volume group ---
VG Name LVMVolGroup
. . .
--- Logical volume ---
LV Path /dev/LVMVolGroup/projects
. . .
--- Logical volume ---
LV Path /dev/LVMVolGroup/www
. . .
--- Logical volume ---
LV Path /dev/LVMVolGroup/db
. . .
--- Logical volume ---
LV Path /dev/LVMVolGroup/workspace
. . .
--- Physical volumes ---
PV Name /dev/sda
. . .
PV Name /dev/sdb
. . .
vgdisplay
命令很有用,因为它可以将有关LVM的许多不同元素的信息联系在一起。
显示有关逻辑卷的信息
要显示有关逻辑卷的信息,LVM有一组相关的工具。
与其他LVM组件一样, lvscan
选项扫描系统并输出有关其找到的逻辑卷的最少信息:
sudo lvscan
Output ACTIVE '/dev/LVMVolGroup/projects' [10.00 GiB] inherit
ACTIVE '/dev/LVMVolGroup/www' [5.00 GiB] inherit
ACTIVE '/dev/LVMVolGroup/db' [20.00 GiB] inherit
ACTIVE '/dev/LVMVolGroup/workspace' [254.99 GiB] inherit
有关更完整的信息, lvs
命令灵活,功能强大且易于在脚本中使用:
sudo lvs
Output LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
db LVMVolGroup -wi-ao---- 20.00g
projects LVMVolGroup -wi-ao---- 10.00g
workspace LVMVolGroup -wi-ao---- 254.99g
www LVMVolGroup -wi-ao---- 5.00g
要了解条带数和逻辑卷类型,请使用--segments
选项:
sudo lvs --segments
Output LV VG Attr #Str Type SSize
db LVMVolGroup rwi-a-r--- 2 raid1 20.00g
mirrored_vol LVMVolGroup rwi-a-r--- 3 raid1 10.00g
test LVMVolGroup rwi-a-r--- 3 raid5 10.00g
test2 LVMVolGroup -wi-a----- 2 striped 10.00g
test3 LVMVolGroup rwi-a-r--- 2 raid1 10.00g
最易读的输出是由lvdisplay
命令生成的。
添加-m
标志后,该工具还将显示有关逻辑卷如何分解和分发的信息:
sudo lvdisplay -m
Output --- Logical volume ---
LV Path /dev/LVMVolGroup/projects
LV Name projects
VG Name LVMVolGroup
LV UUID IN4GZm-ePJU-zAAn-DRO3-1f2w-qSN8-ahisNK
LV Write Access read/write
LV Creation host, time lvmtest, 2016-09-09 21:00:03 +0000
LV Status available
# open 1
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
--- Segments ---
Logical extents 0 to 2559:
Type linear
Physical volume /dev/sda
Physical extents 0 to 2559
. . .
从输出到底部可以看到, /dev/LVMVolGroup/projects
逻辑卷完全包含在此示例中的/dev/sda
物理卷中。 如果您需要删除该底层设备并希望将数据移至特定位置,则此信息非常有用。
创建或扩展LVM组件
本节将讨论如何创建和扩展物理卷,卷组和逻辑卷。
从原始存储设备创建物理卷
要使用具有LVM的存储设备,必须首先将它们标记为物理卷。 这指定LVM可以在卷组中使用该设备。
首先,使用lvmdiskscan
命令查找LVM可以查看和使用的所有块设备:
sudo lvmdiskscan
Output /dev/sda [ 200.00 GiB]
/dev/sdb [ 100.00 GiB]
2 disks
2 partitions
0 LVM physical volume whole disks
0 LVM physical volumes
在这里,我们可以看到适合在LVM的物理卷中转换的设备。
警告 :请确保仔细检查您要与LVM一起使用的设备是否没有任何已写入其中的重要数据。 在LVM中使用这些设备将覆盖当前内容。 如果您的服务器上已有重要数据,请在继续之前进行备份。
要将存储设备标记为LVM物理卷,请使用pvcreate
。 您可以一次传入多个设备:
sudo pvcreate /dev/sda /dev/sdb
这应该在所有目标设备上写入LVM标头,以将它们标记为LVM物理卷。
从物理卷创建新卷组
要从LVM物理卷创建新卷组,请使用vgcreate
命令。 您必须提供卷组名称,后跟至少一个LVM物理卷:
sudo vgcreate volume_group_name /dev/sda
此示例将使用单个初始物理卷创建卷组。 如果您愿意,可以在创建时传入多个物理卷:
sudo vgcreate volume_group_name /dev/sda /dev/sdb /dev/sdc
通常,每台服务器只需要一个卷组。 可以将所有LVM管理的存储添加到该池,然后可以从中分配逻辑卷。
您可能希望拥有多个卷组的一个原因是,如果您觉得需要为不同的卷使用不同的扩展区大小。 通常您不必设置范围大小(默认大小为4M足以满足大多数用途),但是如果需要,可以通过传递-s
选项来创建卷组:
suod vgcreate -s 8M volume_group_name /dev/sda
这将创建一个具有8M范围大小的新卷组。
将物理卷添加到现有卷组
要通过添加其他物理卷来扩展卷组,请使用vgextend
命令。 此命令采用卷组,后跟要添加的物理卷。 如果您愿意,可以一次传入多个设备:
sudo vgextend volume_group_name /dev/sdb
物理卷将添加到卷组,从而扩展存储池的可用容量。
通过指定大小创建逻辑卷
要从卷组存储池创建逻辑卷,请使用lvcreate
命令。 使用-L
选项指定逻辑卷的大小,使用-n
选项指定名称,并传入卷组以分配空间。
例如,要从LVMVolGroup
卷组创建名为test
的10G逻辑卷,请键入:
sudo lvcreate -L 10G -n test LVMVolGroup
如果卷组有足够的可用空间来容纳卷容量,则将创建新的逻辑卷。
从剩余的所有可用空间创建逻辑卷
如果要使用卷组中的剩余可用空间创建卷,请使用带有-n
选项的vgcreate
命令命名并像以前一样传入卷组。 使用-l 100%FREE
选项,而不是传入大小,该选项使用卷组中的其余扩展区来构成逻辑卷:
sudo lvcreate -l 100%FREE -n test2 LVMVolGroup
这应该耗尽逻辑卷中的剩余空间。
使用高级选项创建逻辑卷
也可以使用一些高级选项创建逻辑卷。 您可能希望考虑的一些选项是:
- --type :这指定逻辑卷的类型,它确定如何分配逻辑卷。 如果没有足够的基础物理卷来正确创建所选择的地形,则某些可用类型将不可用。 一些最常见的类型是:
- linear :默认类型。 使用的基础物理设备(如果不止一个)将简单地相互附加,一个接一个。
- stripe :与RAID 0类似,条带拓扑将数据划分为块,并以循环方式跨底层物理卷进行传播。 这可以提高性能,但可能会导致更大的数据漏洞。 这需要下面描述的
-i
选项和至少两个物理卷。 - raid1 :创建镜像RAID 1卷。 默认情况下,镜像将具有两个副本,但可以通过下面描述的
-m
选项指定更多副本。 至少需要两个物理卷。 - raid5 :创建RAID 5卷。 至少需要三个物理卷。
- raid6 :创建RAID 6卷。 至少需要四个物理卷。
- -m :指定要保留的其他数据副本的数量。 值“1”指定维护一个附加副本,总共两组数据。
- -i :指定应维护的条带数。 这是
striped
类型所必需的,并且可以修改某些其他RAID选项的默认行为。 - -s :指定操作应从现有逻辑卷而不是新的独立逻辑卷创建快照。
我们将提供一些这些选项的示例来演示它们通常如何使用。
要创建条带卷,必须至少指定两个条带。 此拓扑和条带计数至少需要两个具有可用容量的物理卷:
sudo lvcreate --type striped -i 2 -L 10G -n striped_vol LVMVolGroup
要创建镜像卷,请使用raid1
类型。 如果需要两组以上的数据,请使用-m
选项。 此示例使用-m 2
创建总共三组数据(LVM将其计为具有两个镜像的一个原始数据集)。 您将需要至少三个物理卷才能成功:
sudo lvcreate --type raid1 -m 2 -L 20G -n mirrored_vol LVMVolGroup
要创建卷的快照,必须将原始逻辑卷提供给快照而不是卷组。 快照最初不会占用太多空间,但随着对正在跟踪的逻辑卷的更改而增大。 此过程中使用的大小是快照的最大大小(超过此大小的快照已损坏且无法使用;但是可以扩展接近其容量的快照):
sudo lvcreate -s -L 10G -n snap_test LVMVolGroup/test
注意 :要将逻辑卷还原到快照的时间点,请使用lvconvert --merge
命令:
sudo lvconvert --merge LVMVolGroup/snap_test
这将使快照的原点恢复到拍摄快照时的状态。
如您所见,有许多选项可以显着改变逻辑卷的运行方式。
增加逻辑卷的大小
LVM的主要优点之一是它在配置逻辑卷时提供的灵活性。 您可以在不停止系统的情况下轻松调整卷的数量或大小。
要增大现有逻辑卷的大小,请使用lvresize
命令。 使用-L
标志指定新大小。 您还可以通过添加“+”大小来使用相对大小。 在这种情况下,LVM将按指定的数量增加逻辑卷的大小。 要自动调整逻辑卷上正在使用的文件系统的大小,请传入--resizefs
标志。
要正确提供要扩展的逻辑卷的名称,您需要提供卷组,后跟斜杠,然后是逻辑卷:
sudo lvresize -L +5G --resizefs LVMVolGroup/test
在此示例中, LVMVolGroup
卷组上的test
逻辑卷的逻辑卷和文件系统都将增加5G。
如果您希望手动处理文件系统扩展,可以取出--resizefs
选项,然后使用文件系统的本机扩展实用程序。 例如,对于Ext4文件系统,您可以键入:
sudo lvresize -L +5G LVMVolGroup/test
sudo resize2fs /dev/LVMVolGroup/test
这会给你留下相同的结果。
删除或缩小LVM组件
由于容量减少可能导致数据丢失,因此通过减小或移除组件来缩小可用容量的过程通常会涉及更多。
减小逻辑卷的大小
要缩小逻辑卷,首先应备份数据 。 因为这会降低可用容量,所以错误可能会导致数据丢失。
准备好后,检查当前使用的空间:
df -h
OutputFilesystem Size Used Avail Use% Mounted on
. . .
/dev/mapper/LVMVolGroup-test 4.8G 521M 4.1G 12% /mnt/test
在这个例子中,它看起来像目前正在使用的空间略高于521M。 使用此选项可帮助您估计可以将音量减小到的大小。
接下来,卸载文件系统。 与扩展不同,应在卸载时执行文件系统收缩:
cd ~
sudo umount /dev/LVMVolGroup/test
卸载后,检查文件系统以确保一切正常。 使用-t
选项-t
文件系统类型。 即使文件系统显示正常,我们也会使用-f
来检查:
sudo fsck -t ext4 -f /dev/LVMVolGroup/test
检查文件系统后,可以使用文件系统的本机工具减小文件系统大小。 对于Ext4文件系统,这将是resize2fs
命令。 传递文件系统的最终大小:
警告 :此处最安全的选择是选择比您当前使用量大的最终大小。 给自己一些缓冲空间以避免数据丢失并确保备份到位。
sudo resize2fs -p /dev/LVMVolGroup/test 3G
操作完成后,通过将相同大小传递给带有-L
标志的lvresize
命令来调整逻辑卷的大小:
sudo lvresize -L 3G LVMVolGroup/test
您将收到有关数据丢失可能性的警告。 如果准备就绪,请键入y继续。
减少逻辑卷后,再次检查文件系统:
sudo fsck -t ext4 -f /dev/LVMVolGroup/test
如果一切正常,您可以使用常用的mount命令重新安装文件系统:
sudo mount /dev/LVMVolGroup/test /mnt/test
您的逻辑卷现在应该减小到适当的大小。
删除逻辑卷
如果不再需要逻辑卷,可以使用lvremove
命令将其删除。
首先,卸载当前挂载的逻辑卷:
cd ~
sudo umount /dev/LVMVolGroup/test
然后,键入以下命令删除逻辑卷:
sudo lvremove LVMVolGroup/test
系统将要求您确认该程序。 如果您确定要删除逻辑卷,请键入y 。
删除卷组
要删除整个卷组(包括其中的所有逻辑卷),请使用vgremove
命令。
在删除卷组之前,通常应使用上述过程删除逻辑卷。 至少,您必须确保卸载卷组包含的任何逻辑卷:
sudo umount /dev/LVMVolGroup/www
sudo umount /dev/LVMVolGroup/projects
sudo umount /dev/LVMVolGroup/db
然后,您可以通过将卷组名称传递给vgremove
命令来删除整个卷组:
sudo vgremove LVMVolGroup
系统将提示您确认是否要删除卷组。 如果您仍有任何逻辑卷,则会在删除之前为您提供单独的确认提示。
删除物理卷
如果要从LVM管理中删除物理卷,则需要的过程取决于LVM当前是否正在使用该设备。
如果正在使用物理卷,则必须将位于设备上的物理盘区移动到其他位置。 这要求卷组具有足够的其他物理卷来处理物理盘区。 如果使用更复杂的逻辑卷类型,即使有足够的可用空间以容纳拓扑,也可能需要具有其他物理卷。
如果卷组中有足够的物理卷来处理物理盘区,请通过键入以下内容将它们移出要删除的物理卷:
sudo pvmove /dev/sda
此过程可能需要一段时间,具体取决于卷的大小和要传输的数据量。
将扩展区重新定位到对等卷后,可以通过键入以下内容从卷组中删除物理卷:
sudo vgreduce LVMVolGroup /dev/sda
这将从卷组中删除空出的物理卷。 完成此操作后,您可以通过键入以下内容从存储设备中删除物理卷标记:
sudo pvremove /dev/sda
您现在应该可以将删除的存储设备用于其他目的,或者将其从系统中完全删除。
结论
到目前为止,您应该对如何使用LVM管理Ubuntu 18.04上的存储设备有一个了解。 您应该知道如何获取有关现有LVM组件状态的信息,如何使用LVM组成存储系统,以及如何修改卷以满足您的需求。 您可以在安全的环境中测试这些概念,以便更好地掌握它们如何组合在一起。