LVM或逻辑卷管理是一种存储设备管理技术,使用户能够汇集和抽象组件存储设备的物理布局,从而实现更轻松,更灵活的管理。利用设备映射器Linux内核框架,当前迭代LVM2可用于将现有存储设备收集到组中,并根据需要从组合空间分配逻辑单元。
在本指南中,我们将介绍如何使用LVM管理存储设备。我们将向您展示如何显示有关卷和潜在目标的信息,如何创建和销毁各种类型的卷,以及如何通过调整大小或转换来修改现有卷。我们将使用Ubuntu 18.04服务器来演示这些操作。
为了跟进,您应该可以访问Ubuntu 18.04服务器。您需要具有为管理任务配置sudo
权限的非root用户。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
熟悉LVM组件和概念并测试基本的LVM配置。
准备就绪后,请与您的sudo
用户一起登录您的服务器。
能够轻松获取有关系统中各种LVM组件的信息非常重要。幸运的是,LVM工具套件提供了大量工具,用于显示有关LVM堆栈中每个层的信息。
要显示LVM可能管理的所有可用块存储设备,请使用以下lvmdiskscan
命令:
sudo lvmdiskscan
/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
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
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
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
--- 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
--- 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
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
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
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
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
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
--- 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可以在卷组中使用该设备。
首先,使用该lvmdiskscan
命令查找LVM可以查看和使用的所有块设备:
sudo lvmdiskscan
/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
,并传入卷组以分配空间。
例如,要创建test
从LVMVolGroup
卷组中命名的10G逻辑卷,请键入:
sudo lvcreate -L 10G -n test LVMVolGroup
如果卷组有足够的可用空间来容纳卷容量,则将创建新的逻辑卷。
如果要使用卷组中的剩余可用空间创建卷,请使用带有-n
命名选项的vgcreate
命令,并像以前一样传入卷组。使用该-l 100%FREE
选项,而不是传入大小,该选项使用卷组中的其余扩展区来形成逻辑卷:
sudo lvcreate -l 100%FREE -n test2 LVMVolGroup
这应该耗尽逻辑卷中的剩余空间。
也可以使用一些高级选项创建逻辑卷。您可能希望考虑的一些选项是:
-i
选项和至少两个物理卷。-m
选项指定更多副本。至少需要两个物理卷。striped
类型所必需的,并且可以修改某些其他RAID选项的默认行为。我们将提供一些这些选项的示例来演示它们通常如何使用。
要创建条带卷,必须至少指定两个条带。此拓扑和条带计数至少需要两个具有可用容量的物理卷:
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
这会给你留下相同的结果。
由于容量减少可能导致数据丢失,因此通过减小或移除组件来缩小可用容量的过程通常会涉及更多。
要缩小逻辑卷,首先应备份数据。因为这会降低可用容量,所以错误可能会导致数据丢失。
准备好后,检查当前使用的空间:
df -h
Filesystem 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
选项传入文件系统类型。即使文件系统显示正常,我们也会用-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组成存储系统,以及如何修改卷以满足您的需求。您可以在安全的环境中测试这些概念,以便更好地掌握它们如何组合在一起。
更多Ubuntu教程请前往腾讯云+社区学习更多知识。
参考文献:《How To Use LVM To Manage Storage Devices on Ubuntu 18.0
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。