首先说一下在缩小逻辑卷的时候要注意的问题:第一步使用resize2fs命令更改文件系统的容量;第二步使用lvreduce命令减小逻辑卷的容量。这两个顺序千万不要搞反了,而且要保证缩减后的逻辑卷容量大于等于实际更改后的文件系统大小,否则你的逻辑卷就不能正常使用了

1 LVM体系结构

LVM(逻辑卷管理器),可以将几个物理分区(或磁盘)通过软件组合成为一个看起来独立的大磁盘,并且可以灵活的调整卷的大小。LVM是由VG(卷组)、PV(物理卷)、LV(逻辑卷)和PE(物理扩展块)组成。

1.1 物理存储介质(The Physical Media)

这里指系统的存储设备,如:/dev/sda、/dev/sdb等等,是存储系统最低层的存储单元。

1.2 物理卷(PV, Physical Volume)

物理卷就是指磁盘、磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有和LVM相关的管理参数。

1.3 卷组(VG, Volume Group)

LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。能在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。

1.4 逻辑卷(LV, Logical Volume)

LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上能建立文件系统(比如/home或/usr等)。

1.5 PE(physical extent)

每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是能被LVM寻址的最小单元。PE的大小是可设置的,默认为4MB。

1.6 LE(logical extent)

逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

下面是一个LVM的体系结构图



创建LV有两种方式,一种是基于磁盘的,另外一种是基于分区的,如果是基于分区的就必须先通过fdisk或parted方式划分好分区,但不要格式化来进行pvcreate创建处理卷;如果基于磁盘的就不需要创建分区了,直接就可以通过pvcreate来创建物理卷。因为只有创建好了物理卷之后才能添加到卷组,并在卷组里面创建逻辑卷,后格式化才能存放数据。

这里,我以基于磁盘的方式创建LV。

2 创建物理卷PV

假设我们的系统已经挂载了一块尚未使用的硬盘,通过fdisk -l命令可以看到系统中所有的硬盘

[root@node1 ~]# fdisk -l | grep sd
Disk /dev/sda: 21.5 GB, 21474836480 bytes
/dev/sda1 * 1 26 204800 83 Linux
/dev/sda2 26 2611 20765696 8e Linux LVM
Disk /dev/sdb: 1073 MB, 1073741824 bytes
Disk /dev/sdc: 1073 MB, 1073741824 bytes
[root@node1 ~]#

这里可以看到我的系统中有三块硬盘sda、sdb、sdc,其中sda已经被划分成2个分区。

现在我们来利用sdb、sdc这两块盘,创建两个PV

