在对磁盘分区的大小进行规划时,往往不能确定这个分区要使用的空间的大小。而使用 fdisk、gdisk 等工具对磁盘分区后,每个分区的大小就固定了。如果分区设置的过大,就白白浪费了磁盘空间;如果分区设置的过小,就会导致空间不够用的情况出现。对于分区过小的问题,可以从新划分磁盘的分区,或者通过软连接的方式将此分区的目录链接到另外一个分区。这样虽然能够临时解决问题,但是给管理带来了麻烦。类似的问题可以通过 LVM 来解决。
说明:本文的演示环境为 ubuntu 16.04。

LVM 是什么

LVM 是 Logical Volume Manager 的缩写,中文一般翻译为 "逻辑卷管理",它是 Linux 下对磁盘分区进行管理的一种机制。LVM 是建立在磁盘分区和文件系统之间的一个逻辑层,系统管理员可以利用 LVM 在不重新对磁盘分区的情况下动态的调整分区的大小。如果系统新增了一块硬盘,通过 LVM 就可以将新增的硬盘空间直接扩展到原来的磁盘分区上。

LVM 的优点如下:

  • 文件系统可以跨多个磁盘,因此大小不再受物理磁盘的限制。
  • 可以在系统运行状态下动态地扩展文件系统大小。
  • 可以以镜像的方式冗余重要数据到多个物理磁盘上。
  • 可以很方便地导出整个卷组,并导入到另外一台机器上。

LVM 也有一些缺点:

  • 在从卷组中移除一个磁盘的时候必须使用 reducevg 命令(这个命令要求root权限,并且不允许在快照卷组中使用)。
  • 当卷组中的一个磁盘损坏时,整个卷组都会受影响。
  • 因为增加了一个逻辑层,存储的性能会受影响。

LVM 的优点对服务器的管理非常有用,但对于桌面系统的帮助则没有那么显著,所以需要我们根据使用的场景来决定是否应用 LVM。

LVM 中的基本概念

通过 LVM 技术,可以屏蔽掉磁盘分区的底层差异,在逻辑上给文件系统提供了一个卷的概念,然后在这些卷上建立相应的文件系统。下面是 LVM 中主要涉及的一些概念。
物理存储设备(Physical Media):指系统的存储设备文件,比如 /dev/sda、/dev/sdb 等。
PV(物理卷 Physical Volume):指硬盘分区或者从逻辑上看起来和硬盘分区类似的设备(比如 RAID 设备)。
VG(卷组 Volume Group):类似于非 LVM 系统中的物理硬盘,一个 LVM 卷组由一个或者多个 PV(物理卷)组成。
LV(逻辑卷 Logical Volume):类似于非 LVM 系统上的磁盘分区,LV 建立在 VG 上,可以在 LV 上建立文件系统。
PE(Physical Extent):PV(物理卷)中可以分配的最小存储单元称为 PE,PE 的大小是可以指定的。
LE(Logical Extent):LV(逻辑卷)中可以分配的最小存储单元称为 LE,在同一个卷组中,LE 的大小和 PE 的大小是一样的,并且一一对应。
可以这么理解,LVM 是把硬盘的分区分成了更小的单位(PE),再用这些单元拼成更大的看上去像分区的东西(PV),进而用 PV 拼成看上去像硬盘的东西(VG),最后在这个新的硬盘上创建分区(LV)。文件系统则建立在 LV 之上,这样就在物理硬盘和文件系统中间添加了一层抽象(LVM)。下图大致描述了这些概念之间的关系:

对上图中的结构做个简单的介绍:
两块物理硬盘 A 和 B 组成了 LVM 的底层结构,这两块硬盘的大小、型号可以不同。PV 可以看做是硬盘上的分区,因此可以说物理硬盘 A 划分了两个分区,物理硬盘 B 划分了三个分区。然后将前三个 PV 组成一个卷组 VG1,后两个 PV 组成一个卷组 VG2。接着在卷组 VG1 上划分了两个逻辑卷 LV1 和 LV2,在卷组 VG2 上划分了一个逻辑卷 LV3。最后,在逻辑卷 LV1、LV2 和 LV3 上创建文件系统,分别挂载在 /usr、/home 和 /var 目录。

LVM 工具

在安装 ubuntu16.04 时,如果选择使用 LVM 创建分区,就会安装 LVM 相关的工具。当前这个软件包的名称为 lvm2,其中包含了大量 LVM 工具(笔者会在随后的文章中介绍其中一些工具的用法)。比如单是查看 LVM 相关实体状态的命令就有如下一些:

$ sudo pvscan
$ sudo pvs
$ sudo pvdisplay $ sudo vgscan
$ sudo vgs
$ sudo vgdisplay $ sudo lvscan
$ sudo lvs
$ sudo lvdisplay

如果安装系统时没有默认安装 LVM 工具包,可以通过下面的命令安装它们:

$ sudo apt update
$ sudo apt install lvm2

接下来我们通过例子来演示如何使用 LVM 来一步步的创建出逻辑卷(LV),然后在 LV 上创建文件系统并挂载到 Linux 系统中。

