首先说一下在缩小逻辑卷的时候要注意的问题:第一步使用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. Mybatis-09-缓存

    缓存 什么是缓存[Cache]? 存在内存中的临时数据 提高查询效率,解决高并发的性能问题 为什么使用缓存? 减少和数据库的交互次数,减少系统开销,提高系统效率 什么样的数据能使用缓存? 经常查询且不 ...

  2. 几种定时任务(Timer、TimerTask、ScheduledFuture)的退出—结合真实案例【JAVA】

    工作中常常会有定时任务的开发需求,特别是移动端.最近笔者正好有所涉及,鉴于此,结合开发中的案例说明一下几种定时任务的退出. 需求说明:定时更新正在生成的文件大小和状态[进行中.失败.完成],如果文件生 ...

  3. python数据类型分类(可变(不可变)数据类型)

    一:python数据类型的分类: 可变(不可哈希)的数据类型: list 列表 dict 字典 set 集合 不可变(可哈希)的数据类型: str 字符串 bool 布尔型 int 整型 tuple ...

  4. JS 时间获取 (常用)

    /** * 获取几天之前日期 */ daysAgo(dayNum = 0) { let myDate = new Date() let lw = new Date(myDate - 1000 * 60 ...

  5. tp6 不能使用vendor

    从thinkphp 5.1.x后vendor的使用方法发生变化,文档又没有详细说明.官方真的太坑了! 在thinkPHP 5.1.X后新版取消了Loader::import方法以及import和ven ...

  6. 创建一个springbootcloud项目

    nacos:服务治理 fegin:负载均衡 sentinel:分布式系统的流量防卫兵 sleuth+zipkin:链路追踪 前提软件安装 nacos: github下载地址:https://githu ...

  7. python爬虫--看看虎牙女主播中谁颜值最高

    目录 爬虫 百度人脸识别接口 效果演示 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知 ...

  8. rake

    ruby-rake https://rubygems.org/gems/rake 官方文档 https://ruby.github.io/rake/ http://docs.seattlerb.org ...

  9. spring集成shiro,事务失效问题 not eligible for auto-proxying

    BeanPostProcessor bean实例化顺序有关,@Configuration会最先实例化,也就是在spring启动完成之前. 导致Configuration中使用的注入,没能在spring ...

  10. Oracle RAC与DG

    RAC RAC: real application clustersrac RAC: real application clustersrac 单节点数据库:数据文件和示例文件一一对应 实例损坏时数据 ...