LVM : 扩展文件系统的容量
如果发现文件系统的容量不足了,可以通过 LVM 轻松的进行扩展(当然也可以进行缩减操作)。本文将紧接前文中的 demo 详细的介绍扩展文件系统的操作过程。说明:本文的演示环境为 ubuntu 16.04。
警报:可用磁盘空间不足
当我们收到可用磁盘空间不足的警报时,就需要去诊断磁盘空间相关的问题了。一般的结果是:增加磁盘容量(简单有效,清理掉一些看似没用的文件是件风险极大的事情)!
df 命令可以帮助我们查看文件系统的容量:

上图中的 LV nicklv00 的总容量为 15G,此时可用容量已经不足 1G了,我们接下来扩展这个 LV。
查看当前系统中磁盘的概况
在动手扩展文件系统的容量前,我们需要先搞清楚当前系统中磁盘的基本情况。lsblk 命令可以帮助我们查看系统上的所有块设备列表(下面命令中笔者通过 -e 选项排除了 loop 设备和光驱):
$ lsblk -e ,

我们比较关注挂载点 /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

然后检查下 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 的快照。
参考:
在Linux中扩展/缩减LVM(第二部分)
vgextend man page
resize2fs man page
LVM : 扩展文件系统的容量的更多相关文章
- LVM : 缩减文件系统的容量
有扩展就有缩减,我们在前文<LVM : 扩展文件系统的容量>中介绍了通过 LVM 扩展文件系统的方法,本文我们接着前文的 demo 介绍通过 LVM 缩减文件系统的方法.说明:本文的演示环 ...
- LVM扩展学习日志
lvm是逻辑卷管理的简称,它将一个或多个物理硬盘分区(PV)组成一个逻辑硬盘(VG)来使用, 然后从这个VG中划分出逻辑分区(LV), 以上概念是我理解的东西,可能和书上的不一样. 以下所有命令都是 ...
- Ubuntu 15.04 无损扩展分区(目录)容量的方法 (无需格式化, 文件不丢失)
源 起 用了一段时间Ubuntu,碰到了UBuntu磁盘空间不足的问题, 最初我只给Ubuntu分配了30个G的空间, 昨天试用了一下VirtualBox安装了一个xp虚拟系统,用以解决Ubuntu下 ...
- linux 扩展文件系统
1. 创建新分区 [root@localhost ~]# fdisk -l Disk /dev/sda: bytes, sectors Units = sectors of * = bytes Sec ...
- Linux系统使用lvm扩展根分区
Linux系统使用lvm扩展根分区 背景:买的云主机虚拟机封装镜像是40G的系统盘,后期适用不规范或者其他需求需要扩展系统盘,而非挂载在一个盘至新建目录. 1.原本目录磁盘等信息: 2.使用vgdis ...
- .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”
FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...
- AIX扩展文件系统的大小
由于AIX系统空间不够需要增加硬盘,希望增加文件系统的空间,折腾了好几天怎么都不能扩展文件系统的空间,原来是把硬盘加错了卷组 首先,确定文件系统所在的LV /dev/datalv 270.0 ...
- aix 扩展文件系统
今天发现公司的oracle测试 数据库不能启动,检查警告日志日志,提示归档空间不足,不能归档,于是扩展文件系统: 1.检查rootvg卷组的剩余空间[p2704u]:[/dsg/oracle11]$ ...
- Linux LVM 扩展磁盘分区
系统:centos 6.3--新建分区 fdisk -l /dev/sdc # 查看分区 fdisk /dev/sdc # 创建分区 :n ...
随机推荐
- [20171120]11g select for update skip locked.txt
[20171120]11g select for update skip locked.txt --//11G在select for update遇到阻塞时可以通过skipped locked跳过阻塞 ...
- vs2012\2013\2015 添加 ActiveX制作控件插件 Visual Studio Installer
由于vs2012.2013 之后的版本升级,之前用vs2010 开发制作的ActvieX控件在高版本12.13上不兼容,需要安装插件支持: 如果是vs2013版本,可参照以下方式下载后安装,若是其他版 ...
- input子系统事件处理层(evdev)的环形缓冲区【转】
在事件处理层(evdev.c)中结构体evdev_client定义了一个环形缓冲区(circular buffer),其原理是用数组的方式实现了一个先进先出的循环队列(circular queue), ...
- https证书概念
https://studygolang.com/articles/10776 http://www.360doc.com/content/15/0520/10/21412_471902987.shtm ...
- 【PAT】B1081 检查密码(15 分)
水题 #include<cstdio> #include<string.h> #include<ctype.h> #include<algorithm> ...
- Resct配置less
配置less 安装less-loader yarn add less-loader 打开 webpack.config.dev.js 和 webpack.config.prod.js 找到 test ...
- 软工实践第二次作业-sudoku
说明 Github项目地址 作业题目 解题思路 一开始拿到的时候,有一个思路,可以先填写全盘的"1",然后在插空填满全盘的"2".后来觉得自己理不清那个思路.遂 ...
- 【软件工程1916|W(福州大学)_助教博客】团队答辩助教问题记录
周一进行了团队项目的课堂答辩,结合团队项目报告对团队项目提出了1-2个问题,将问题和团队回答巨鹿如下 那周余嘉熊掌将得队 如何用户保证隐私安全?答:后期考虑,团队中有一个专业是信息安全的,会针对这块提 ...
- 回文数的golang实现
判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数 输入: 输出: true 输入: - 输出: false 解释: 从左向右读, 为 - . 从右向左读, 为 - ...
- [Tomcat]The JRE_HOME environment variable is not defined correctly
在tomcat的bin目录下,双击startup.bat,闪一下,就没了,后来仔细看了一下黑屏闪的内容如下: the JRE_HOME environment variable is not defi ...