使用 gdisk 对物理磁盘进行分区

目前常见的磁盘分区格式有两种,MBR 分区和 GPT 分区:
MBR 分区,MBR 的意思是 "主引导记录"。MBR 最大支持 2TB 容量,在容量方面存在着极大的瓶颈。
GPT 分区,GPT 意为 GUID 分区表,它支持的磁盘容量比 MBR 大得多。这是一个正逐渐取代 MBR 的新标准,它是由 UEFI 辅住而形成的,将来 UEFI 用于取代老旧的 BIOS,而 GPT 则取代老旧的 MBR。
笔者在《Linux 磁盘与磁盘分区》一文中介绍了使用 fdisk 工具创建 MBR 磁盘分区的方式,gdisk 是 Linux 系统中 GPT 格式的磁盘分区管理工具。这里我们仅介绍如何使用 gdisk 创建新的磁盘分区。假设我们的 Linux 系统中增加了一块新的磁盘,系统对应的设备名为 /dev/sdd,下面我们通过 gdisk 命令对这个磁盘进行分区。

在用 gdisk 命令对磁盘分区前,我们先用 parted 命令查看 /dev/sdd 当前的分区情况:

$ sudo parted /dev/sdd print

结果显示这是一块尚未创建分区表的磁盘(Model 显示该磁盘是通过 VMware 创建的虚拟磁盘)。下面通过 gdisk 命令创建分区:

$ sudo gdisk /dev/sdd

通过 p 命令可以查看磁盘当前的状态:

输出中的前几行是磁盘的基本信息,比如总大小为 20G,一共有多少个扇区(sector),每个扇区的大小,当前剩余的空间等等。然后是已经存在的分区信息(上图显示还没有任何分区):
第一列 Number 显示了分区的编号,比如 1 号指 /dev/sdd1。
第二列 Start 表示磁盘分区的起始位置。
第三列 End 表示磁盘分区的结束位置。
第四列 Size 显示分区的容量。
第五列 Code 和第六列 Name 显示分区类型的 ID和名称,比如 Linux filesystem 为 8300,Linux swap 为 8200,Linux LVM 为 8e00。
下面通过 n 命令来创建新分区:

分区编号和开始/结束的扇区都直接通过回车选择默认值,这样所有的磁盘空间都划分到了一个分区中,然后输入 8e00 说明我们要创建的分区类型为 Linux LVM。最后输入 w 命令并确认执行分区操作。分区成功后可通过 p 命令查看我们创建的分区的信息:

此时可以看到新产生的设备文件 /dev/sdd1:

创建物理卷 PV

现在我们可以基于磁盘分区 /dev/sdd1 来创建 LVM 物理卷(LV),可以通过 pvcreate 命令来完成:

$ sudo pvcreate /dev/sdd1

此时 /dev/sdd1 已经完成了从磁盘分区到 PV 的华丽转身!注意上面的命令,磁盘分区被直接转换成了 PV,连名称都没有变化!我们可以通过 pvs 命令查看 /dev/sdd1,目前它还没有被加入到 VG 中:

创建卷组 VG

基于一个或多个 PV,可以创建 VG。我们使用刚才创建的 PV /dev/sdd1 来创建一个名称为 nickvg 的 VG:

$ sudo vgcreate -s 32M nickvg /dev/sdd1

注意 vgcreate 命令中的 -s 选项,它指定了 PE(Physical Extent) 的大小。可以通 vgs 命令观察 VG 的信息:

$ sudo vgs nickvg

如果目标 VG 已经存在,则使用 vgextend 把 PV 加入到 VG 中即可。

创建逻辑卷 LV

有了 VG 就可以创建逻辑卷 LV 了,lvcreate 命令用来创建 LV,让我们在前面创建的 nickvg 上创建名称为 nicklv00 的 LV:

$ sudo lvcreate -L 15G -n nicklv00 nickvg

选项 -L 指定新建 LV 的容量,这里是 15G;选项 -n 则指定新建 LV 的名称,这里为 nicklv00。可以通过 lvs 命令观察 LV 的信息,注意需要同时指出 LV 所在的 VG:

格式化逻辑卷(创建文件系统)

当我们创建 LV nickvg/nicklv00 时,其实是创建了名称为 /dev/nickvg/nicklv00 的设备文件:

现在我们来格式化这个逻辑卷(在该 LV 上创建文件系统),目标为比较常见的 ext4 格式:

$ sudo mkfs.ext4 /dev/nickvg/nicklv00

然后创建个目录,比如 /home/doc,并把新建的文件系统挂载到这个目录上:

$ sudo mkdir /home/doc
$ sudo mount /dev/nickvg/nicklv00 /home/doc

最后可以通过 df 命令查看这个文件系统的使用情况:

开机自动挂载

编辑 /etc/fstab 文件:

$ sudo vim /etc/fstab

把下面的行添加的文件末尾并保存文件:

/dev/mapper/nickvg-nicklv00 /home/doc       ext4    defaults              

