lvm

lvm - logic volume manage

LVM基本术语

  LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。首先我们讨论以下几个LVM术语:

  物理存储介质(The physical media)

  这里指系统的存储设备:硬盘,如:/dev/hda、/dev/sda等等,是存储系统最低层的存储单元。

  物理卷(physicalvolume)

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

  卷组(Volume Group)

  LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。

  逻辑卷(logicalvolume)

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

  PE(physical extent)

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

由于vg是多个PE(块)组成的,而且每个vg块的PE最大数量是65534。默认每个PE的大小是4m

也就是说默认的每个vg最大也就是4m乘65534=256G,因此PE块的大小决定了最终vg的大小。

PE的值可以是4,8,16,32,64。PE越小硬盘利于率越高,但是每个VG块的最大数量是65534,所以PE大小决定了VG卷组的大小。

准备好物理磁盘或分区

[root@alvin Desktop]# ls /dev/sdb
/dev/sdb
[root@alvin Desktop]# ls /dev/sdc
/dev/sdc
[root@alvin Desktop]# ls /dev/sdc*
/dev/sdc  /dev/sdc1  /dev/sdc2
[root@alvin Desktop]# ls /dev/sdd
/dev/sdd

创建物理卷(pv)

[root@alvin Desktop]# pvcreate /dev/sdb
[root@alvin Desktop]# pvcreate  /dev/sdc2
[root@alvin Desktop]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sdb        lvm2 a--  80.00g 80.00g
  /dev/sdc2       lvm2 a--  39.99g 39.99g

创建卷组(vg)

vgcreate 参数说明

  • -l:卷组上允许创建的最大逻辑卷数;
  • -p:卷组中允许添加的最大物理卷数;
  • -s:卷组上的物理卷的PE大小。
[root@alvin Desktop]# vgcreate /dev/vg0 /dev/sdb /dev/sdc2
  Volume group "vg0" successfully created
[root@alvin Desktop]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  vg0    2   0   0 wz--n- 119.98g 119.98g

创建逻辑卷

说明:

-L 指定创建的LV 的大小
-l 指定创建的LV 的PE 数量
-n LV的名字
[root@alvin Desktop]# lvcreate -L 10G -n /dev/vg0/lv01 /dev/vg0
  Logical volume "lv01" created
[root@alvin Desktop]# lvs
  LV   VG   Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv01 vg0  -wi-a---- 10.00g

格式后挂载使用

[root@alvin Desktop]# mkfs.ext4 /dev/vg0/lv01
[root@alvin Desktop]# mkdir /mnt/lv01
[root@alvin Desktop]# mount /dev/vg0/lv01 /mnt/lv01
[root@alvin Desktop]# vim /etc/fstab                         --设置开机自动挂载

查看逻辑卷状态

[root@alvin lv01]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sdb   vg0  lvm2 a--  80.00g 70.00g
  /dev/sdc2  vg0  lvm2 a--  39.98g 39.98g
[root@alvin lv01]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  vg0    2   1   0 wz--n- 119.98g 109.98g
[root@alvin lv01]# lvs
  LV   VG   Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv01 vg0  -wi-ao--- 10.00g

******************************************************************************************

[root@alvin lv01]# pvdisplay /dev/sdb                        --详细显示pv状态
  --- Physical volume ---
  PV Name               /dev/sdb
  VG Name               vg0
  PV Size               80.00 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              20479
  Free PE               17919
  Allocated PE          2560
  PV UUID               Jqgzop-F0rK-gf8g-EwSZ-YsrM-eGYE-QojNTq

*********************************************************************************************
[root@alvin lv01]# vgdisplay vg0                            --详细显示卷组的信息
  --- Volume group ---
  VG Name               vg0
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               119.98 GiB
  PE Size               4.00 MiB
  Total PE              30715
  Alloc PE / Size       2560 / 10.00 GiB
  Free  PE / Size       28155 / 109.98 GiB
  VG UUID               VQ56JI-lHJs-yHhk-p1fD-oj0a-mWcV-FQMzGd
*********************************************************************************************
[root@alvin lv01]# lvdisplay /dev/vg0/lv01                        --详细显示逻辑卷的信息
  --- Logical volume ---
  LV Path                /dev/vg0/lv01
  LV Name                lv01
  VG Name                vg0
  LV UUID                o2sCgf-mnnn-N1pN-JqzC-BxTc-tMYr-yXj9NW
  LV Write Access        read/write
  LV Creation host, time teacher.uplooking.com, 2015-04-08 16:51:55 +0800
  LV Status              available
  # open                 1
  LV Size                10.00 GiB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

扩展vg

[root@alvin lv01]# pvcreate /dev/sdd
  Physical volume "/dev/sdd" successfully created
[root@alvin lv01]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sdb   vg0  lvm2 a--  80.00g 70.00g
  /dev/sdc2  vg0  lvm2 a--  39.98g 39.98g
  /dev/sdd        lvm2 a--  80.00g 80.00g
