lvm管理的相关操作方法
Posted chendian0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lvm管理的相关操作方法相关的知识,希望对你有一定的参考价值。
如果发现文件系统的容量不足了,可以通过 LVM 轻松的进行扩展(当然也可以进行缩减操作)。本文将紧接前文中的 demo 详细的介绍扩展文件系统的操作过程。说明:本文的演示环境为 ubuntu 16.04。
警报:可用磁盘空间不足
当我们收到可用磁盘空间不足的警报时,就需要去诊断磁盘空间相关的问题了。一般的结果是:增加磁盘容量(简单有效,清理掉一些看似没用的文件是件风险极大的事情)!
df 命令可以帮助我们查看文件系统的容量:
上图中的 LV nicklv00 的总容量为 15G,此时可用容量已经不足 1G了,我们接下来扩展这个 LV。
查看当前系统中磁盘的概况
在动手扩展文件系统的容量前,我们需要先搞清楚当前系统中磁盘的基本情况。lsblk 命令可以帮助我们查看系统上的所有块设备列表(下面命令中笔者通过 -e 选项排除了 loop 设备和光驱):
$ lsblk -e 7,11
我们比较关注挂载点 /home/doc 对应的文件系统的情况:它的磁盘类型为 LVM,对应的 LV 名称为 nicklv00,LV 在名称为 nickvg 的 VG 中。其中磁盘的整个容量为 20G,而 LV 的容量只有 15G。我们先用 lvdisplay 命令来观察下 LV 的详细信息:
$ sudo lvdisplay nickvg/nicklv00
这里比较重要的两点是 LV 的容量为 15G,它所属的 VG 名称为 nickvg。接下来用 vgdisplay 命令查看名称为 nickvg 的 VG 的详细信息:
$ sudo vgdisplay nickvg
上图显示 VG 的容量为 19.97G,已经分配了 15G,还有 4.97G 是空闲的。如果我们的要求不高,可以直接把 VG 中空闲的 4.97G 分配给 LV nicklv00,但是我们希望给 nicklv00 多分些空间,比如 50G。所以我们需要继续查看 VG 的底层构成。
通过 pvs 可以查看 pv 与 vg 的组成关系:
$ sudo pvs
VG nickvg 是由 PV /dev/sdd1 构成的,/dev/sdd1 的容量为 19.97G。要查看 PV 的详细信息,可以使用 pvdisplay 命令:
$ sudo pvdisplay /dev/sdd1
至此我们已经搞清楚了系统当前的存储系统(忽略了我们不太关心的磁盘),总结一下:硬盘设备 /dev/sdd 的容量为 20G,其上创建了一个 20G 的硬盘分区 /dev/sdd1,硬盘分区 /dev/sdd1 被创建为 LVM 的物理卷(PV,PV 的名称依然是 /dev/sdd1),大小仍然为 20G。在物理卷 /dev/sdd1 上创建了容量为 20G 的卷组(VG) nickvg,在 nickvg 中有一个 15G大小的逻辑卷(LV) nickvg/nicklv00。文件系统就建立在 LV 上,挂载点为 /home/doc。
扩展方案
我们打算为 /home/doc 下挂载的文件系统增加 50G 的容量,因此仅仅利用 VG 中剩余的 4.97G 空间时不够的。简单起见,我们直接新增一块容量为 50G 的硬盘(此处为虚拟磁盘),通过 LVM 添加到 VG 中,然后扩展 LV,并最终完成扩展文件系统的任务。
添加磁盘并创建物理卷(PV)
在虚拟机中添加虚拟磁盘并非难事,这里不再细说,笔者添加的磁盘设备文件为 /dev/sde:
接下来请参照前文《LVM : 简介》中的介绍创建磁盘分区,并用磁盘分区创建 LVM 物理卷(PV)。
笔者创建的磁盘分区为 /dev/sde1:
创建的物理卷如下所示:
扩展卷组(VG)
接下来我们需要通过 vgextend 命令扩展卷组。vgextend 命令可以把一个或多个物理卷(LV)加入到 VG 中:
$ sudo vgextend nickvg /dev/sde1
检查 VG nickvg 的详细信息:
此时 VG 的容量已经变成了 69.94G,可用的容量有 54.94G,扩展 VG 成功了!再看看 VG 与 PV 的关系:
VG nickvg 由 /dev/sdd1 和 /dev/sde1 两个 PV 组成,当前总的可用空间为 4.97G + 49.97G。
扩展逻辑卷(LV)
LVM 最主要的功能就是能动态地调整分区的大小,其实也就是修改逻辑(LV)的容量。修改 LV 容量的命令有 lvextend(扩展逻辑卷)和 lvreduce(缩减逻辑卷),这两个命令的用法差不多,这里我们只介绍 lvextend 命令。lvextend 命令的格式如下:
lvextend [-L (+size) -l (+PE 数)] 逻辑卷名称
-L 选项表示为 LV 增加指定 size 的容量。
-l 选项表示为 LV 增加指定数目的 PE。
我们通过下面的命令来扩展 LV:
$ sudo lvextend -L 65G nickvg/nicklv00 或者:$ sudo lvextend -L 65G /dev/nickvg/nicklv00
或者:$ lvextend -l +100%FREE /dev/VolGroup/lv_root 将剩余空间全部分配给 /dev/VolGroup/lv_root
然后检查下 LV 的详细信息:
nickvg/nicklv00 逻辑卷的大小已经变成了 65G。再看看 PV 的信息:
哈哈,居然不是直接用光 /dev/sde1 上的空间,而是先用光 /dev/sdd1 上的空间,然后从 /dev/sde1 上分配剩余的空间。
缩减逻辑卷的方式和扩展逻辑卷的方式差不多,只不过使用的是 lvreduce 命令。
扩展文件系统
resize2fs 命令用来扩展或收缩文件系统的容量,但是这个命令只支持 ext2、ext3、ext4 格式的文件系统。笔者的文件系统为 ext4,所以可以使用 resize2fs 命令进行扩展。这个命令还有一个特点,如果是扩展文件系统的容量,那么不管目标文件系统是否处于挂载状态都可以执行。如果是缩减文件系统的容量,则只能先卸载文件系统,缩减容量后再重新挂载文件系统。下面的命令把文件系统的容量扩展至 LV 的总容量:
$ sudo resize2fs /dev/nickvg/nicklv00
再去查看下文件系统的信息:
目标文件系统已经显示被扩展到了 64G(各种开销),至此我们完成了文件系统的扩容任务。
总结
使用 LVM 管理磁盘让文件系统的扩展/缩减变得非常容易,特别是可以自由的组合硬件磁盘为更大的容量单位(VG),使系统维护者的工作变得轻松不少。除此之外,LVM 还支持快照等特色功能,笔者将在接下来的文章中介绍如何使用 LVM 的快照。
============================================================================================================================
============================================================================================================================
有扩展就有缩减,我们在前文《LVM : 扩展文件系统的容量》中介绍了通过 LVM 扩展文件系统的方法,本文我们接着前文的 demo 介绍通过 LVM 缩减文件系统的方法。说明:本文的演示环境为 ubuntu 16.04。
前文中我们把文件系统 /dev/mapper/nickvg-nicklv00 的容量从 15G 扩充到了 65G(显示为 64G):
接下来我们再把它重新缩减为 15G,并移除新添加的磁盘 /dev/sde。
卸载文件系统
与扩展文件系统的容量不同,如果是缩减文件系统的容量,需要卸载文件系统后再进行缩减操作。
如果没有卸载文件系统,会有上图中的提示。卸载文件系统本身非常简单,使用 umount 命令就可以搞定,我们要卸载的文件系统的挂载点为 /home/doc:
$ sudo umount /home/doc
使用 resize2fs 命令缩减文件系统
卸载完文件系统就可以使用 resize2fs 命令来缩减其容量了,我们的目标是把它缩回 15G:
$ sudo resize2fs /dev/nickvg/nicklv00 15G
提示先运行 e2fsck -f /dev/nickvg/nicklv00 命令。e2fsck 命令用于检查 ext2/ext3/ext4 文件系统的完整性,通过适当的选项可以尝试修复出现的错误。e2fsck 执行后的传回值及代表意义如下:
- 0 没有任何错误发生。
- 1 文件系统发生错误,并且已经修正。
- 2 文件系统发生错误,并且已经修正。
- 4 文件系统发生错误,但没有修正。
- 8 运作时发生错误。
- 16 使用的语法发生错误。
- 128 共享的函数库发生错误。
$ sudo e2fsck -f /dev/nickvg/nicklv00
-f 选项表示即使文件系统没有错误迹象,仍强制检查正确性。上图中的 0 表示我们的文件系统没有被检测出错误,我们重新执行 resize2fs 命令,这次就可以成功执行了:
使用 lvreduce 命令缩减 LV
在缩减 LV 前先查看一下其基本信息:
$ sudo lvs nickvg/nicklv00
上图显示 LV nickvg/nicklv00 的容量为 65G,而我们缩减后的文件系统只有 15G,所以我们是可以缩减这个 LV 的,我们直接把它缩减到 15G:
$ sudo lvreduce -L 15G nickvg/nicklv00 或 $ sudo lvreduce -L 15G /dev/nickvg/nicklv00
查看下结果:
$ sudo lvdisplay nickvg/nicklv00
LV 的容量变成了 15G,Current LE 的数量为 480。
从 VG 中移除 PV
检查名称为 nickvg 的 VG 的信息:
$ sudo vgdisplay nickvg
结果显示 VG 的总容量为 69.94G,已经分配了 15G,还有 54.94G 空闲。接下来通过 pvs 命令来查看 PV 与 VG 的关系:
$ sudo pvs
名称为 nickvg 的 VG 由 /dev/sdd1 和 /dev/sde1 两个 PV 组成,其中 /dev/sde1 完全空闲,我们可以把这个 PV 从 VG 中移除掉。vgreduce 命令可以从 VG 中移除 PV:
$ sudo vgreduce nickvg /dev/sde1
从 VG 中移除 PV /dev/sde1 后再次查看 pv 的状态:
此时 /dev/sde1 已经不属于任何 VG。
移除 PV
所谓的移除 PV,就是使用 pvremove 命令移除 PV 设备上的标签,让 LVM 无法识别该设备是一个 PV。下面我们就来移除 PV /dev/sde1:
$ sudo pvremove /dev/sde1
在 pvremove 命令移除 /dev/sde1 后,pvs 命令输出的结果中就找不到名称为 /dev/sde1 的 PV 了。
删除磁盘分区并移除硬盘
查看设备文件:
$ ls /dev/sde*
其中的 /dev/sde1 就是磁盘分区的设备文件,让我们先用 gdisk 命令查看这个分区的信息:
$ sudo gdisk /dev/sde
然后再删除它:
再去查看 sde 开头的设备文件,发现 /dev/sde1 已经不见了:
最后关机移除硬盘就可以了。
如果没有设置开机自动挂载文件系统,还需要在开机后重新手动挂载文件系统 /dev/mapper/nickvg-nicklv00 到 /home/doc 目录。
总结
与扩展文件系统容量不同,在 Ubuntu 16.04 中使用 resize2fs 命令缩减文件系统的容量需要事先卸载文件系统。其实实际使用中缩减文件系统的时候并不多,大家往往宁愿牺牲一些存储空间也不愿看到折腾丢数据的情况。
==============================================================================================================================
==============================================================================================================================
挂载:(挂载新设备) fdisk -l (查看设备情况) pvcreate /dev/sdb (将该设备创建为一个pv单元) vgcreate app /dev/sdb -s 64M (创建一个名为app的vg;此处应当注意PE大小分配 eg:设置为64最大可分配4Tb,128最大分配8Tb) lvcreate -L +99G -n app1 app (创建一个名为app1的lv逻辑卷,从app vg中分配99G给它) mkdir /app (创建挂载点) echo /dev/mapper/app-app1 /app ext4 defaults 0 0 >> /etc/fstab(将逻辑卷挂载信息写入开机加载列表,开机自动识别 ) mkfs.ext4 /dev/mapper/app-app1 (将逻辑卷app1 格式化为ext4文件系统) mount -a (挂载检测) df -h (挂载点显示大小为逻辑卷app1的大小,挂载成功)
扩容:(物理硬盘容量增加后) pvresize /dev/sdb (重新识别pv的大小,完成之后pvs可以看到扩容后大小,随之对应的vg也同步扩大) lvextend -l +100%FREE /dev/mapper/app-app1 (将vg所有可用容量分配给该lv) resize2fs /dev/mapper/app-app1 (将新加入的blocks格式化) df -h (容量增加,扩容成功)
扩容swap: lvextend -L 2GB /dev/centos/swap (扩展swap lv的大小) sync (内存中缓冲数据写入硬盘) swapoff /dev/centos/swap (卸载swap) mkswap /dev/centos/swap (重新调整lv为swap格式) swapon /dev/centos/swap (重新挂载swap) free -g (查看swap大小已增加)
扩容lvm根分区(xfs文件系统) 1.虚拟机操作直接扩容/dev/sda 2.fdisk /dev/sda 新添加 /dev/sda3分区 (重启机器) 3.pvcreate /dev/sda3 创建pv 4.vgextend centos /dev/sda3 扩展vg 5.lvextend -l +100%FREE /dev/mapper/centos-root 扩展lv 6.xfs_growfs /dev/centos/root 格式化新加入的硬盘位xfs 7. df -h 成功
下面为一个简单的 测试
本人用虚拟机搭建 大数据开发环境,后来数据量上去了 发现磁盘不够用,折腾了一下新增磁盘的方法,一开始总是不对,后来知道了一个lvm的方法,很方便好用。特此记录下来 1查看目前磁盘分区情况,系统是安装在一块45G的虚拟磁盘上。安装系统时采用了LVM分区方式。其中/soft空间大小为11G 2 查看目前虚拟机的磁盘情况,目前虚拟机中有两块硬盘,/dev/sda 45G,/dev/sdb 55G 3 创建pv ,通过pvcreate命令将磁盘/dev/sdb创建为一个系统PV # pvcreate /dev/sdb 4、将 PV /dev/sdb添加到卷组vg_openstack中。参考下图中标记的数据可知,磁盘已经添加到vg_openstack,而且卷组的空间增加了50G # vgextend vg_openstack /dev/sdb 5、为/soft 添加30G的空间。图中标记的位置给出了/soft的大小,以及/soft的lv名称为 /dev/vg_openstack/LogVol04 # lvextend -L +30G -n /dev/vg_openstack/LogVol04 或者 # lvextend -l +100%FREE /dev/VolGroup/lv_root # 扩展整块硬盘空间 6、逻辑卷扩展后并不会马上生效,需要使用“resize2fs”命令重新加载逻辑卷的大小,图中可知,/soft已经添加30G空间 # resize2fs /dev/vg_openstack/LogVol04 参考操作 红色部分是重要步骤。可能需要根据环境变动 [[email protected] ~]# fdisk -l Disk /dev/sda: 107.4 GB, 107374182400 bytes 255 heads, 63 sectors/track, 13054 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0002a3e3 Device Boot Start End Blocks Id System /dev/sda1 * 1 64 512000 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 64 13055 104344576 8e Linux LVM Disk /dev/sdb: 161.1 GB, 161061273600 bytes 255 heads, 63 sectors/track, 19581 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/mapper/vg_master-lv_root: 53.7 GB, 53687091200 bytes 255 heads, 63 sectors/track, 6527 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/mapper/vg_master-lv_swap: 5200 MB, 5200936960 bytes 255 heads, 63 sectors/track, 632 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/mapper/vg_master-lv_home: 48.0 GB, 47957671936 bytes 255 heads, 63 sectors/track, 5830 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 [[email protected] ~]# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created [[email protected] ~]# vgex 或者 vgextend vgexport vgextend [[email protected] ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 vg_master lvm2 a-- 99.51g 0 /dev/sdb lvm2 a-- 150.00g 150.00g [[email protected] ~]# vgs VG #PV #LV #SN Attr VSize VFree vg_master 1 3 0 wz--n- 99.51g 0 [[email protected] ~]# vgextend vg_master /dev/sdb Volume group "vg_master" successfully extended [[email protected] ~]# vgs VG #PV #LV #SN Attr VSize VFree vg_master 2 3 0 wz--n- 249.50g 150.00g
[[email protected] ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_master-lv_root 50G 33G 14G 71% / tmpfs 5.9G 8.0K 5.9G 1% /dev/shm /dev/sda1 485M 39M 421M 9% /boot /dev/mapper/vg_master-lv_home 44G 561M 42G 2% /home cm_processes 5.9G 1.9M 5.9G 1% /var/run/cloudera-scm-agent/process
[[email protected] ~]# lvextend -l +100%FREE /dev/mapper/vg_master-lv_root Extending logical volume lv_root to 200.00 GiB Logical volume lv_root successfully resized
[[email protected] ~]# resize2fs /dev/mapper/vg_master-lv_root resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/vg_master-lv_root is mounted on /; on-line resizing required old desc_blocks = 4, new_desc_blocks = 13 Performing an on-line resize of /dev/mapper/vg_master-lv_root to 52427776 (4k) blocks. The filesystem on /dev/mapper/vg_master-lv_root is now 52427776 blocks long. [[email protected] ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_master-lv_root 197G 34G 154G 18% / tmpfs 5.9G 8.0K 5.9G 1% /dev/shm /dev/sda1 485M 39M 421M 9% /boot /dev/mapper/vg_master-lv_home 44G 561M 42G 2% /home cm_processes 5.9G 1.9M 5.9G 1% /var/run/cloudera-scm-agent/process [[email protected] ~]#
以上是关于lvm管理的相关操作方法的主要内容,如果未能解决你的问题,请参考以下文章