LVMLogical Volume Manager 逻辑卷管理

传统分区使用固定大小分区,重新调整大小十分麻烦。但是,LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘。可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷。LVM并不需要重启就可以让内核知道分区的存在。

LVM使用原理结构,如下图所示。

wKiom1bqYGiAnGLVAAB4fcoZSeY617.png

 

 

命令总览:

功能

物理卷管理

卷组管理

逻辑卷管理

Scan扫描

pvscan

vgscan

lvscan

Create建立

pvcreate

vgcreate

lvcreate

Display显示

pvdisplay

vgdisplay

lvdisplay

Remove删除

pvremove

vgremove

lvremove

Extend扩展


vgextend

lvextend

 

 准备磁盘分区

 

通过fdisk命令创建/dev/sdb5,/dev/sdb6,/dev/sdb7,/dev/sdb8四个分区。大小可以不同

[root@localhost ~]# fdisk /dev/sdb
Command (m for help): t
Partition number (1-8, default 8): 5
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

分区创建好之后应有如下输出:

[root@localhost ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 64.4 GB, 64424509440 bytes, 125829120 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xc0d9ee4a
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   fd  Linux raid autodetect
/dev/sdb2        20973568    23070719     1048576   fd  Linux raid autodetect
/dev/sdb3        23070720    44042239    10485760   83  Linux
/dev/sdb4        44042240   125829119    40893440    5  Extended
/dev/sdb5        44044288    65015807    10485760   8e  Linux LVM
/dev/sdb6        65017856    85989375    10485760   8e  Linux LVM
/dev/sdb7        85991424    96477183     5242880   8e  Linux LVM
/dev/sdb8        96479232   106964991     5242880   8e  Linux LVM

 

 

准备物理卷 

 

[root@localhost ~]# pvcreate /dev/sdb{5,6,7}
  Physical volume "/dev/sdb5" successfully created
  Physical volume "/dev/sdb6" successfully created
  Physical volume "/dev/sdb7" successfully created

创建完成后可以用pvdisplay查看。这里跳过。

删除物理卷的命令为:

[root@localhost ~]# pvremove /dev/sdb5

 

  

 

准备卷组

 

 创建一个名为testvg的卷组

 

[root@localhost ~]# vgcreate testvg /dev/sdb{5,6,7}
  Volume group "testvg" successfully created

 

卷组创建好之后就可以用vgdisplay看一下

 [root@localhost ~]# vgdisplay 
  --- Volume group ---
  VG Name               testvg
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               11.99 GiB
  PE Size               4.00 MiB
  Total PE              3069
  Alloc PE / Size       0 / 0   
  Free  PE / Size       3069 / 11.99 GiB
  VG UUID               ofhCb0-42oG-3lEF-Tq7S-cLEv-dH91-mvcdOe

 删除的命令为:

 [root@localhost ~]# vgremove testvg

 

 

在卷组里创建逻辑卷

 

创建一个大小8G,名为testlv的逻辑卷

 

 

 [root@localhost ~]# lvcreate -L 8G -n testlv testvg 
  Logical volume "testlv" created.

 

使用lvdisplay查看

 [root@localhost ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/testvg/testlv
  LV Name                testlv
  VG Name                testvg
  LV UUID                b3OHcq-LnQy-lNfj-XDgM-s9tx-rAtq-levoi1
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2016-03-17 16:28:39 +0800
  LV Status              available
  # open                 0
  LV Size                8.00 GiB
  Current LE             2048
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

删除逻辑卷的命令为:

[root@localhost ~]# lvremove /dev/testvg/testlv

 

 

接下来,这个逻辑卷就相当于一个可以动态扩容的盘了

先格式化并挂载使用。

[root@localhost ~]# mke2fs -t ext4 /dev/testvg/testlv
[root@localhost ~]# mkdir /lvm-mount
[root@localhost ~]# mount /dev/testvg/testlv /lvm-mount/

 

 

扩展LVM逻辑卷 

 

 

给刚刚创建的testlv增加2G空间

扩展时可以不用卸载此设备。

[root@localhost ~]# lvextend -L +2G /dev/testvg/testlv 
  Size of logical volume testvg/testlv changed from 8.00 GiB (2048 extents) to 10.00 GiB (2560 extents).
  Logical volume testlv successfully resized.

运行 resize2fs命令,更新文件系统

[root@localhost ~]# resize2fs /dev/testvg/testlv 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/testvg/testlv is mounted on /lvm-mount; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/testvg/testlv is now 2621440 blocks long.

验证:现在应该增加到10G了

[root@localhost ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/testvg/testlv
  LV Name                testlv
  VG Name                testvg
  LV UUID                b3OHcq-LnQy-lNfj-XDgM-s9tx-rAtq-levoi1
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2016-03-17 16:28:39 +0800
  LV Status              available
  # open                 1
  LV Size                10.00 GiB
  Current LE             2560
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

 

 

 缩减逻辑卷

 

 

注意:在对逻辑卷减小操作时,需要先把逻辑卷卸载。若缩减后分区大小小于数据时,存储在后面的数据会丢失。

[root@localhost ~]# umount /dev/testvg/testlv

卸载过后,需要使用fsck检查磁盘是否出错(-f强制检查)

[root@localhost ~]# fsck.ext4 -f /dev/testvg/testlv

 

完成以后,减少逻辑卷大小

[root@localhost ~]# lvresize -L 5G /dev/testvg/testlv

接下来缩小文件系统,更新ext4信息

[root@localhost ~]# resize2fs /dev/testvg/testlv

 

使用lvdisplay验证一下:

[root@localhost ~]# lvdisplay 
 [root@localhost ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/testvg/testlv
  LV Name                testlv
  VG Name                testvg
  LV UUID                b3OHcq-LnQy-lNfj-XDgM-s9tx-rAtq-levoi1
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2016-03-17 16:28:39 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             1280
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

接下来就可以挂载使用了。

 

 

扩展一个卷组:

 

其实,扩展卷组和扩展逻辑卷差不多。需要一个空闲分区或硬盘,在创建时选择8e类型。(我选择了刚创建的/dev/sdb8分区)

 

先查看一下

[root@localhost ~]# vgdisplay 
  --- Volume group ---
  VG Name               testvg
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               11.99 GiB
  PE Size               4.00 MiB
  Total PE              3069
  Alloc PE / Size       1280 / 5.00 GiB
  Free  PE / Size       1789 / 6.99 GiB
  VG UUID               ofhCb0-42oG-3lEF-Tq7S-cLEv-dH91-mvcdOe

 

使用vgextend命令扩展

[root@localhost ~]# vgextend /dev/testvg /dev/sdb8
  Physical volume "/dev/sdb8" successfully created
  Volume group "testvg" successfully extended

使用vgdisplay来验证(可以看到卷组大小已经增大)。

[root@localhost ~]# vgdisplay 
  --- Volume group ---
  VG Name               testvg
  System ID             
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               13.98 GiB
  PE Size               4.00 MiB
  Total PE              3580
  Alloc PE / Size       1280 / 5.00 GiB
  Free  PE / Size       2300 / 8.98 GiB
  VG UUID               ofhCb0-42oG-3lEF-Tq7S-cLEv-dH91-mvcdOe

 

 

 完~~~