首先说一下在缩小逻辑卷的时候要注意的问题:第一步使用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命令可以看到系统中所有的硬盘

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

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

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

  1. [root@node1 ~]# pvcreate /dev/sdb /dev/sdc
  2. Physical volume "/dev/sdb" successfully created
  3. Physical volume "/dev/sdc" successfully created
  4. [root@node1 ~]#
  5. [root@node1 ~]# pvs
  6. PV VG Fmt Attr PSize PFree
  7. /dev/sda2 vg_node1 lvm2 a-- 19.80g 3.14g
  8. /dev/sdb vgtest lvm2 a-- 1020.00m 1020.00m
  9. /dev/sdc lvm2 a-- 1.00g 1.00g
  10. [root@node1 ~]# pvscan
  11. PV /dev/sdb VG vgtest lvm2 [1020.00 MiB / 1020.00 MiB free]
  12. PV /dev/sda2 VG vg_node1 lvm2 [19.80 GiB / 3.14 GiB free]
  13. PV /dev/sdc lvm2 [1.00 GiB]
  14. Total: 3 [21.79 GiB] / in use: 2 [20.79 GiB] / in no VG: 1 [1.00 GiB]
  15. [root@node1 ~]#

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

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

3 创建卷组VG

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

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

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

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

4 创建逻辑卷LV

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

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

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

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

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

-n: 指定逻辑卷的名字

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

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

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

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

5 逻辑卷LV扩容

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

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

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

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

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

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

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

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

