LVM : 简介
在对磁盘分区的大小进行规划时,往往不能确定这个分区要使用的空间的大小。而使用 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 : 简介的更多相关文章
- LVM简介
3. 创建VG.. 7 4. 创建LV.. 9 5.LV格式化及挂载... 10 一.LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauel ...
- LVM简介及CentOS7 LVM操作实战
LVM简介LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和 分区之上的一个逻辑层,来提高磁盘分区管理的灵活 ...
- Linux系统中lvm简介
LVM逻辑卷管理器 实战场景:对于生产环境下的服务器来说,如果存储数据的分区磁盘空间不够了怎么办? 答:只能换一个更大的磁盘.如果用了一段时间后,空间又不够了,怎么办?再加一块更大的?换磁盘的过程中, ...
- 001.LVM简介
一 概念 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现.LVM将一个或多个硬盘的分区在逻辑上集合,相 ...
- Linux LVM硬盘管理及LVM扩容
LVM磁盘管理 一.LVM简介... 1 二. LVM基本术语... 2 三. 安装LVM... 3 四. 创建和管理LVM... 4 2. 创建PV.. 6 3. 创建VG.. 7 4. 创建LV. ...
- Linux学习心得之 LVM管理与Linux系统安装
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 LVM管理与Linux系统安装 1.前言 2.LVM 简介与术语 3.LVM 使用 4.Li ...
- LVM逻辑卷管理
一.LVM简介 LVM(Logic Volume Manager)逻辑卷管理,简单理解就是将一块或多块硬盘的分区在逻辑上集合,当一块大硬盘来使用. 其特点是: 1.可以实现在线动态扩展,也可以缩减 2 ...
- LVM磁盘管理
http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html Linux LVM硬盘管理及LVM扩容 LVM磁盘管理 一.LVM简介... ...
- LVM管理及扩容(转)
LVM磁盘管理 一、LVM简介... 1 二、 LVM基本术语... 2 三、 安装LVM... 3 四、 创建和管理LVM... 4 2、 创建PV.. 6 3、 创建VG.. 7 4、 创建LV. ...
随机推荐
- 纯CSS选项卡
html: <!doctype html> <html> <head> <meta charset="utf-8"> <tit ...
- [HDFS_4] HDFS 的 Java 应用开发
0. 说明 在 IDEA下 进行 HDFS 的 Java 应用开发 通过编写代码实现对 HDFS 的增删改查操作 1. 流程 1.1 在项目下新建 Moudle 略 1.2 为 Moudle 添加 M ...
- 无需软件windows如何加密文件夹
在百部百科上看到,放在博客中以便查看. 1.首先打开记事本,当然如果你的电脑里装有类似notepad++的文本编辑软件的也可以,但是不能用word.用这类软件好处是代码高亮,看上去舒服,减少错误率. ...
- Win10恢复账户默认半透明头像
WIN10账户默认的头像的都是半透明,但年少不更事就换了头像,接着看到别人的头像是半透明的,就开始后悔了,然后就去问度娘.结果大多数如下 对于一个有着强迫症患者的人来说,每次看到锁屏界面时的不透明账号 ...
- C#用默认浏览器打开特定网址的几种方法
方法一:从注册表中读取默认浏览器可执行文件路径 private void button1_Click(object sender, EventArgs e) { //从注册表中读取默认浏览器可执行文件 ...
- python五十四课——datetime模块
3.datetime模块:理解:datetime可以认为是time模块的补充/扩展datetime模块中有一些常用类:datetime类:记录了日期和时间数据信息date类:记录了日期数据信息time ...
- Linux基础第四课——文件操作
文件的创建 touch sudo touch 文件1 文件2 文件3 #支持批量创建文件 sudo rm -f 文件1 文件2 文件3 #支持批量创建 也支持批量删除 echo '谁动谁输,对不起我输 ...
- 不可不知 DDoS的攻击原理与防御方法
DoS攻击.DDoS攻击和DRDoS攻击相信大家已经早有耳闻了吧!DoS是Denial of Service的简写就是拒绝服务,而DDoS就是Distributed Denial of Service ...
- ucml设置列表分页类型
aginationCtype 分页栏显示效果配置,取值为UCML.Pagination或UCML.PaginationMin,默认为UCML.PaginationMin,在视图显示前设置. 1.pag ...
- ubuntu16.04node和npm卸载干净
如下命令便可以实现该目的: #apt-get 卸载 sudo apt-get remove --purge npm sudo apt-get remove --purge nodejs sudo ap ...