如果发现文件系统的容量不足了,可以通过 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 : 扩展文件系统的容量的更多相关文章

  1. LVM : 缩减文件系统的容量

    有扩展就有缩减,我们在前文<LVM : 扩展文件系统的容量>中介绍了通过 LVM 扩展文件系统的方法,本文我们接着前文的 demo 介绍通过 LVM 缩减文件系统的方法.说明:本文的演示环 ...

  2. LVM扩展学习日志

    lvm是逻辑卷管理的简称,它将一个或多个物理硬盘分区(PV)组成一个逻辑硬盘(VG)来使用,  然后从这个VG中划分出逻辑分区(LV), 以上概念是我理解的东西,可能和书上的不一样. 以下所有命令都是 ...

  3. Ubuntu 15.04 无损扩展分区(目录)容量的方法 (无需格式化, 文件不丢失)

    源 起 用了一段时间Ubuntu,碰到了UBuntu磁盘空间不足的问题, 最初我只给Ubuntu分配了30个G的空间, 昨天试用了一下VirtualBox安装了一个xp虚拟系统,用以解决Ubuntu下 ...

  4. linux 扩展文件系统

    1. 创建新分区 [root@localhost ~]# fdisk -l Disk /dev/sda: bytes, sectors Units = sectors of * = bytes Sec ...

  5. Linux系统使用lvm扩展根分区

    Linux系统使用lvm扩展根分区 背景:买的云主机虚拟机封装镜像是40G的系统盘,后期适用不规范或者其他需求需要扩展系统盘,而非挂载在一个盘至新建目录. 1.原本目录磁盘等信息: 2.使用vgdis ...

  6. .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”

    FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...

  7. AIX扩展文件系统的大小

    由于AIX系统空间不够需要增加硬盘,希望增加文件系统的空间,折腾了好几天怎么都不能扩展文件系统的空间,原来是把硬盘加错了卷组 首先,确定文件系统所在的LV /dev/datalv      270.0 ...

  8. aix 扩展文件系统

    今天发现公司的oracle测试 数据库不能启动,检查警告日志日志,提示归档空间不足,不能归档,于是扩展文件系统: 1.检查rootvg卷组的剩余空间[p2704u]:[/dsg/oracle11]$ ...

  9. Linux LVM 扩展磁盘分区

    系统:centos 6.3--新建分区 fdisk -l /dev/sdc       # 查看分区 fdisk /dev/sdc          # 创建分区 :n                 ...

随机推荐

  1. 安装SQL 2005 出现警告 ,32位ASP.NET已经注册,需要注册64位

    将64位.net注册到iis上 cscript C:\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 ...

  2. sklearn中各种分类器回归器都适用于什么样的数据呢?

    作者:匿名用户链接:https://www.zhihu.com/question/52992079/answer/156294774来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  3. Django电商项目---完成注册页面和用户登录day1

    完成基本的创建项目.用户注册.登录.注销功能 创建Django项目,创建df_user的App 创建静态文件夹static(跟manage.py保持在同一级别下) 复制静态文件(css + image ...

  4. Python3编写网络爬虫07-基本解析库pyquery的使用

    三.pyquery 简介:同样是一个强大的网页解析工具 它提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便 安装: pip install pyquery 验证: im ...

  5. Opaque data type--不透明类型

    Opaque:对使用者来说,类型结构和机制明晰即为transparent,否则为Opaque In computer science, an opaque data type is a data ty ...

  6. [笔记]一些STL用法

    参考资料:STL 在 OI 中的应用 离散化 std::unique 功能:对有序的容器重新排列,将第一次出现的元素从前往后排,其他重复出现的元素依次排在后面 返回值:返回迭代器,迭代器指向的是重复元 ...

  7. day14 Python百分号字符串拼接

    拼接 # -*- coding:utf8 -*- #%s字符串,%d数字msg = '%s am %s my %s is %s'% (2,"charon","pluto& ...

  8. nodejs中引用其他js文件中的函数

    基本语句 require('js文件路径'); 使用方法 举个例子,在同一个目录下,有app.fun1.fun2三个js文件. 1. app.js var fun1 = require('./fun1 ...

  9. Qt Creator中如何选择某个子项目为启动项目

    Qt Creator中的子目录项目类似于Visual Studio中的Solution(解决方案),可以用来管理多个子项目.但是在Qt Creator IDE中由不能像Visual Studio中那样 ...

  10. nightwatch-前端自动化测试工具安装

    最近再弄这个前端自动化测试工具,刚开始弄了几天,目前为止遇到很多坑,光是安装就费了不少时间,记录一下,以便自己忘记. 这里是它的官网,目前没找到中文版的官网,全英文,对我这个英语渣来说有点难理解. 一 ...