介绍
Logical Volume Management,或 LVM,是一种存储设备管理技术,允许用户将组件存储设备的物理布局聚合和抽象,以便灵活管理。
在本教程中,您将学习如何通过显示关于卷和潜在目标的信息来管理LVM,创建和摧毁各种类型的卷,并通过调整或转换修改现有卷。
前提条件
要继续下去,你需要有一个非root用户,在Ubuntu 18.04服务器上配置了sudo
特权,你可以遵循我们的Ubuntu 18.04初始服务器设置指南(https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-18-04)来开始。
此外,如果您不熟悉 LVM 组件和概念,您可以查看我们的 引入 LVM 指南以获取更多信息。
当你准备好时,与你的sudo
用户登录你的服务器。
步骤 1 - 显示物理卷、卷组和逻辑卷的信息
访问系统上的各种 LVM 组件的信息对于管理您的物理和逻辑卷至关重要。
显示有关所有 LVM 兼容区块存储设备的信息
要显示 LVM 潜在管理的所有可用的区块存储设备,请使用lvmdiskscan
命令:
1sudo lvmdiskscan
1[secondary_label Output]
2 /dev/sda [ 200.00 GiB]
3 /dev/sdb [ 100.00 GiB]
4 2 disks
5 2 partitions
6 0 LVM physical volume whole disks
7 0 LVM physical volumes
注意可能被用作LVM的物理卷的设备。
这可能会是您在添加新的存储设备时使用LVM的第一步。
显示物理量信息
一个标题是写在存储设备上,以标记它们作为LVM组件的免费使用。
您可以使用lvmdiskscan
与-l
选项显示系统上的所有物理设备,该选项只会返回物理量:
1sudo lvmdiskscan -l
1[secondary_label Output]
2 WARNING: only considering LVM devices
3 /dev/sda [ 200.00 GiB] LVM physical volume
4 /dev/sdb [ 100.00 GiB] LVM physical volume
5 2 LVM physical volume whole disks
6 0 LVM physical volumes
pvscan
命令类似于搜索 LVM 物理卷的所有可用设备,输出格式包含少量额外信息:
1sudo pvscan
1[secondary_label Output]
2 PV /dev/sda VG LVMVolGroup lvm2 [200.00 GiB / 0 free]
3 PV /dev/sdb VG LVMVolGroup lvm2 [100.00 GiB / 10.00 GiB free]
4 Total: 2 [299.99 GiB] / in use: 2 [299.99 GiB] / in no VG: 0 [0 ]
如果您需要有关音量的额外细节,则pvs
和pvdisplay
命令可以为您做。
pvs
命令高度可配置,可以以许多不同的格式显示信息. 由于其输出可以严格控制,因此通常在需要脚本或自动化时使用。
1sudo pvs
1[secondary_label Output]
2 PV VG Fmt Attr PSize PFree
3 /dev/sda LVMVolGroup lvm2 a-- 200.00g 0
4 /dev/sdb LVMVolGroup lvm2 a-- 100.00g 10.00g
对于更清晰、易于人读的输出,pvdisplay
命令是一个很好的选择:
1sudo pvdisplay
1[secondary_label Output]
2 --- Physical volume ---
3 PV Name /dev/sda
4 VG Name LVMVolGroup
5 PV Size 200.00 GiB / not usable 4.00 MiB
6 Allocatable yes (but full)
7 PE Size 4.00 MiB
8 Total PE 51199
9 Free PE 0
10 Allocated PE 51199
11 PV UUID kRUOyU-0ib4-ujPh-kAJP-eeQv-ztRL-4EkaDQ
12
13 --- Physical volume ---
14 PV Name /dev/sdb
15 VG Name LVMVolGroup
16 PV Size 100.00 GiB / not usable 4.00 MiB
17 Allocatable yes
18 PE Size 4.00 MiB
19 Total PE 25599
20 Free PE 2560
21 Allocated PE 23039
22 PV UUID udcuRJ-jCDC-26nD-ro9u-QQNd-D6VL-GEIlD7
若要发现已对每个卷进行映射的逻辑范围,请在-m
选项中转到pvdisplay
:
1sudo pvdisplay -m
1[secondary_label Output]
2 --- Physical volume ---
3 PV Name /dev/sda
4 VG Name LVMVolGroup
5 PV Size 200.00 GiB / not usable 4.00 MiB
6 Allocatable yes
7 PE Size 4.00 MiB
8 Total PE 51199
9 Free PE 38395
10 Allocated PE 12804
11 PV UUID kRUOyU-0ib4-ujPh-kAJP-eeQv-ztRL-4EkaDQ
12
13 --- Physical Segments ---
14 Physical extent 0 to 0:
15 Logical volume /dev/LVMVolGroup/db_rmeta_0
16 Logical extents 0 to 0
17 Physical extent 1 to 5120:
18 Logical volume /dev/LVMVolGroup/db_rimage_0
19 Logical extents 0 to 5119
20
21 . . .
当试图确定哪个数据被保存在哪个物理磁盘上进行管理时,这可能是非常有用的。
显示关于 Volume 组的信息
LVM 还拥有大量的工具来显示关于体积组的信息。
vgscan
命令可以用来扫描系统的可用卷组. 它也可以在需要时重新构建缓存文件. 这是当您将卷组导入到新系统时使用的一个很好的命令:
1sudo vgscan
1[secondary_label Output]
2 Reading all physical volumes. This may take a while...
3 Found volume group "LVMVolGroup" using metadata type lvm2
这个命令不会输出太多的信息,但它应该能够找到系统上的每一个可用的卷组。
与其物理体积对象一样,vgs
命令具有多功能性,可在各种格式中显示大量信息.由于其输出可以被操纵,因此通常在需要脚本或自动化时使用。
1sudo vgs -o +devices,lv_path
1[secondary_label Output]
2 VG #PV #LV #SN Attr VSize VFree Devices Path
3 LVMVolGroup 2 4 0 wz--n- 299.99g 10.00g /dev/sda(0) /dev/LVMVolGroup/projects
4 LVMVolGroup 2 4 0 wz--n- 299.99g 10.00g /dev/sda(2560) /dev/LVMVolGroup/www
5 LVMVolGroup 2 4 0 wz--n- 299.99g 10.00g /dev/sda(3840) /dev/LVMVolGroup/db
6 LVMVolGroup 2 4 0 wz--n- 299.99g 10.00g /dev/sda(8960) /dev/LVMVolGroup/workspace
7 LVMVolGroup 2 4 0 wz--n- 299.99g 10.00g /dev/sdb(0) /dev/LVMVolGroup/workspace
同样,对于更简洁的可人读的输出,请使用vgdisplay
命令. 添加-v
标志提供了构建的物理卷组和使用卷组创建的逻辑卷的信息:
1sudo vgdisplay -v
1[secondary_label Output]
2 Using volume group(s) on command line.
3 --- Volume group ---
4 VG Name LVMVolGroup
5 . . .
6
7 --- Logical volume ---
8 LV Path /dev/LVMVolGroup/projects
9 . . .
10
11 --- Logical volume ---
12 LV Path /dev/LVMVolGroup/www
13 . . .
14
15 --- Logical volume ---
16 LV Path /dev/LVMVolGroup/db
17 . . .
18
19 --- Logical volume ---
20 LV Path /dev/LVMVolGroup/workspace
21 . . .
22
23 --- Physical volumes ---
24 PV Name /dev/sda
25 . . .
26
27 PV Name /dev/sdb
28 . . .
vgdisplay
命令是有用的,因为它可以将有关LVM堆栈的许多不同元素的信息联系起来。
显示关于逻辑卷的信息
要显示有关逻辑卷的信息,LVM 具有相关的工具集。
与其他 LVM 组件一样,lvscan 选项会扫描系统并输出最少的逻辑量信息:
1sudo lvscan
1[secondary_label Output]
2 ACTIVE '/dev/LVMVolGroup/projects' [10.00 GiB] inherit
3 ACTIVE '/dev/LVMVolGroup/www' [5.00 GiB] inherit
4 ACTIVE '/dev/LVMVolGroup/db' [20.00 GiB] inherit
5 ACTIVE '/dev/LVMVolGroup/workspace' [254.99 GiB] inherit
对于更完整的信息,lvs命令灵活而强大,可用于脚本:
1sudo lvs
1[secondary_label Output]
2 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
3 db LVMVolGroup -wi-ao---- 20.00g
4 projects LVMVolGroup -wi-ao---- 10.00g
5 workspace LVMVolGroup -wi-ao---- 254.99g
6 www LVMVolGroup -wi-ao---- 5.00g
要查找条纹的数量和逻辑卷类型,请使用 -- 细分
选项:
1sudo lvs --segments
1[secondary_label Output]
2 LV VG Attr #Str Type SSize
3 db LVMVolGroup rwi-a-r--- 2 raid1 20.00g
4 mirrored_vol LVMVolGroup rwi-a-r--- 3 raid1 10.00g
5 test LVMVolGroup rwi-a-r--- 3 raid5 10.00g
6 test2 LVMVolGroup -wi-a----- 2 striped 10.00g
7 test3 LVMVolGroup rwi-a-r--- 2 raid1 10.00g
最容易人读的输出是由lvdisplay
命令产生的。
当添加m
旗时,该工具还会显示有关逻辑卷如何分解和分布的信息:
1sudo lvdisplay -m
1[secondary_label Output]
2 --- Logical volume ---
3 LV Path /dev/LVMVolGroup/projects
4 LV Name projects
5 VG Name LVMVolGroup
6 LV UUID IN4GZm-ePJU-zAAn-DRO3-1f2w-qSN8-ahisNK
7 LV Write Access read/write
8 LV Creation host, time lvmtest, 2016-09-09 21:00:03 +0000
9 LV Status available
10 # open 1
11 LV Size 10.00 GiB
12 Current LE 2560
13 Segments 1
14 Allocation inherit
15 Read ahead sectors auto
16 - currently set to 256
17 Block device 252:0
18
19 --- Segments ---
20 Logical extents 0 to 2559:
21 Type linear
22 Physical volume /dev/sda
23 Physical extents 0 to 2559
24
25 . . .
在本示例中,/dev/LVMVolGroup/projects
的逻辑卷完全包含在/dev/sda
的物理卷中。
步骤 2 - 创建或扩展 LVM 组件
本节讨论如何创建和扩展物理卷、卷组和逻辑卷。
从原始存储设备创建物理量
若要使用 LVM 存储设备,它们必须首先标记为物理体积,这说明 LVM 可以在体积组内使用该设备。
首先,使用lvmdiskscan
命令来查找LVM可以访问和使用的所有区块设备:
1sudo lvmdiskscan
1[secondary_label Output]
2 /dev/sda [ 200.00 GiB]
3 /dev/sdb [ 100.00 GiB]
4 2 disks
5 2 partitions
6 0 LVM physical volume whole disks
7 0 LVM physical volumes
在这里,注意适用于转换为LVM的物理体积的设备。
<$>[警告] 警告:请确保您双重检查您打算与 LVM 一起使用的设备没有任何重要的数据已经写给它们。
若要将存储设备标记为 LVM 物理量,请使用pvcreate
。
1sudo pvcreate /dev/sda /dev/sdb
此命令在所有目标设备上写一个LVM标题,将其标记为LVM物理卷。
从物理卷创建一个新的卷组
要从 LVM 物理卷中创建一个新的卷组,请使用vgcreate
命令,您必须提供一个卷组名称,然后是至少一个 LVM 物理卷:
1sudo vgcreate volume_group_name /dev/sda
此示例创建您的卷组以一个单一的初始物理卷. 如果您想要,您可以在创建时传输多个物理卷:
1sudo vgcreate volume_group_name /dev/sda /dev/sdb /dev/sdc
通常,每个服务器只需要一个卷组. 所有 LVM 管理的存储可以添加到该池,然后可以从那里分配逻辑卷。
您可能希望有一个以上的卷组的一个原因是,如果您认为您需要为不同的卷使用不同的范围大小,您通常不需要设置范围大小(4M的默认大小适用于大多数用途),但如果需要,您可以通过通过s
选项来创建卷组:
1suod vgcreate -s 8M volume_group_name /dev/sda
这将创建一个新的卷组,范围大小为8M。
将物理体积添加到现有体积组
若要通过添加额外的物理体积来扩展一个体积组,请使用vgextend
命令. 此命令需要一个体积组,然后是要添加的物理体积。
1sudo vgextend volume_group_name /dev/sdb
物理体积将添加到体积组中,扩大存储池的可用容量。
通过指定尺寸创建一个逻辑量
若要从卷组存储池中创建一个逻辑卷,请使用lvcreate
命令. 使用-L
选项指定逻辑卷的大小,然后用-n
选项指定一个名称,然后通过卷组分配空间。
例如,要从LVMVolGroup
卷组创建一个名为测试
的10G逻辑卷,请写下:
1sudo lvcreate -L 10G -n test LVMVolGroup
如果卷组有足够的自由空间来容纳卷容量,则将创建新的逻辑卷。
从剩余的空间中创建一个逻辑卷
如果您希望使用卷组内剩余的自由空间创建卷组,请使用vgcreate
命令与n
选项来命名和传输卷组,就像上一步一样。
1sudo lvcreate -l 100%FREE -n test2 LVMVolGroup
这应该利用逻辑卷中剩余的空间。
使用高级选项创建逻辑卷
可以使用一些高级选项创建逻辑卷,您可能需要考虑的几个选项是:
- " 类型 " : 这指定了逻辑音量的类型,决定逻辑音量如何分配. 如果没有足够的基本物理体积来正确创建所选地貌,一些可用的类型将无法提供. 最常见的类型有:
-"线": 默认类型 。 所使用的基本物理装置,如果不止一个,将相接而来。 (
) -
被剥离': 与RAID 0类似,被条纹的地貌将数据分成块并以圆旋相通的方式分布在基础物理体积上. 这可导致业绩的改善,但可能导致数据更加脆弱。 这需要 " i " 选项和至少两个物理卷。 (_) )-'raid1':创建有镜像的RAID 1卷. 默认情况下,镜会有两个拷贝,但更多的可以由"-m"来指定. 这至少需要两个物理卷。 (_) )-"raid5":创建RAID5卷. 这至少需要三个物理卷。 (_) )-"raid6":创建RAID6卷. 这至少需要4个物理卷。 (_) ( )*
-m': 指定要保存的额外数据副本的数量。 值为"1"的可指定额外保留一份副本,共计两套数据. () ( )*-i':指定应保留条纹的数目。 这对
被扭曲类型是必需的, 可以修改 RAID 某些其他选项的默认行为 。 ( _) ( )*
-s': 指定动作应当从现有的逻辑卷创建快照,而不是新建独立的逻辑卷. () (英语)
要演示,首先要创建一个条形体积. 您必须为此方法指定至少两个条形体积. 这种拓扑和条形数要求至少有两个可用容量的物理体积:
1sudo lvcreate --type striped -i 2 -L 10G -n striped_vol LVMVolGroup
要创建一个镜像卷,请使用raid1
类型。 如果您想要两个以上的数据集,请使用-m
选项。本示例使用-m2
来创建总共三个数据集。
1sudo lvcreate --type raid1 -m 2 -L 20G -n mirrored_vol LVMVolGroup
要创建一个卷的快照,您必须为快照提供原始的逻辑音量,而不是卷组。快照起初不会占用大量空间,但随着对它正在跟踪的逻辑音量进行更改而增加大小。
1sudo lvcreate -s -L 10G -n snap_test LVMVolGroup/test
<$>[注]
注: 若要将逻辑卷返回即时点,请使用 lvconvert --merge
命令:
1sudo lvconvert --merge LVMVolGroup/snap_test
这将使快照的起源回到拍摄时的状态 <$>
有许多选项可以大大改变你的逻辑卷功能的方式。
增加一个逻辑量的大小
LVM的主要优点之一是它在提供逻辑卷时提供的灵活性,您可以在不停止系统的情况下调整卷的数量或大小。
若要增加现有逻辑卷的大小,请使用lvresize
命令。 使用-L
旗来指定新的大小。 您也可以通过添加+
大小来使用相对大小。 在这种情况下,LVM 会将逻辑卷的大小增加到所指定的数量。
要正确提供要扩展的逻辑体积的名称,您需要给出体积组,然后是分数,然后是逻辑体积:
1sudo lvresize -L +5G --resizefs LVMVolGroup/test
在本示例中,LVMVolGroup卷组上的测试
逻辑卷的逻辑卷和文件系统都将由5G增加。
如果您想手动处理文件系统扩展,请删除--resizefs
选项,然后使用文件系统的本地扩展实用程序。
1sudo lvresize -L +5G LVMVolGroup/test
2sudo resize2fs /dev/LVMVolGroup/test
它会返回相同的结果。
步骤 3 - 删除或降级 LVM 组件
由于容量减少可能会导致数据丢失,因此减少可用容量或减少组件大小或删除组件的程序通常更为涉及。
缩小一个逻辑量的大小
要缩小一个逻辑量,你应该先备份你的数据,因为这会减少可用的容量,错误可能会导致数据丢失。
当您准备好时,请检查当前使用的空间:
1df -h
1[secondary_label Output]
2Filesystem Size Used Avail Use% Mounted on
3. . .
4/dev/mapper/LVMVolGroup-test 4.8G 521M 4.1G 12% /mnt/test
在本示例中,目前使用的空间大小略超过 521M. 使用此方法来帮助您估计可以减少音量的大小。
与扩展不同,在卸载时应执行文件系统缩小,首先,请确保您在根目录中:
1cd ~
接下來,解除檔案系統:
1sudo umount /dev/LVMVolGroup/test
拆卸后,检查文件系统,确保一切都正常工作。 通过t
选项输入文件系统类型。 使用f
检查文件系统出现时:
1sudo fsck -t ext4 -f /dev/LVMVolGroup/test
檢查檔案系統後,您可以使用檔案系統的原始工具來減少檔案系統大小. 對於 Ext4 檔案系統來說,這將是「resize2fs」命令. 請輸入檔案系統的最終大小:
<$>[警告] 警告:这里最安全的选择是选择一个最终的大小,相当于你的当前使用量。
1sudo resize2fs -p /dev/LVMVolGroup/test 3G
一旦操作完成,通过将相同的大小转移到lvresize
命令中以-L
标志来调整逻辑体积:
1sudo lvresize -L 3G LVMVolGroup/test
您将被警告有关数据丢失的可能性. 如果您准备好了,请输入y
来继续。
减少逻辑音量后,再次检查文件系统:
1sudo fsck -t ext4 -f /dev/LVMVolGroup/test
如果一切正常运行,您可以使用通常的安装命令远程调用文件系统:
1sudo mount /dev/LVMVolGroup/test /mnt/test
您的逻辑体积现在应该减少到适当的大小。
删除一个逻辑量
如果您不再需要一个逻辑卷,您可以使用删除
命令删除它。
首先,卸载逻辑体积,如果它目前已安装:
1cd ~
2sudo umount /dev/LVMVolGroup/test
然后,通过输入这个命令删除逻辑卷:
1sudo lvremove LVMVolGroup/test
如果您确定要删除逻辑卷,请按y
。
删除一个卷组
要删除整个卷组,包括其中的所有逻辑卷,请使用vgremove
命令。
在删除卷组之前,您应使用前面讨论的程序删除逻辑卷,至少要确保删除卷组中包含的任何逻辑卷:
1sudo umount /dev/LVMVolGroup/www
2sudo umount /dev/LVMVolGroup/projects
3sudo umount /dev/LVMVolGroup/db
之后,您可以通过将卷组名称传递到vgremove
命令来删除整个卷组:
1sudo vgremove LVMVolGroup
然后,您将被要求确认您想要删除卷组. 如果您仍然存在任何逻辑卷,您将获得在删除之前的单独确认提示。
删除物理量
若要从 LVM 管理中删除物理量,所需的程序取决于 LVM 目前是否正在使用该设备。
如果使用物理体积,则必须将设备上的物理体积移动到不同的位置,这需要体积组有足够的其他物理体积来处理物理体积。
当您在体积组中有足够的物理体积来处理物理体积时,请通过运行将它们移除您想要删除的物理体积:
1sudo pvmove /dev/sda
这个过程可能需要时间,这取决于卷的大小和要传输的数据量。
一旦扩展被迁移到同行卷,您可以从卷组中删除物理卷:
1sudo vgreduce LVMVolGroup /dev/sda
这将从音量组中删除空的物理体积,完成后,您可以从存储设备中删除物理体积标记:
1sudo pvremove /dev/sda
您现在可以将删除的存储设备用于其他目的,或者完全从系统中删除。
结论
您现在了解如何在Ubuntu 18.04上使用LVM管理存储设备,您还知道如何获取有关现有LVM组件的状态的信息,如何使用LVM来构建您的存储系统,以及如何修改卷以满足您的需求。