总结

本文介绍了 LVM 的基本概念,并从头开始以 LVM 的方式创建了一个文件系统。笔者故意忽略了很多的细节和 LVM 的强大功能,目的是让这个入门的 demo 看起来更简单一些。在后续的文章中笔者会介绍更多详细的内容以展示 LVM 的丰富功能。

参考:
LVM (简体中文)
LVM 的工作原理和优缺点
在Linux中使用LVM构建灵活的磁盘存储

LVM : 简介的更多相关文章

  1. LVM简介

    3. 创建VG.. 7 4. 创建LV.. 9 5.LV格式化及挂载... 10 一.LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauel ...

  2. LVM简介及CentOS7 LVM操作实战

    LVM简介LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和 分区之上的一个逻辑层,来提高磁盘分区管理的灵活 ...

  3. Linux系统中lvm简介

    LVM逻辑卷管理器 实战场景:对于生产环境下的服务器来说,如果存储数据的分区磁盘空间不够了怎么办? 答:只能换一个更大的磁盘.如果用了一段时间后,空间又不够了,怎么办?再加一块更大的?换磁盘的过程中, ...

  4. 001.LVM简介

    一 概念 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现.LVM将一个或多个硬盘的分区在逻辑上集合,相 ...

  5. Linux LVM硬盘管理及LVM扩容

    LVM磁盘管理 一.LVM简介... 1 二. LVM基本术语... 2 三. 安装LVM... 3 四. 创建和管理LVM... 4 2. 创建PV.. 6 3. 创建VG.. 7 4. 创建LV. ...

  6. Linux学习心得之 LVM管理与Linux系统安装

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 LVM管理与Linux系统安装 1.前言 2.LVM 简介与术语 3.LVM 使用 4.Li ...

  7. LVM逻辑卷管理

    一.LVM简介 LVM(Logic Volume Manager)逻辑卷管理,简单理解就是将一块或多块硬盘的分区在逻辑上集合,当一块大硬盘来使用. 其特点是: 1.可以实现在线动态扩展,也可以缩减 2 ...

  8. LVM磁盘管理

    http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html Linux LVM硬盘管理及LVM扩容 LVM磁盘管理 一.LVM简介... ...

  9. LVM管理及扩容(转)

    LVM磁盘管理 一、LVM简介... 1 二、 LVM基本术语... 2 三、 安装LVM... 3 四、 创建和管理LVM... 4 2、 创建PV.. 6 3、 创建VG.. 7 4、 创建LV. ...

随机推荐

  1. Web的攻击技术笔记

    HTTP不具备必要的安全功能,就是一个通用的单纯协议机制,比如远程登录时会用到的SSH协议来说,SSH具备协议级别的认证及回话管理等功能,HTTP协议则没有.另外在架设SSH服务方面,任何人都可以轻易 ...

  2. 安装.Net Framework 4.6.2时出现“无法建立到信任根颁发机构的证书链”解决方法

    在安装Microsoft .NET Framework 4.6.2脱机包时提示 无法建立到信任根颁发机构的证书链 实际上是要安装一个根证书.解决方案如下(因无法贴链接,可百度搜索“mamicode.c ...

  3. windows7下的一个好玩的,你绝对不知道

    今天学到了一个好东西,分享一下, windows7系统测试是可以的,其他系统暂时没测试,分享给大家玩玩: 在桌面新建一个文件夹: 文件夹重命名为:GodMode.{ED7BA470-8E54-465E ...

  4. Hbase-2.0.0_01_安装部署

    该文章是基于 Hadoop2.7.6_01_部署 进行的 1. 主机规划 主机名称 IP信息 内网IP 操作系统 安装软件 备注:运行程序 mini01 10.0.0.11 172.16.1.11 C ...

  5. SAP UI 搜索分页技术

    搜索分页技术往往和另一个术语Lazy Loading(懒加载)联系起来.今天由Jerry首先介绍S/4HANA,CRM Fiori和S4CRM应用里的UI搜索分页的实现原理.后半部分由SAP成都研究院 ...

  6. oracle中nvarchar2字符集不匹配

    oracle当多表union时遇到nvarchar2类型时报错 字符集不匹配对使用nvarchar的地方,加上 to_char( nvarchar 的变量或字段 ) 如:select to_char( ...

  7. wfi彩灯

    1 单纯控制颜色 接线 Arduino Uno         共阳三色雾状LED灯 Pin 9          <---------->      红 Pin 10        &l ...

  8. JS进阶之---this的指向

    this到底指向什么地方,决定于函数的调用方式. 1. 指向全局变量 --- 函数被单独调用的时候 function fn() { console.log( this.a ); } var a = 2 ...

  9. 你不得不知道的 .NET CORE —— .NET Framework, .NET Core 和 .NET Standard 的区别

    .NET Framework 和 .NET Core 是平台应用框架,而 .NET Standard 是 .NET 底层库.因此只要用 .NET Standard 工程来写的代码可以直接在上层的平台应 ...

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

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