介绍
LVM,或逻辑卷管理,是一种存储设备管理技术,使用户能够集中电源和部件的存储设备,以方便和灵活的管理抽象的物理布局。 利用设备映射器Linux内核框架,当前迭代LVM2可以用于将现有存储设备聚集成组,并根据需要从组合空间中分配逻辑单元。
在本指南中,我们将介绍如何使用LVM管理存储设备。 我们将向您展示如何显示有关卷和潜在目标的信息,如何创建和销毁各种类型的卷以及如何通过调整大小或转换来修改现有卷。 我们将使用Ubuntu 16.04服务器来演示这些操作。
先决条件
为了跟上,你应该可以访问一个Ubuntu 16.04服务器。 你需要有一个非root用户sudo
配置管理任务的权限。 您可以按照我们的Ubuntu 16.04服务器初始设置向导来创建必要的帐户。
为了熟悉LVM组件和概念,并考出一个基本的LVM配置,请跟随我们的介绍LVM指导开始学习本教程之前。
当你准备好,请登录到您的服务器sudo
用户。
显示有关物理卷,卷组和逻辑卷的信息
能够轻松获取系统中各种LVM组件的信息非常重要。 幸运的是,LVM工具套件提供了大量的工具来显示LVM中每一层的信息。
显示有关所有LVM兼容块存储设备的信息
若要显示所有LVM可以潜在地管理可用的块存储设备,使用lvmdiskscan
命令:
sudo lvmdiskscan
Output /dev/ram0 [ 64.00 MiB]
/dev/sda [ 200.00 GiB]
/dev/ram1 [ 64.00 MiB]
. . .
/dev/ram15 [ 64.00 MiB]
/dev/sdb [ 100.00 GiB]
2 disks
17 partitions
0 LVM physical volume whole disks
0 LVM physical volumes
忽略/dev/ram*
设备(Linux的RAM磁盘实现的一部分),我们可以看到,有可能被用来作为LVM物理卷的设备。
这可能是添加新的存储设备以与LVM一起使用时的第一步。
显示有关物理卷的信息
将头写入存储设备以将其标记为可用作LVM组件。 这些头设备被称为物理卷 。
您可以通过使用显示所有系统上的物理设备lvmdiskscan
与-l
选项,它将只返回物理卷:
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/ram0 [ 64.00 MiB]
/dev/sda [ 200.00 GiB]
/dev/ram1 [ 64.00 MiB]
. . .
/dev/ram15 [ 64.00 MiB]
/dev/sdb [ 100.00 GiB]
2 disks
17 partitions
0 LVM physical volume whole disks
0 LVM physical volumes
在这里,忽略了/dev/ram*
设备,我们可以看到,是适用于物理卷被打开了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
选项,并通过在卷组中分配的空间。
例如,创建一个名为10G的逻辑卷test
从LVMVolGroup
卷组,请键入:
sudo lvcreate -L 10G -n test LVMVolGroup
如果卷组具有足够的可用空间来容纳卷容量,则将创建新的逻辑卷。
从所有剩余可用空间创建逻辑卷
如果你想创建一个使用卷组中剩余的可用空间的容积,使用vgcreate
命令和-n
选项名称和以前一样卷组中通过。 相反,传递一个大小,使用-l 100%FREE
的选择,它使用了卷组中剩余的区段形成逻辑卷:
sudo lvcreate -l 100%FREE -n test2 LVMVolGroup
这将占用逻辑卷中的剩余空间。
使用高级选项创建逻辑卷
也可以使用一些高级选项创建逻辑卷。 您可能希望考虑的一些选项是:
- --type:指定逻辑卷的类型,这决定了逻辑卷是如何分配的。 如果没有足够的基础物理卷来正确创建所选择的拓扑,则某些可用类型将不可用。 一些最常见的类型是:
- 线性 :默认类型。 所使用的基础物理设备(如果多于一个)将简单地彼此附加,一个接一个。
- 条纹 :类似于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
在这个例子中,逻辑卷和的文件系统test
对逻辑卷LVMVolGroup
卷组都将被由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
选项。 我们将使用-f
检查,即使文件系统似乎好:
sudo fsck -t ext4 -f /dev/LVMVolGroup/test
检查文件系统后,可以使用文件系统的本机工具减少文件系统大小。 对ext4的文件系统,这将是resize2fs
的命令。 传入文件系统的最终大小:
警告 :这里最安全的选择是选择一个最终的尺寸比目前的使用情况大了相当数量。 给自己一些缓冲空间,以避免数据丢失,并确保您有备份到位。
sudo resize2fs -p /dev/LVMVolGroup/test 3G
一旦操作完成后,通过将相同尺寸的调整逻辑卷lvresize
命令的-L
标志:
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 16.04上的存储设备有所了解。 您应该知道如何获取有关现有LVM组件的状态的信息,如何使用LVM构建存储系统以及如何修改卷以满足您的需要。 随意在安全的环境中测试这些概念,以便更好地了解它们如何组合在一起。