如何使用 LVM 管理滴滴云 EBS
日期: 2018-12-20 分类: 个人收藏 329次阅读
LVM 介绍
LVM ( Logical Volume Management ) 是一种存储设备管理技术,使用户能够汇集和抽象存储设备组件的物理布局,从而实现对物理磁盘简单灵活的管理。利用 Linux Device Mapper 内核框架,LVM2 可用于将现有存储设备组合到一起,并根据需要从组合空间分配逻辑单元。
本文将介绍如何用 LVM 管理存储设备。接下来将展示如何显示逻辑卷的相关信息,如何创建和销毁各种类型的卷,以及如何通过调整大小或转换来修改现有卷。我们将使用 Centos 7.x 来演示这些操作。
环境准备
创建一个滴滴云 DC2,操作系统为 Centos 7.x,并挂载两块规格一样的数据盘,本列中采用两块大小为 200G 的 SSD 云盘,所使用的用户为具有 sudo 权限的 dc2-user。
安装 LVM:
# sudo yum install -y lvm2
创建或扩展 LVM 组件
本节将讨论如何创建和扩展物理卷、卷组和逻辑卷。
从原始存储设备创建物理卷
为了通过 LVM 管理存储设备,首先必须将存储设备标记为物理卷 ( PV, Physical Volume ) 。这样 LVM 才可以在卷组 ( VG, Volume Group ) 内使用该设备,卷组相当于是由物理卷构成的存储池。
首先,使用 lvmdiskscan
命令查找 LVM 可以看到并使用的所有块设备:
# sudo lvmdiskscan
/dev/vda1 [ <80.00 GiB]
/dev/vdb [ 200.00 GiB]
/dev/vdc [ 200.00 GiB]
2 disks
1 partition
0 LVM physical volume whole disks
0 LVM physical volumes
这里我们可以看到适合于 LVM 的物理卷的设备。从中挑选出没有数据的设备,比如 /dev/vdb
和 /dev/vdc
用来创建 LVM。
警告:请确保再次检查你打算与 LVM 一起使用的设备是否没有任何重要数据已经写入它们。在 LVM 中使用这些设备将覆盖当前内容。如果 DC2 服务器上已有重要数据,则在进行备份。
要将存储设备标记为 LVM 物理卷,可以使用命令 pvcreate
。你可以同时通过多个设备:
# sudo pvcreate /dev/vdb /dev/vdc
Physical volume "/dev/vdb" successfully created.
Physical volume "/dev/vdc" successfully created.
该命令会在所有目标设备上写入 LVM 头,以标记它们为 LVM 物理卷。
查看物理卷:
# sudo pvs
PV VG Fmt Attr PSize PFree
/dev/vdb lvm2 --- 200.00g 200.00g
/dev/vdc lvm2 --- 200.00g 200.00g
pvdisplay
命令可以输出更详细的信息:
# sudo pvdisplay
"/dev/vdb" is a new physical volume of "200.00 GiB"
--- NEW Physical volume ---
PV Name /dev/vdb
VG Name
PV Size 200.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID nLawjk-N7h0-O5Tm-mna6-yl2r-8SvO-h3AFYl
"/dev/vdc" is a new physical volume of "200.00 GiB"
--- NEW Physical volume ---
PV Name /dev/vdc
VG Name
PV Size 200.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID VphTcQ-9nEG-OQcO-fK2c-wlq0-cbdW-Pk8I0J
从物理卷创建新卷组
若要从 LVM 物理卷创建新卷组,请使用 vgcreate
命令。必须提供一个卷组名称,然后至少有一个 LVM 物理卷:
# sudo vgcreate volume_group_name /dev/vdb
Volume group "volume_group_name" successfully created
本例中,创建了具有单个初始物理卷的卷组。如果愿意,你可以在创建中传递多个物理卷:
# sudo vgcreate volume_group_name /dev/vdb /dev/sdc /dev/sdd
查看卷组信息:
# sudo vgdisplay
--- Volume group ---
VG Name volume_group_name
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <200.00 GiB
PE Size 4.00 MiB
Total PE 51199
Alloc PE / Size 0 / 0
Free PE / Size 51199 / <200.00 GiB
VG UUID HWqr4P-ESmE-NXLJ-8tnx-ZycC-TqKD-XtQwFN
通常,每个服务器只需要一个卷组。可以将所有 LVM 管理的存储添加到该池中,然后可以从该池中分配逻辑卷。
你可能希望拥有一个以上的卷组的原因之一是,如果你觉得需要对不同卷使用不同的区段大小。通常,你不必设置区段大小(默认大小 4M 对于大多数使用来说足够),但是如果需要,可以在创建卷组时通过 -s 选项进行设置:
# sudo vgcreate -s 8M volume_group_name /dev/vda
这将创建一个具有段大小为 8M 的新卷组。
向现有卷组添加物理卷
若要通过添加额外的物理卷扩展卷组,请使用 vgextend
命令。这个命令需要一个卷组名,后面跟着要添加的物理卷。如果愿意的话,你可以同时输入多个物理卷:
# sudo vgextend volume_group_name /dev/vdc
Volume group "volume_group_name" successfully extended
物理卷将被添加到卷组中,从而扩展存储池的可用容量。
通过指定大小创建逻辑卷
若要从卷组存储池创建逻辑卷,请使用 lvcreate
命令。使用-L选项指定逻辑卷的大小,使用 -n 选项指定名称,并传入卷组名称以从中分配空间。
例如,从 volume_group_name
卷组创建一个名为 test 且大小为 10G 逻辑卷类型:
# sudo lvcreate -L 10G -n test volume_group_name
Logical volume "test" created.
如果卷组有足够的空闲空间来容纳卷容量,则会成功创建出新的逻辑卷。
查看逻辑卷的信息,用命令 lvs
或 lvdisplay
:
# sudo lvdisplay
--- Logical volume ---
LV Path /dev/volume_group_name/test
LV Name test
VG Name volume_group_name
LV UUID lqmzfA-HsdB-h2mJ-X585-gOku-4rdx-HajSQR
LV Write Access read/write
LV Creation host, time 10-254-252-85, 2018-12-10 21:17:55 +0800
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 252:0
从所有剩余空闲空间创建逻辑卷
如果希望使用卷组中剩余的空闲空间创建卷,使用 vgcreate
命令,像之前一样通过 -n 选项指定名称,并传入卷组名称,不要传递大小,而是使用选项 '-l 100%FREE'
,该选项使用卷组中的剩余段 ( extents ) 来创建逻辑卷:
# sudo lvcreate -l 100%FREE -n test2 volume_group_name
这将会使用逻辑卷中所有剩余的空间。
用高级选项创建逻辑卷
逻辑卷也可以用一些高级选项创建。你可能希望考虑的一些选项是:
- –Type:指定逻辑卷的类型,该类型确定如何分配逻辑卷。如果没有足够的底层物理卷来正确创建所选类型,那么一些类型将不可用。一些最常见的类型是:
- Linear:默认类型。所使用的底层物理设备(如果不止一个)将简单地彼此附加,做线性扩张。
- Striped:与 RAID0 类似,striped 结构将数据划分成块,并以循环方式遍布底层物理卷。这可以提高性能,但没有数据冗余。这需要下面描述的“-i ”选项和至少两个物理卷。
- RARID1:创建镜像 RAID1 卷。默认情况下,镜像将具有两个副本,但是可以通过下面描述的 -m 选项指定更多副本。需要至少两个物理卷。
- RAID5:创建 RAID5 卷。最少需要三个物理卷。RAID5:创建 RAID5 卷。最少需要三个物理卷。
- RAID6:创建 RAID6 卷。最少需要四个物理卷。RAID6:创建 RAID6 卷。最少需要四个物理卷。
- -m:指定要保存的数据的其他副本的数量。“1”指定了一个附加副本,用于总共两组数据。
- -i:指定条带数量。这对于条带类型是必需的,并且可以修改其他一些 RAID 选项的默认行为。
- -s:指定操作应该从现有逻辑卷而不是新的独立逻辑卷创建快照。
我们将提供这些选项的几个示例来演示它们通常如何使用。
要创建条带卷,必须指定至少两个条带。这种结构和条带计数需要至少两个具有可用容量的物理卷:
# sudo lvcreate --type striped -i 2 -L 10G -n striped_vol volume_group_name
若要创建镜像卷,请使用 RAID1 类型。如果你想要 2 个副本以上的数据,请使用 -m 选项。这个示例使用 -m 2 来创建总共三个副本的数据(LVM 将其计数为一个带有两个镜像的原始数据集)。需要至少三个物理卷才能成功:
# sudo lvcreate --type raid1 -m 2 -L 20G -n mirrored_vol volume_group_name
增加逻辑卷的大小
LVM 的主要优点之一是它在提供逻辑卷时的灵活性,在不停止系统的情况下,可以轻松地调整卷的数量或大小。
若要增加现有逻辑卷的大小,请使用 lvresize
命令。使用 -L 标志来指定新的大小。还可以通过添加“+”大小来使用相对大小。在这种情况下,LVM将按指定的数量增加逻辑卷的大小。要自动调整逻辑卷上使用的文件系统的大小,请传入 --resizefs
标志。
要正确地提供要展开的逻辑卷的名称,需要给出卷组,然后是斜杠,然后是逻辑卷:
# sudo lvresize -L +5G --resizefs volume_group_name/test
在这个示例中, volume_group_name
卷组上的 test 逻辑卷和 test 逻辑卷上的文件系统都将增加 5G。
如果希望手动处理文件系统扩展,可以去掉 --resizefs
选项,然后使用文件系统的本地扩展实用程序。例如,对于 Ext4 文件系统,可以键入:
# sudo lvresize -L +5G volume_group_name/test
# sudo resize2fs /dev/volume_group_name/test
这也能达到同样的目的.
删除或缩小 LVM 组件
由于减少容量可能导致数据丢失,因此通过减小组件大小或移除组件来缩小可用容量的过程通常要复杂一些。
减少逻辑卷的大小###
要缩小逻辑卷,首先应该备份数据。因为这减少了可用容量,如果出错可能导致数据丢失。
准备好后,检查当前使用的空间有多少:
# sudo df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/mapper/volume_group_name-test 10G 3.9G 6.2G 39% /mnt
在这个例子中,它看起来像一个超过 3.9G 的空间目前正在使用中。使用此方法可以帮助你估计可以缩小卷的大小。
接下来,卸载文件系统。与扩展不同,文件系统收缩应在卸载时执行:
# cd ~
# sudo umount /dev/volume_group_name/test
卸载后,检查文件系统以确保一切正常工作。用 -t 选项传递文件系统类型。我们将使用 -f 来检查文件系统是否正常:
# sudo fsck -t ext4 -f /dev/volume_group_name/test
检查文件系统之后,可以使用文件系统的本地工具减小文件系统的大小。xfs文件系统不支持缩容,对于 Ext4 文件系统,可以用命令 resize2fs
缩容,传递文件系统的最终大小:
警告:这里最安全的选择是选择一个比当前使用量大得多的最终尺寸。给自己一些缓冲空间,避免数据丢失,确保备份到位。
# sudo resize2fs -p /dev/volume_group_name/test 8G
一旦操作完成,通过选项 -L
向 lvresize
命令传递相同的大小来调整逻辑卷的大小:
# sudo lvresize -L 8G volume_group_name/test
你会被警告数据丢失的可能性。如果准备就绪,请键入 y 继续进行。
在逻辑卷已被还原之后,再次检查文件系统:
# sudo fsck -t ext4 -f /dev/volume_group_name/test
如果一切正常,可以使用通常的挂载命令重新挂载文件系统:
# sudo mount /dev/volume_group_name/test /mnt
现在你的逻辑卷应该缩小到合适的大小。
删除逻辑卷
如果不再需要逻辑卷,可以用 lvremove
命令删除它。
首先,如果当前 mount 了逻辑卷,则 umount 掉:
# cd ~
# sudo umount /dev/volume_group_name/test
之后,通过一下命令删除逻辑卷:
# sudo lvremove volume_group_name/test
你将被程序要求确认,如果确定要删除逻辑卷,请键入 y。
移除卷组
要删除整个卷组,包括其中的所有逻辑卷,请使用 vgremove
命令。
在删除卷组之前,通常应该使用上述过程删除逻辑卷。至少,必须确保卸载卷组包含的任何逻辑卷:
# sudo umount /dev/volume_group_name/test
# sudo umount /dev/volume_group_name/www
# sudo umount /dev/volume_group_name/projects
# sudo umount /dev/volume_group_name/db
然后,通过将卷组名称传递给 vgremove
命令,可以删除整个卷组:
sudo vgremove volume_group_name
将提示你确认是否希望删除卷组。如果你仍然存在任何逻辑卷,那么在删除之前,你将收到这些卷的单独确认提示。
移除物理卷
如果希望从 LVM 中删除物理卷,则所需的过程取决于 LVM 当前是否正在使用对应的设备。
如果正在使用物理卷,则必须将位于设备上的物理区段移动到不同的位置。这要求卷组具有足够的其他物理卷来处理物理区段。如果使用更复杂的逻辑卷类型,则可能需要额外的物理卷,即使你有足够的空闲空间来适应它的结构。
当卷组中有足够的物理卷来处理物理区段时,通过输入:
# sudo pvmove /dev/vdb
这个过程可能需要一段时间,这取决于卷的大小和要传输的数据量。
一旦扩物理段被拷贝到其他卷,就可以输入以下命令删除物理卷:
sudo vgreduce volume_group_name /dev/sdb
这将从卷组中移除空的物理卷。完成之后,你可以通过输入一下命令从存储设备中删除物理卷标记:
sudo pvremove /dev/sdb
你现在应该能够将删除的存储设备用于其他目的,或者将其完全从系统中删除。
结束
现在,你应该已经了解了如何使用 LVM 管理 Centos7.x 上的存储设备。你知道如何获得关于现有 LVM 组件的状态的信息、如何使用 LVM 组成存储系统,以及如何修改卷以满足你的需求。你可以在安全的环境中测试这些概念,以便更好地理解它们是如何组合在一起的。
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
精华推荐