Linux磁盘管理之LVM

  • 本文架构
  • LVM基本介绍
  • LVM的基本结构
  • LVM常用命令
  • LVM卷的建立和删除
  • LVM设备的建立
  • LVM设备的删除
  • LVM卷的伸缩
  • xfs文件系统
  • 分区足够
  • 分区不够
  • ext4文件系统
  • 拉伸ext4文件系统
  • 缩减ext4文件系统
  • LVM中内容的移动
  • 建立lvm的快照


本文架构

centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统

LVM基本介绍

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制 它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版

Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小

当一个逻辑分区存放不下某个文件时,这个文件受上层文件系统的限制,不能跨越多个分区来存放,所以也不能同时放到别的磁盘上

而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接 或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题

随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小

为什么要使用LVM?

在日常工作或者学习中,随着电脑的不断被使用,我们的磁盘空间可能会越来越小,这时候,我们不能直接更换大硬盘,因为硬盘有价,数据无价,这时候我们就可以使用LVM,LVM将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另外,和硬件相关的存储设置被其隐藏,你能不用停止应用或卸载文件系统来调整卷大小或数据迁移.这样能减少操作成本,LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。

LVM工作机制

LVM就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。

centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统_02

LVM的基本结构

物理存储介质(Physical Storage Media)

指系统的物理存储设备:磁盘,如:/dev/hda、/dev/sda等,是存储系统最底层的存储单元

物理卷(Physical Volume,PV)

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

卷组(Volume Group,VG)

