LVM讲解

LVM是什么

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。

LVM的工作原理

输入图片说明

具体的操作步骤如下:

  1. 添加磁盘,现在的服务器磁盘都支持热拔插,不需要关机直接添加磁盘后系统也能识别到新的磁盘,在使用虚拟机的实验环境下,添加磁盘后需要重启虚拟机,系统才会识别到新添加的磁盘,如下所示,/dev/sdb就是我们新添加的磁盘
[root@localhost ~]# fdisk -l

磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a5fed

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      411647      204800   83  Linux
/dev/sda2          411648     4507647     2048000   82  Linux swap / Solaris
/dev/sda3         4507648    41943039    18717696   83  Linux

磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

  1. 给新磁盘分区,并将ID改为8e 。(这个地方不改成8e也能做成物理卷,但是据传在使用的过程当中会出现问题,所以最好严格按照步骤来操作)我们是将磁盘划分了三个分区,每个分区给了1G的容量,并且将ID改为了8e,因为划分三次的步骤是完全一样的,所以只上传了划分第一个分区的图

输入图片说明

  1. 将分区做成物理卷;使用命令:pvcreate /dev/sdb1。在最小化安装的Linux系统中该命令是没有安装的,需要运行yum intstall -y lvm2 来安装
[root@localhost ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.
[root@localhost ~]# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.
[root@localhost ~]# pvcreate /dev/sdb3
  Physical volume "/dev/sdb3" successfully created.

创建完物理卷之后可以使用pvdisplay 或 dvs命令来查看一下当前的物理卷,如果查看不到,可以先运行一下partprobe命令。

[root@localhost ~]# pvs
  PV         VG Fmt  Attr PSize PFree
  /dev/sdb1     lvm2 ---  1.00g 1.00g
  /dev/sdb2     lvm2 ---  1.00g 1.00g
  /dev/sdb3     lvm2 ---  1.00g 1.00g

  1. 再创建卷组,vgcreate vg1 /dev/sdb1 /dev/sdb2 这条命令的意思是将物理卷/dev/sdb1 、/dev/sdb2组成卷组vg1。创建完成后可以使用vgdisplay或vgs命令查看卷组
[root@localhost ~]# vgcreate vg1 /dev/sdb1 /dev/sdb2
  Volume group "vg1" successfully created
[root@localhost ~]# vgs
  VG  #PV #LV #SN Attr   VSize VFree
  vg1   2   0   0 wz--n- 1.99g 1.99g

  1. 创建逻辑卷并指定逻辑卷大小为100M;lvcreate -L 100M -n lv1 vg1,创建完成后可以使用lvdisplay或者 lvs命令查看逻辑卷信息。
[root@localhost ~]# lvcreate -L 100M -n lv1 vg1
  Logical volume "lv1" created.
[root@localhost ~]# lvs
  LV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg1 -wi-a----- 100.00m                                                    
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg1/lv1
  LV Name                lv1
  VG Name                vg1
  LV UUID                h418at-aYwA-m8Ah-lAji-ICmF-uVW0-eDjAdQ
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2018-02-28 08:44:57 +0800
  LV Status              available
  # open                 0
  LV Size                100.00 MiB
  Current LE             25
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  1. 将逻辑卷格式化为ext4格式 :mkfs.ext4 /dev/vg1/lv1 格式化完成后将逻辑卷挂在到/mnt/下:
[root@localhost ~]# mkfs.ext4 /dev/vg1/lv1 
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=33685504
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks: 
	8193, 24577, 40961, 57345, 73729

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

[root@localhost ~]# mount /dev/vg1/lv1 /mnt
[root@localhost ~]# ls /mnt
lost+found

到这里,LVM就算完成了,当逻辑卷空间不足时怎样扩容呢?

LVM逻辑卷的扩容(逻辑卷格式为ext4)

  1. 卸载逻辑卷 umount /mnt
  2. 指定新的容量 lvresize -L 200M /dev/vg1/lv1
  3. 检查是否有错误 e2fsck -f /dev/vh1/lv1
  4. 更新逻辑卷信息 resize2fs /dev/vg1/lv1
  5. 挂载逻辑卷 mount /dev/vg1/lv1 /mnt 并查看 df -h
[root@localhost ~]# umount /mnt
umount: /mnt:未挂载
[root@localhost ~]# lvresize -L 200M /dev/vg1/lv1
  Size of logical volume vg1/lv1 changed from 100.00 MiB (25 extents) to 200.00 MiB (50 extents).
  Logical volume vg1/lv1 successfully resized.
[root@localhost ~]# e2fsck -f /dev/vg1/lv1
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/vg1/lv1: 13/25688 files (7.7% non-contiguous), 8899/102400 blocks
[root@localhost ~]# resize2fs /dev/vg1/lv1
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg1/lv1 to 204800 (1k) blocks.
The filesystem on /dev/vg1/lv1 is now 204800 blocks long.

[root@localhost ~]# mount /dev/vg1/lv1 /mnt
[root@localhost ~]# df -h /mnt
文件系统             容量  已用  可用 已用% 挂载点
/dev/mapper/vg1-lv1  190M  1.6M  175M    1% /mnt

LVM缩容操作(很少使用,xfs不支持)

  1. 卸载 umount /mnt
  2. 检查是否有错误 e2fsck -f /dev/vh1/lv1
  3. 指定新的容量 lvresize -L 100M /dev/vg1/lv1
  4. 查看容量是否缩减 lvdisplay 或 lvs
  5. 挂载 mount /dev/vg1/lv1
[root@localhost ~]# e2fsck -f /dev/vg1/lv1
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/vg1/lv1: 13/49400 files (7.7% non-contiguous), 11887/204800 blocks
[root@localhost ~]# lvresize -L 100M /dev/vg1/lv1
  WARNING: Reducing active logical volume to 100.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg1/lv1? [y/n]: y
  Size of logical volume vg1/lv1 changed from 200.00 MiB (50 extents) to 100.00 MiB (25 extents).
  Logical volume vg1/lv1 successfully resized.
[root@localhost ~]# lvs
  LV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg1 -wi-a----- 100.00m                                                    
[root@localhost ~]# mount /dev/vg1/lv1 /mnt
mount: 文件系统类型错误、选项错误、/dev/mapper/vg1-lv1 上有坏超级块、
       缺少代码页或助手程序,或其他错误

       有些情况下在 syslog 中可以找到一些有用信息- 请尝试
       dmesg | tail  这样的命令看看。

当逻辑卷格式为xfs类型时,扩容逻辑卷的操作

为了符合实验要求,首先将/dev/vg1/lv1 格式化为xfs类型 ,mkfs.xfs -f /dev/vg1/lv1

  1. 格式化成xfs后挂载该逻辑卷 mount /dev/vg1/lv1 /mnt
  2. lvs 命令查看逻辑卷大小
  3. 扩容 ;lvresize -L 300M /dev/vg1/lv1
  4. lvs 查看大小
  5. 使用df-h 发现容量没变 ,需要执行xfs_growfs /dev/vg1/lv1 命令
  6. 在使用df -h 命令查看
[root@localhost ~]# mkfs.xfs -f /dev/vg1/lv1
meta-data=/dev/vg1/lv1           isize=256    agcount=2, agsize=6656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=13312, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=853, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mount /dev/vg1/lv1 /mnt
[root@localhost ~]# ls /mnt
[root@localhost ~]# lvs
  LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg1 -wi-ao---- 52.00m                                                    
[root@localhost ~]# lvresize -L 300M  /dev/vg1/lv1
  Size of logical volume vg1/lv1 changed from 52.00 MiB (13 extents) to 300.00 MiB (75 extents).
  Logical volume vg1/lv1 successfully resized.
[root@localhost ~]# lvs
  LV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg1 -wi-ao---- 300.00m                                                    
[root@localhost ~]# df -h /mnt
文件系统             容量  已用  可用 已用% 挂载点
/dev/mapper/vg1-lv1   49M  2.7M   46M    6% /mnt
[root@localhost ~]# xfs_grows /dev/vg1/lv1
-bash: xfs_grows: 未找到命令
[root@localhost ~]# xfs_growfs /dev/vg1/lv1
meta-data=/dev/mapper/vg1-lv1    isize=256    agcount=2, agsize=6656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=13312, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=853, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 13312 to 76800
[root@localhost ~]# df -h /mnt
文件系统             容量  已用  可用 已用% 挂载点
/dev/mapper/vg1-lv1  297M  3.1M  294M    2% /mnt

可以看到,容量从50M成功的扩容到了300M

扩容卷组

从上面的内容可以看出,逻辑卷扩容的上限就是卷组的容量,如果卷组的容量不够用了该怎么扩容呢?在实验之初我们是创建了三个物理卷,而创建卷组的时候只用了两个物理卷,当卷组容量不够时 ,我们可以把空闲的第三个物理卷加入到卷组当中

  1. 将物理卷加入原有卷组 vgextend vg1 /dev/sdbx
  2. 使用vgs验证是否扩容成功
[root@localhost ~]# vgs
  VG  #PV #LV #SN Attr   VSize VFree 
  vg1   2   1   0 wz--n- 1.99g <1.70g

[root@localhost ~]# vgextent vg1 /dev/sdb3
-bash: vgextent: 未找到命令
[root@localhost ~]# vgex
vgexport  vgextend  
[root@localhost ~]# vgextend vg1 /dev/sdb3
  Volume group "vg1" successfully extended
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               vg1
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               <2.99 GiB
  PE Size               4.00 MiB
  Total PE              765
  Alloc PE / Size       75 / 300.00 MiB
  Free  PE / Size       690 / <2.70 GiB
  VG UUID               gT48qq-JCCo-I17e-H82v-gQoV-d5f8-9IoYeR
   

猜你喜欢

转载自my.oschina.net/u/3731306/blog/1625595
LVM
今日推荐