[root@node1 ~]# pvcreate /dev/sdb /dev/sdc
Physical volume "/dev/sdb" successfully created
Physical volume "/dev/sdc" successfully created
[root@node1 ~]#
[root@node1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_node1 lvm2 a-- 19.80g 3.14g
/dev/sdb vgtest lvm2 a-- 1020.00m 1020.00m
/dev/sdc lvm2 a-- 1.00g 1.00g
[root@node1 ~]# pvscan
PV /dev/sdb VG vgtest lvm2 [1020.00 MiB / 1020.00 MiB free]
PV /dev/sda2 VG vg_node1 lvm2 [19.80 GiB / 3.14 GiB free]
PV /dev/sdc lvm2 [1.00 GiB]
Total: 3 [21.79 GiB] / in use: 2 [20.79 GiB] / in no VG: 1 [1.00 GiB]
[root@node1 ~]#

如上所示,使用pvcreate命令创建PV,然后使用pvspvscan可以查看系统中已有的PV。

到这里,物理卷就创建完成了,接下来我们用这两个PV来创建一个卷组。

3 创建卷组VG

我们先用其中一个PV来创建VG

[root@node1 ~]# vgcreate vgtest /dev/sdb
Volume group "vgtest" successfully created
[root@node1 ~]#
[root@node1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg_node1 1 3 0 wz--n- 19.80g 3.14g
vgtest 1 0 0 wz--n- 1020.00m 1020.00m
[root@node1 ~]# vgscan
Reading all physical volumes. This may take a while...
Found volume group "vgtest" using metadata type lvm2
Found volume group "vg_node1" using metadata type lvm2
[root@node1 ~]#

这里,我们 vgcreate命令创建了一个名叫vgtest的卷组,然后使用vgsvgscan可以查看已创建的vg。

现在我们已经成功创建了一个卷组,接下来就可以根据需要来创建逻辑卷LV了

4 创建逻辑卷LV

[root@node1 ~]# lvcreate -L 1000M -n lvtest vgtest
Logical volume "lvtest" created
[root@node1 ~]#

这里我们使用lvcreate命令创建了一个名叫lvtest的逻辑卷,大小为1000M

简单介绍一下lvcreate命令的参数

-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节

-l:指定逻辑卷的大小(LE数)

-n: 指定逻辑卷的名字

逻辑卷创建后,还需要进行格式化操作,否则不能使用,使用mkfs命令来进行格式化,如下所示,我们把这个逻辑卷格式化为ext4文件系统

[root@node1 ~]# mkfs.ext4 /dev/mapper/vgtest-lvtest
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65280 inodes, 261120 blocks
13056 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8160 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376 正在写入inode表: 完成
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@node1 ~]#

到此为止,逻辑卷建立完成,你可以把它挂载到一个空闲目录下(注意:如果挂载的非空闲目录下,原来目录中的内容会被隐藏,不是覆盖哦,但你取消挂载后,被隐藏的内容就会再次出现

[root@node1 ~]# mkdir /test/
[root@node1 ~]# mount /dev/mapper/vgtest-lvtest /test
[root@node1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_node1-lvroot 9.7G 3.4G 5.8G 37% /
tmpfs 491M 72K 491M 1% /dev/shm
/dev/sda1 194M 30M 155M 16% /boot
/dev/mapper/vg_node1-lvhome 4.9G 153M 4.5G 4% /home
/dev/mapper/vgtest-lvtest 1000M 18M 936M 2% /test
[root@node1 ~]#

5 逻辑卷LV扩容

假如你的逻辑卷容量不够了,需要扩容,有两种情况:一是你的VG中还有剩余空间,那么可以直接使用VG中剩余的空间进行扩容;二是你的VG中没有空间或者是空间不足了,那你需要先扩容VG,在扩容LV。。第二种只是比第一种情况多了一步扩容VG的操作,所以这里我们以第二种情况为例进行介绍。

这里我们使用刚才未使用的另一块PV来扩容我们的卷组vgtest。

[root@node1 ~]# vgextend vgtest /dev/sdc
Volume group "vgtest" successfully extended
[root@node1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg_node1 1 3 0 wz--n- 19.80g 3.14g
vgtest 2 1 0 wz--n- 1.99g 1020.00m
[root@node1 ~]#

使用vgextend命令扩容卷组,这里可以看到我们vgtest容量已经增加了一倍,接下来开始扩容逻辑卷

[root@node1 ~]# lvextend -L +500M /dev/mapper/vgtest-lvtest
Extending logical volume lvtest to 1.48 GiB
Logical volume lvtest successfully resized
[root@node1 ~]# df -h /test
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vgtest-lvtest 1004M 18M 936M 2% /test
[root@node1 ~]#

如上所示,我们使用lvextend命令将lvtest扩容到1.48G,但是为什么用df -h /test命令看到的lvtest空间并没有改变的,这里还需要一步操作才能使lvtest的空间改变生效

[root@node1 ~]# resize2fs /dev/mapper/vgtest-lvtest
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/vgtest-lvtest is mounted on /test; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/mapper/vgtest-lvtest to 389120 (4k) blocks.
The filesystem on /dev/mapper/vgtest-lvtest is now 389120 blocks long. [root@node1 ~]#

到此,我们的LV扩容已经成功了

6 缩小LV容量

介绍完LV的扩容,我们再来说说如何缩小LV容量。假设我们想缩小lvtest的容量,并将/dev/sdc从vgtest中抽离出去,我们需要这样进行:

#首先降低文件系统容量
[root@node1 ~]# resize2fs /dev/mapper/vgtest-lvtest 900M
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/vgtest-lvtest is mounted on /test; on-line resizing required
On-line shrinking from 389120 to 230400 not supported.
#这里提示我们lvtest已经被挂载,不能在线缩小逻辑卷容量,所以要先取消挂载
[root@node1 ~]# umount /dev/mapper/vgtest-lvtest
[root@node1 ~]# resize2fs /dev/mapper/vgtest-lvtest 900M
resize2fs 1.41.12 (17-May-2010)
请先运行 'e2fsck -f /dev/mapper/vgtest-lvtest'. #这里提示我们先运行e2fsck命令,按照提示操作即可
[root@node1 ~]# e2fsck -f /dev/mapper/vgtest-lvtest
e2fsck 1.41.12 (17-May-2010)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/mapper/vgtest-lvtest: 11/97920 files (0.0% non-contiguous), 10636/389120 blocks [root@node1 ~]# resize2fs /dev/mapper/vgtest-lvtest 900M
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/vgtest-lvtest to 230400 (4k) blocks.
The filesystem on /dev/mapper/vgtest-lvtest is now 230400 blocks long. #这里可以看到文件系统已经成功缩小了,接下来缩小逻辑卷的大小,请注意一定要保证缩小后的逻辑卷空间大于或等于resize2fs命令缩小后的文件系统大小,否则该逻辑卷就出错不能正常使用了(很不幸,我就是在这里踩雷了~)。我们可以先使用pvdisplay命令查看/dev/sdc的信息 [root@node1 ~]# pvdisplay /dev/sdc
--- Physical volume ---
PV Name /dev/sdc
VG Name vgtest
PV Size 1.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 255
Free PE 255
Allocated PE 0
PV UUID l4VpXe-wbwu-jSkq-jv8J-Qw8X-V5t3-1fAfBE #可以看到PE块大小是4M,共有255个PE块,所以我们可以从lvtest中减小255个PE
[root@node1 ~]# lvreduce -l 255 /dev/mapper/vgtest-lvtest
WARNING: Reducing active logical volume to 1020.00 MiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lvtest? [y/n]: y
Reducing logical volume lvtest to 1020.00 MiB
Logical volume lvtest successfully resized
#上面会有告警信息,但是我们实际的数据量(900M)比1020M小,所以按y继续吧 [root@node1 ~]# mount /dev/mapper/vgtest-lvtest /test
[root@node1 ~]# df -h /test
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vgtest-lvtest 885M 34M 806M 5% /test
#重新挂载该逻辑卷,查看其大小, # 接下来就是移除/dev/sdc了
[root@node1 ~]# pvdisplay /dev/sdb /dev/sdc
--- Physical volume ---
PV Name /dev/sdb
VG Name vgtest
PV Size 1.00 GiB / not usable 4.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 255
Free PE 0
Allocated PE 255
PV UUID RUQhfR-5XLv-Xhgg-mbFH-M2dp-Cust-myRojW --- Physical volume ---
PV Name /dev/sdc
VG Name vgtest
PV Size 1.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 255
Free PE 255
Allocated PE 0
PV UUID l4VpXe-wbwu-jSkq-jv8J-Qw8X-V5t3-1fAfBE
# 使用pvdisplay命令查看/dev/sdb /dev/sdc的信息,可以看到/dev/sdc是完全空闲的,所以可以直接移除
[root@node1 ~]# vgreduce vgtest /dev/sdc
Removed "/dev/sdc" from volume group "vgtest"
[root@node1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_node1 lvm2 a-- 19.80g 3.14g
/dev/sdb vgtest lvm2 a-- 1020.00m 0
/dev/sdc lvm2 a-- 1.00g 1.00g
#可以看到/dev/sdc 已经不属于vgtest了

到此为止,lv的缩小就介绍完了,不过我们再小小的扩展一下,假设我们刚才对lvtest进行缩减后,发现/dev/sdc的PE还有被使用的,那这是就不能直接移除sdc了,需要先进行PE的转移,将/dev/sdc中的已使用PE全部转移到其他空间充足的PV中,比如说执行pvmove /dev/sdc /dev/sdb,然后就可以从vgtest中移除/dev/sdc。

Linux中逻辑卷(LV)的创建、增大和减小的更多相关文章

  1. Linux中逻辑卷的快照与还原

    有关逻辑卷的其他操作,请看: Linux中对逻辑卷的建立 Linux中对逻辑卷进行扩容与缩小 Linux中对逻辑卷的移除 LVM还有快照的功能,类似windows的系统还原点.其特点: 1.快照卷的容 ...

  2. Linux中逻辑卷(LVM)管理基本操作

    1.创建逻辑卷 原文:https://linux.cn/article-3965-1.html

  3. Linux LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载)

    Linux LVM逻辑卷配置过程详解 许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份.删除相关数据, ...

  4. (转)Linux LVM逻辑卷配置过程详解(创建、扩展、缩减、删除、卸载、快照创建)

    一.预备知识 LVM全称为Logical Volume Manager 逻辑卷管理器,LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上.文件系统之下的一个逻辑层,可提高磁盘 ...

  5. Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理

    (一)相关概念 逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先需要了解逻辑卷管理中的一些概念. 物理卷(Physical Volume, ...

  6. Linux下逻辑卷LVM的管理和RAID磁盘阵列

    目录 LVM 一:LVM的创建 二:LVM的拉伸 三:LVM的缩小 四:LVM的删除 五:RAID磁盘阵列的添加 LVM LVM(Logical Volume Manager) 逻辑卷管理器,可以动态 ...

  7. [翻译]LVM中逻辑卷的最大大小限制

    前言: 本文是对这篇博客Maximum Size Of A Logical Volume In LVM的翻译,敬请尊重原创和翻译劳动成果,那些随意转载的大爷们,好歹也自觉注明出处.谢谢! 英文原文地址 ...

  8. Linux 笔记 - 第十七章 Linux LVM 逻辑卷管理器

    一.前言 在实际生产中,有时会遇到磁盘分区空间不足的情况,这时候就需要对磁盘进行扩容,普通情况下需要新加一块磁盘,重分区.格式化.数据复制.卸载旧分区.挂载新分区等繁琐的步骤,而且有可能造成数据的丢失 ...

  9. Linux lvm 逻辑卷篇

    Linux LVM逻辑卷配置过程详解(创建.增加.减少.删除.卸载) 许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用 ...

随机推荐

  1. 对拍(C++)

    对拍(C++) 对拍是什么 ​ 众所周知,当我们正在考试敲代码的时候,每一道题,都会有某种正解能拿到满分:当我们想不出正解时,我们往往可以打暴力代码来骗分. ​ 但是,当我们有思路写正解,但又担心自己 ...

  2. ElasticSearch实战系列七: Logstash实战使用-图文讲解

    前言 在上一篇中我们介绍了Logstash快速入门,本文主要介绍的是ELK日志系统中的Logstash的实战使用.实战使用我打算从以下的几个场景来进行讲解. 时区问题解决方案 在我们使用logstas ...

  3. Gulp的安装及用法

    1.安装淘宝镜像 npm install cnpm -g --registry=https://registry.npm.taobao.org cnpm -v 2.生成项目描述文件 package.j ...

  4. MySQL标识列(自增长列)

    #标识列/*又称为自增长列含义:可以不用手动的插入值,系统提供默认的序列值 特点:1.标识列必须和主键搭配吗?不一定,但要求是一个key2.一个表可以有几个标识列?至多一个!3.标识列的类型只能是数值 ...

  5. centos7.8 安装部署 k8s 集群

    centos7.8 安装部署 k8s 集群 目录 centos7.8 安装部署 k8s 集群 环境说明 Docker 安装 k8s 安装准备工作 Master 节点安装 k8s 版本查看 安装 kub ...

  6. 团队作业3:需求改进&系统设计

    一.需求&原型改进: 1.1 选题需求改进 用户:同学你好,有什么事我们能帮到你 我:我要说的事……(咽口水)你们千万别害怕 用户:我们是杠精,我们不会怕,您请说 我:我们要做一个roguel ...

  7. 通过索引优化sql

    sql语句的优化最重要的一点就是要合理使用索引,下面介绍一下使用索引的一些原则: 1.最左前缀匹配原则.mysql会一直向右匹配直到遇到范围查询(>.<.between.like)就停止匹 ...

  8. 3D渲染集群,你了解多少?

    摘要:渲染是批处理运行模式,那能不能使用Docker容器技术,做大规模的渲染集群呢? 我们先说说3D渲染涉及哪些领域: 1.什么是3D渲染 简单粗暴的讲:就是将虚拟世界里的3D模型,变为(人眼看到)平 ...

  9. 使用ClickHouse表函数将MySQL数据导入到ClickHouse

    #clickhouse-client :create database dw; :use dw; --导入数据: CREATE TABLE Orders ENGINE = MergeTree ORDE ...

  10. SEO大神都是些什么人

    http://www.wocaoseo.com/thread-97-1-1.html 貌似好久没有更新seo培训联盟的文章了,最近一直在专心学习其他的东西,前一段写了几篇关于用户需求和体验的文章,但是 ...