[root@alvin lv01]# vgextend vg0 /dev/sdd                --向vg中添加pv
  Volume group "vg0" successfully extended
[root@alvin lv01]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  vg0    3   1   0 wz--n- 199.98g 189.98g

从卷组中移除pv

[root@alvin lv01]# vgreduce vg0 /dev/sdd
  Removed "/dev/sdd" from volume group "vg0"
[root@alvin lv01]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  vg0    2   1   0 wz--n- 119.98g 109.98g

删除PV

[root@alvin lv01]# pvremove /dev/sdd
  Labels on physical volume "/dev/sdd" successfully wiped
[root@alvin lv01]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sdb   vg0  lvm2 a--  80.00g 70.00g
  /dev/sdc2  vg0  lvm2 a--  39.98g 39.98g

在线扩展lv:

指定新增大小扩容

[root@alvin lv01]# lvextend -v -L +10G /dev/vg0/lv01
                -v:显示创建过程
                -L:指定扩展的大小 (+10G:扩展10G,30G:扩展到30G)
[root@alvin lv01]# lvs
  LV   VG   Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv01 vg0  -wi-ao--- 20.00g
[root@alvin lv01]# df -h | grep lv01                        --df查看没变化
/dev/mapper/vg0-lv01  9.9G  151M  9.2G   2% /mnt/lv01


[root@alvin lv01]# resize2fs /dev/vg0/lv01                    --在线扩展文件系统
        --如果报以下错误:please run "e2fsck -f /dev/vg0/lv01" first
        --直接执行提示的命令即可(e2fsck -f /dev/vg0/lv01)
[root@alvin lv01]# df -h | grep lv01
/dev/mapper/vg0-lv01   20G  156M   19G   1% /mnt/lv01

将剩余空间全部分配给指定逻辑并同时扩容文件系统

-r 参数就是在扩容逻辑卷的同时也刷新了文件系统,就不用再执行resize2ft了。

lvextend -r -l +100%free -n /dev/centos/root

回缩逻辑卷

生产环境中要先备份数据,再回缩文件系统
[root@alvin ~]# resize2fs /dev/vg0/lv01 10G                    --回缩文件系统
[root@alvin ~]# e2fsck -f /dev/vg0/lv01                        --磁盘检测
[root@alvin ~]# lvreduce -v -L 10G /dev/vg0/lv01                --回缩逻辑卷(回缩到10G)
[root@alvin ~]# lvs
  LV   VG   Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv01 vg0  -wi-a---- 10.00g
[root@alvin ~]# mount /dev/vg0/lv01 /mnt/lv01
[root@alvin ~]# df -h

拆除逻辑卷的过程

[root@alvin ~]# umount /mnt/lv01                        --卸载
[root@alvin ~]# vim /etc/fstab                             --清除开机自动启动项
[root@alvin ~]# lvremove /dev/vg0/lv01                     --删除lv
[root@alvin ~]# vgremove vg0                            --删除vg
[root@alvin ~]# pvremove /dev/sdc2                        --删除pv
[root@alvin ~]# pvremove /dev/sdb                        --删除pv

查看lv的物理分布

[root@alvin ~]# lsblk -f                            --查看lv的物理分布
NAME   FSTYPE    LABEL                   UUID                                   MOUNTPOINT
sda
├─sda1 ext4                              7631883b-5824-4ed5-a730-b8d2ea45c14d   /boot
├─sda2 ext4                              b18be717-ca34-41c2-8291-994f0a07d9a2   /
├─sda3 swap                              116f98e8-74bf-44e2-8787-07a9271ae2e5   [SWAP]
├─sda4
├─sda5 ext2                              0ecfcbe1-d9a3-4af5-b11a-e754e61725bc   /sda5
├─sda6 ext4      soft                    624daed7-28e7-462e-bb59-c0f806994167   /sda6
├─sda7 swap                              5d858574-18c1-4d62-9b84-5ec6dc205ae9   [SWAP]
└─sda8 ext4                              9a216799-0764-4b9f-b81f-ce82361ebc10   /sda8
sdb    LVM2_memb                         Aq6Dbw-PEX1-jsfX-pjb6-cKsQ-lzhr-61lj0y
└─vg0-lv01 (dm-0)

sdc
├─sdc1 linux_rai teacher.uplooking.com:0 33bcd246-b3a6-77d0-7666-a8f6b13f6521
└─sdc2 LVM2_memb                         11C3kp-VePT-6Xfc-9m4G-4kYY-Tnmz-DEUcoz
sdd    LVM2_memb                         xhdIyN-HRvB-wONX-hedx-mO2S-DatH-9332FJ
sr0    iso9660   RHEL_6.4 x86_64 Disc 1

fdisk分区

fdisk /dev/sdb
p #打印看看
n #开始分区
    #回车
    #回车
+512M
w
partprobe #通知内核重新读取分区表