类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成,可以在卷组上创建一个或多个LV(逻辑卷

逻辑卷(Logical Volume,LV)

类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上,在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等

物理块(Physical Extent,PE)

每一个物理卷PV被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元PE的大小是可配置的,默认为4MB,所以物理卷(PV)由大小等同的基本单元PE组成

逻辑块(Logical Extent,LE)

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

centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统_03

centos lvm 磁盘大小 更改 linux磁盘lvm_centos lvm 磁盘大小 更改_04

图中顶部,首先是实际的物理磁盘及其划分的分区和其上的物理卷(PV)。一个或多个物理卷可以创建创建卷组(VG)。然后基于卷组可以创建逻辑卷(LV)。只要在卷组中有可用空间,就可以随心所欲的创建逻辑卷。文件系统就是在逻辑卷上创建的,然后可以在操作系统挂载和访问。

centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统_05

LVM常用命令

PV 阶段

pvcreate

将实体 partition 创建成为 PV ;

pvscan/pvs

搜寻目前系统里面任何具有 PV 的磁盘;

pvdisplay

显示出目前系统上面的 PV 状态;

pvremove

将 PV 属性移除,让该 partition 不具有 PV 属性。

VG阶段

vgcreate

就是主要创建 VG 的指令啦!他的参数比较多,等一下介绍。

vgscan/vgs

搜寻系统上面是否有 VG 存在?

vgdisplay

显示目前系统上面的 VG 状态;

vgextend

在 VG 内增加额外的 PV ;

vgreduce

在 VG 内移除 PV;

vgchange

设置 VG 是否启动 (active);

vgremove

删除一个 VG 啊!

LV阶段

lvcreate

创建 LV 啦!

lvscan /lvs

查询系统上面的 LV ;

lvdisplay

显示系统上面的 LV 状态啊!

lvextend

在 LV 里面增加容量

lvreduce

在 LV 里面减少容量;

lvremove

删除一个 LV !

lvresize

对 LV 进行容量大小的调整!

centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统_06

LVM卷的建立和删除

centos lvm 磁盘大小 更改 linux磁盘lvm_磁盘管理_07

LVM设备的建立

步骤一:使用监控命令:watch -n 1 'pvs;echo======;vgs;echo ========;lvs;echo ======;df -h /data’进行监控
步骤二:mkdir /data 新建一个用户使用存储空间的挂载目录
步骤三:fdisk -l 查看一个未分区的设备
步骤四:fdisk /dev/vdb 划分一个主分区/dev/vdb1 ; wq退出保存(500M)
步骤五:fdisk /dev/vdb 按t,将标签写为8e(贴lvm标签)wq退出保存
步骤六:pvcreate /dev/vdb1 创建物理分区(将橙子榨成汁)
步骤七:vgcreate -s 16M vg0 /dev/vdb1 (将橙子汁倒进一个大容器,单位是16M)
步骤八:vgdisplay 可以查看lvm卷的大小
步骤九:lvcreate -L 20M -n lv0 vg0(将大容器的橙子汁倒出来小杯子喝,想倒20M,但是最小单位是16M,所以会给我32M)
步骤十:mkfs.xfs /dev/vg0/lv0(将分出来的lvm逻辑卷格式化才能挂载)
步骤十一:mount /dev/vg0/lv0 /data/(挂载在/data下面客户才能用)
步骤十二:df查看是否挂载

centos lvm 磁盘大小 更改 linux磁盘lvm_磁盘管理_08


新建一个分区

centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统_09


centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统_10

建立pv

centos lvm 磁盘大小 更改 linux磁盘lvm_磁盘管理_11

导入vg0

centos lvm 磁盘大小 更改 linux磁盘lvm_磁盘管理_12

建立lv0

centos lvm 磁盘大小 更改 linux磁盘lvm_逻辑卷_13

挂载到/data目录上

centos lvm 磁盘大小 更改 linux磁盘lvm_磁盘管理_14

centos lvm 磁盘大小 更改 linux磁盘lvm_centos lvm 磁盘大小 更改_15

LVM设备的删除

步骤一:umount /data
步骤二:lvremove /dev/vg0/lv0-backup
步骤三:lvremove /dev/vg0/lv0
步骤四:vgremove vg0
步骤五:pvremove /dev/vdb2
步骤六:fdisk /dev/vdb 删除建立的所有主分区即可

centos lvm 磁盘大小 更改 linux磁盘lvm_磁盘管理_16

centos lvm 磁盘大小 更改 linux磁盘lvm_centos lvm 磁盘大小 更改_17


centos lvm 磁盘大小 更改 linux磁盘lvm_逻辑卷_18

centos lvm 磁盘大小 更改 linux磁盘lvm_逻辑卷_19

centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统_20

LVM卷的伸缩

xfs文件系统

centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统_21

分区足够
步骤一:输入监控命令:watch -n 1 ‘pvs;echo======;vgs;echo ========;lvs;echo ======;df -h /data’
步骤二:分情况处理
第一种情况:当划分出来的主分区/dev/vdb1够用时,直接进行拉伸(一个橙子够喝的时候)

lvextend -L 100M /dev/vg0/lv0 拉伸lvm的大小

xfs_growfs /dev/vg0/lv0 同步文件系统的大小

centos lvm 磁盘大小 更改 linux磁盘lvm_逻辑卷_22


centos lvm 磁盘大小 更改 linux磁盘lvm_centos lvm 磁盘大小 更改_23

分区不够
第二种情况:当划分出来的主分区/dev/vdb1不够用时(我想将lvm拉伸为600M),先划分一个主分区出来/dev/vdb2,再拉伸

fdisk /dev/vdb
n->p->2->回车->+100M->p查看/dev/vdb2->t->2->8e->p查看->wq保存

partprobe 同步分区表

pvcreate /dev/vdb2 榨橙汁

vgextend vg0 /dev/vdb2将橙汁倒进去大杯子

lvextend -L 600M /dev/vg0/lv0 拉伸lvm

xfs_growfs /dev/vg0/lvo 拉伸文件系统(否则拉伸的文件不能用)
说明:xfs文件系统不能进行缩减,ext4文件系统支持缩减,它的拉伸方式与xfs也不太一样

centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统_24


centos lvm 磁盘大小 更改 linux磁盘lvm_逻辑卷_25

centos lvm 磁盘大小 更改 linux磁盘lvm_磁盘管理_26

centos lvm 磁盘大小 更改 linux磁盘lvm_逻辑卷_27

centos lvm 磁盘大小 更改 linux磁盘lvm_centos lvm 磁盘大小 更改_28

centos lvm 磁盘大小 更改 linux磁盘lvm_centos lvm 磁盘大小 更改_29

centos lvm 磁盘大小 更改 linux磁盘lvm_磁盘管理_30

centos lvm 磁盘大小 更改 linux磁盘lvm_磁盘管理_31

ext4文件系统

centos lvm 磁盘大小 更改 linux磁盘lvm_centos lvm 磁盘大小 更改_32

拉伸ext4文件系统
步骤一:umount /data
步骤二:mkfs.ext4 /dev/vg0/lv0将设备格式化为ext4文件系统
步骤三:mount /dev/vg0/lv0 /data挂载
步骤四:blkid查看
步骤五:lvextend -L 550M /dev/vg0/lv0 扩展lvm设备
步骤六:resize2fs /dev/vg0/lv0 将文件系统也拉伸

centos lvm 磁盘大小 更改 linux磁盘lvm_磁盘管理_33

centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统_34


centos lvm 磁盘大小 更改 linux磁盘lvm_磁盘管理_35


centos lvm 磁盘大小 更改 linux磁盘lvm_centos lvm 磁盘大小 更改_36


centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统_37

centos lvm 磁盘大小 更改 linux磁盘lvm_centos lvm 磁盘大小 更改_38

缩减ext4文件系统
步骤一:umount /data
步骤二:e2fsck -f /dev/vg0/lv0扫描这个设备里面的东西,否则直接缩减会造成损坏
步骤三:resize2fs /dev/vg0/lv0 100M 缩减文件系统 
步骤四:mount /dev/vg0/lv0 /data
步骤五:df -H /data 查看大小
步骤六:lvreduce -L 100M /dev/vg0/lv0 缩减lvm设备

centos lvm 磁盘大小 更改 linux磁盘lvm_逻辑卷_39


centos lvm 磁盘大小 更改 linux磁盘lvm_磁盘管理_40


centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统_41


centos lvm 磁盘大小 更改 linux磁盘lvm_centos lvm 磁盘大小 更改_42


centos lvm 磁盘大小 更改 linux磁盘lvm_磁盘管理_43


centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统_44

LVM中内容的移动

步骤一:pvmove /dev/vbd2 /dev/vdb1完全移过去再操作,否则会损坏文件
步骤二:vgreduce vg0 /dev/vdb2 将这个橙汁移走
步骤三:pvremove /dev/vdb2

centos lvm 磁盘大小 更改 linux磁盘lvm_逻辑卷_45

centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统_46


centos lvm 磁盘大小 更改 linux磁盘lvm_磁盘管理_47


centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统_48

建立lvm的快照

当真实的设备文件挂载在/data下面比较危险,损坏就不能恢复。因此给真实设备照一个快照,挂载在/data下面再进行一系列的操作。如果误删除什么东西,直接删除快照即可

步骤一:umount /data 先卸载再进行快照
步骤二:lvcreate -L 20M -n lv0-backup -s /dev/vg0/lv0 做快照
步骤三:lvs 查看
步骤四:mount /dev/vg0/lv0-backup /data 挂载快照
步骤五:df -H
步骤六:cd /data 
ls就可以进行修改了
rm -rf *
如果错误操作直接卸载
umount /data
lvremove /dev/vg0/lv0-backup
然后重新照,重新挂载

centos lvm 磁盘大小 更改 linux磁盘lvm_磁盘管理_16

centos lvm 磁盘大小 更改 linux磁盘lvm_磁盘管理_50

centos lvm 磁盘大小 更改 linux磁盘lvm_centos lvm 磁盘大小 更改_51


centos lvm 磁盘大小 更改 linux磁盘lvm_centos lvm 磁盘大小 更改_52

centos lvm 磁盘大小 更改 linux磁盘lvm_文件系统_53


centos lvm 磁盘大小 更改 linux磁盘lvm_centos lvm 磁盘大小 更改_54