6 缩小LV容量

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

  1. #首先降低文件系统容量
  2. [root@node1 ~]# resize2fs /dev/mapper/vgtest-lvtest 900M
  3. resize2fs 1.41.12 (17-May-2010)
  4. Filesystem at /dev/mapper/vgtest-lvtest is mounted on /test; on-line resizing required
  5. On-line shrinking from 389120 to 230400 not supported.
  6. #这里提示我们lvtest已经被挂载,不能在线缩小逻辑卷容量,所以要先取消挂载
  7. [root@node1 ~]# umount /dev/mapper/vgtest-lvtest
  8. [root@node1 ~]# resize2fs /dev/mapper/vgtest-lvtest 900M
  9. resize2fs 1.41.12 (17-May-2010)
  10. 请先运行 'e2fsck -f /dev/mapper/vgtest-lvtest'.
  11. #这里提示我们先运行e2fsck命令,按照提示操作即可
  12. [root@node1 ~]# e2fsck -f /dev/mapper/vgtest-lvtest
  13. e2fsck 1.41.12 (17-May-2010)
  14. 第一步: 检查inode,块,和大小
  15. 第二步: 检查目录结构
  16. 3步: 检查目录连接性
  17. Pass 4: Checking reference counts
  18. 5步: 检查簇概要信息
  19. /dev/mapper/vgtest-lvtest: 11/97920 files (0.0% non-contiguous), 10636/389120 blocks
  20. [root@node1 ~]# resize2fs /dev/mapper/vgtest-lvtest 900M
  21. resize2fs 1.41.12 (17-May-2010)
  22. Resizing the filesystem on /dev/mapper/vgtest-lvtest to 230400 (4k) blocks.
  23. The filesystem on /dev/mapper/vgtest-lvtest is now 230400 blocks long.
  24. #这里可以看到文件系统已经成功缩小了,接下来缩小逻辑卷的大小,请注意一定要保证缩小后的逻辑卷空间大于或等于resize2fs命令缩小后的文件系统大小,否则该逻辑卷就出错不能正常使用了(很不幸,我就是在这里踩雷了~)。我们可以先使用pvdisplay命令查看/dev/sdc的信息
  25. [root@node1 ~]# pvdisplay /dev/sdc
  26. --- Physical volume ---
  27. PV Name /dev/sdc
  28. VG Name vgtest
  29. PV Size 1.00 GiB / not usable 4.00 MiB
  30. Allocatable yes
  31. PE Size 4.00 MiB
  32. Total PE 255
  33. Free PE 255
  34. Allocated PE 0
  35. PV UUID l4VpXe-wbwu-jSkq-jv8J-Qw8X-V5t3-1fAfBE
  36. #可以看到PE块大小是4M,共有255个PE块,所以我们可以从lvtest中减小255个PE
  37. [root@node1 ~]# lvreduce -l 255 /dev/mapper/vgtest-lvtest
  38. WARNING: Reducing active logical volume to 1020.00 MiB
  39. THIS MAY DESTROY YOUR DATA (filesystem etc.)
  40. Do you really want to reduce lvtest? [y/n]: y
  41. Reducing logical volume lvtest to 1020.00 MiB
  42. Logical volume lvtest successfully resized
  43. #上面会有告警信息,但是我们实际的数据量(900M)比1020M小,所以按y继续吧
  44. [root@node1 ~]# mount /dev/mapper/vgtest-lvtest /test
  45. [root@node1 ~]# df -h /test
  46. Filesystem Size Used Avail Use% Mounted on
  47. /dev/mapper/vgtest-lvtest 885M 34M 806M 5% /test
  48. #重新挂载该逻辑卷,查看其大小,
  49. # 接下来就是移除/dev/sdc了
  50. [root@node1 ~]# pvdisplay /dev/sdb /dev/sdc
  51. --- Physical volume ---
  52. PV Name /dev/sdb
  53. VG Name vgtest
  54. PV Size 1.00 GiB / not usable 4.00 MiB
  55. Allocatable yes (but full)
  56. PE Size 4.00 MiB
  57. Total PE 255
  58. Free PE 0
  59. Allocated PE 255
  60. PV UUID RUQhfR-5XLv-Xhgg-mbFH-M2dp-Cust-myRojW
  61. --- Physical volume ---
  62. PV Name /dev/sdc
  63. VG Name vgtest
  64. PV Size 1.00 GiB / not usable 4.00 MiB
  65. Allocatable yes
  66. PE Size 4.00 MiB
  67. Total PE 255
  68. Free PE 255
  69. Allocated PE 0
  70. PV UUID l4VpXe-wbwu-jSkq-jv8J-Qw8X-V5t3-1fAfBE
  71. # 使用pvdisplay命令查看/dev/sdb /dev/sdc的信息,可以看到/dev/sdc是完全空闲的,所以可以直接移除
  72. [root@node1 ~]# vgreduce vgtest /dev/sdc
  73. Removed "/dev/sdc" from volume group "vgtest"
  74. [root@node1 ~]# pvs
  75. PV VG Fmt Attr PSize PFree
  76. /dev/sda2 vg_node1 lvm2 a-- 19.80g 3.14g
  77. /dev/sdb vgtest lvm2 a-- 1020.00m 0
  78. /dev/sdc lvm2 a-- 1.00g 1.00g
  79. #可以看到/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. 44. Spring Security FAQ春季安全常见问题

    第44.1节,“一般问题” 第44.2节,“常见问题” 第44.3节,“春季安全架构问题” 第44.4节,“常见”如何“请求 44.1 General Questions 第44.1.1节,“Spri ...

  2. 面试现场:裸面京东JavaT5第一轮电话面试

    人物简介 清辞女朋友,94年资深女程序员一枚,15年非本专业毕业,有过1年测试经验,3年Java开发经验,之前有个1年大公司的工作经历,2年的车联网公司经历,每天打卡式工作,朝九晚七.工作之余没看过一 ...

  3. JetCache埋点的骚操作,不服不行啊

    阐述背景 缓存是应对高并发绝对的利器,在很多业务场景允许的情况下,都可以使用缓存来提供性能. 既然用了缓存,那对缓存进行监控必不可少.比如缓存加载耗时,新增耗时等. 在 JetCache 中进行埋点操 ...

  4. java引用传递还是值传递?

    首先,不要纠结于 Pass By Value 和 Pass By Reference 的字面上的意义,否则很容易陷入所谓的“一切传引用其实本质上是传值”这种并不能解决问题无意义论战中.更何况,要想知道 ...

  5. Linux的CentOs系统查看CPU个数、核心数、线程数

    1.查看CPU物理个数 grep 'physical id' /proc/cpuinfo | sort -u | wc -l 或 cat /proc/cpuinfo| grep "physi ...

  6. Vue 开发技巧总结

    ​博客地址:https://ainyi.com/95 本人玩了 Vue 两年多,在此总结一下开发时的一些技巧和方法 自定义组件 v-model v-model 是 Vue 提供的一个语法糖,它本质上是 ...

  7. JS学习阶段性总结-1

    各种函数的声明 /** * 函数的声明 */ // 声明一个方法,任意调用 function aaa(args){...} // 声明一个函数并以变量的形式展示出去,因此无法再声明前调用 var fn ...

  8. vue + vant 上传图片之压缩图片

    <van-uploader v-model="fileList" multiple :after-read="afterRead" :max-count= ...

  9. Cross-Site Scripting: Reflected

    首先贴解决办法吧,解决了我项目中的问题,不一定适用所有情况. //For Cross-Site Scripting: Reflected public static String filter(Str ...

  10. C III

    http://cossacksworld.ucoz.co.uk/load/c_iii_files/79 http://cossacksworld.ucoz.co.uk/load/c_iii_files ...