LVM2 

  逻辑卷管理器第二版,Logical Volume Manager Version 2,将多个底层设备组织成一个单一的逻辑设备。

  1、纯软件实现的虚拟层次上的软设备lvm2

  2、磁盘损坏时,数据恢复困难。人为损坏数据,恢复困难。


一、LVM原理

  PV(物理卷):在任何块设备(分区、RAID、磁盘)之上,附加一层元数据。

    **在删除PV前,先将要移除PV上的数据移动至其他PV之上**


  VG(卷组):在PV的存储空间中,更低层次上划分多个相同大小的PE,将所有PE组合成一个逻辑上的层次VG。

    1、可动态扩展或缩减VG中PV的数量

    2、类似于扩展分区,不能直接格式化使用。

    3、PE只有在VG创建后才会出现在PV中,其大小由创建时指定。默认为4M


  LV(逻辑卷):在逻辑层次的VG之上,划分VG为大小相同的PE,组合不同数量的PE为LV。

    1、可动态扩展或缩减LV的大小,或 LV中PE的数量,即可跨越多个PV。

    2、可以直接格式化并挂载使用。

    3、LE只有在LV创建后才会出现在VG中,其大小由创建时指定。默认为1280

+++++++lvm2基本应用,扩展及缩减实现_linux

    快照:在LV之上实现的。创建快照后,将创建一个监控对原卷中的元数据进行瞬间扫描(为了避免元数据备份的时间不一致),当文件任何内容改变时,元数据均会改变。在元数据变化之前,将变化的数据备份在于快照空间中。访问快照时,变化的部分在快照中,没有变化的部分在于原卷中。

+++++++lvm2基本应用,扩展及缩减实现_linux_02

    1、快照是另一个路径指向与原卷相同的Inode

    2、创建快照备份,只是对创建快照那一刻原卷内的所有数据进行备份,之后新加入的内容不会进行备份,需要用到(增量备份或差异备份)

    3、快照的大小取决于:原卷存活的时间内数据变化量。最大大小为原卷大小

    4、快照卷的路径:跟原卷在同一个卷组中。


**备份:数据序列化的过程,将文件和数据抽象为丝状,才能被线缆所承载。

**序列化:将特定数据组织结构转换成流式化的数据,且能够还原成原来的样子。

***逻辑卷的扩展和收缩

  逻辑卷分为内层和外层:内存为使用的文件系统大小,外层为逻辑空间大小。

   1、如果要扩展时,先扩展外层,后扩展内层。

   1、如果要缩减时,先缩减内层,后缩减外层。

+++++++lvm2基本应用,扩展及缩减实现_linux_03


二、LVM2的实现

  LV是内核中dm(device mapper)模块实现的功能之一

    1、实现RAID:可将多个底层设备组织成一个设备

    2、实现逻辑卷

    3、实现多路径


  用户空间的程序:用户不能直接操作内核中的模块:

    1、程序员通过API接口

    2、通过程序员写的程序调用内核中的模块


  创建后逻辑卷的路径(lvpath

    原始路径:/dev/dm-#

    其链接文件有: 

     1)/dev/mapper/VGNAME-LVNAME

     2)/dev/VGNAME/LVNAME

  

三、LVM2在CentOS 6上的实现

1、物理卷管理

    创建:pvcreate [<partition/raid/disk>]...

 显示:pvs ,pvdisplay

    删除:pvremove [<partition/raid/disk>]


2、卷组管理

    创建: vgcreate VGNAME [<partition/raid/disk>]...

 显示: vgs,vgdisplay

    扩展: vgextend VGNAME [<partition/raid/disk>]

    缩减:vgreduce VGNAME [<partition/raid/disk>] **缩减前,pvmove <partition/disk/raid>

    删除:vgremove VGNAME [<partition/raid/disk>]


3、逻辑卷管理

    创建: lvcreate -L #[KMGTE] -n LVNAME VGNAME

    -L #[KMGTE],-L指定创建逻辑卷的大小,单位有K/M/G/T/E

    -n LVNAME ,-n指定逻辑卷的名字

 显示: lvs ,lvdisplay

    扩展: 

        mount lvpath MOUNT_POINT

        lvextend -L [+]#[KMGTE] lvpath

    让逻辑卷大小扩展: # 扩展后的具体大小. +# 原来的大小加上由#指定的值即为扩展后的值

        resize2fs lvpath

    让文件系统扩展至逻辑卷空间大小

    缩减:

        umount {lvpath|MOUNT_POINT}

        e2fsck -f lvpath

        resize2fs lvpath #[KMGTE]

    让文件系统缩减至指定大小

        lvreduce -L [-]#[KMGTE] lvpath

    让逻辑卷大小缩减: # 缩减后的具体大小. -# 原来的大小减去由#指定的值即为缩减后的值

        mount lvpath MOUNT_POINT

        df -lh

    删除: lvremove lvpath

    快照:lvcreate -L #[KMGTE] -s -n lv_snap_NAME -p r lvpath

    -s 指定原卷

    -p r 指明快照卷的权限,r:只读.rw:可读可写.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    

***查看当前系统的版本** # cat /etc/centos-release

[root@localhost ~]# cat /etc/centos-release 
CentOS release 6.9 (Final)


使用LVM2的准备:分区ID为82

[root@localhost ~]# fdisk /dev/sdc
/dev/sdc1               1        6527    52428096    5  Extended
/dev/sdc5               1        1306    10490382   8e  Linux LVM
/dev/sdc6            1307        3265    15735636   8e  Linux LVM
/dev/sdc7            3266        5877    20980858+  8e  Linux LVM

1、物理卷管理

  1)创建物理卷

[root@localhost ~]# pvcreate /dev/sdc{5,6,7}
  Physical volume "/dev/sdc5" successfully created
  Physical volume "/dev/sdc6" successfully created
  Physical volume "/dev/sdc7" successfully created

 2)显示Pv

1/显示所有PV的简要描述信息
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sda2  myvg lvm2 a--u 97.65g 17.57g
  /dev/sdc5       lvm2 ---- 10.00g 10.00g
  /dev/sdc6       lvm2 ---- 15.01g 15.01g
  /dev/sdc7       lvm2 ---- 20.01g 20.01g
[root@localhost ~]# 
2/显示所有PV的详细属性信息
[root@localhost ~]# pvdisplay 
3/显示指定PV的详细属性信息
[root@localhost ~]# pvdisplay /dev/sdc5
  "/dev/sdc5" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc5   ## 
  VG Name                           ## 
  PV Size               10.00 GiB   ## 
  Allocatable           NO          ## NO当前查看的PE没有加入至卷组中,不能分配其中的PE。YES 表示当前查看的PVNAME已经加入至VG中,且可分配其中的PE。
  PE Size               0           ## 
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               aIUY10-QgvL-D2lt-f3J9-3tPb-PXpr-P3bqvP  
   
[root@localhost ~]#

 

  3)移除物理卷

[root@localhost ~]# pvremove /dev/sdc{5,6,7}
  Labels on physical volume "/dev/sdc5" successfully wiped
  Labels on physical volume "/dev/sdc6" successfully wiped
  Labels on physical volume "/dev/sdc7" successfully wiped
[root@localhost ~]#


2、卷组管理

   1)创建: vgcreate VGNAME [<partition/raid/disk>]...

1、查看已有的VG的名字,避免新建立的VG名会和原有VG名冲突
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   1   5   0 wz--n- 97.65g 17.57g
2、创建VG,名为VG0
[root@localhost ~]# vgcreate vg0 /dev/sdc{5,6,7}
  Volume group "vg0" successfully created
[root@localhost ~]# 
3、查看是否创建成功
[root@localhost ~]# vgs


 2)显示: vgs,vgdisplay

1、简要信息
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   1   5   0 wz--n- 97.65g 17.57g
  vg0    3   0   0 wz--n- 45.01g 45.01g  ## 组合pv所有的空间
[root@localhost ~]# 
2、所有信息
[root@localhost ~]# vgdisplay 
3、指定vg信息显示
[root@localhost ~]# vgdisplay vg0
  --- Volume group ---
  VG Name               vg0
  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               45.01 GiB
  PE Size               4.00 MiB             ## 默认PE大小
  Total PE              11523                ## 总PE个数
  Alloc PE / Size       0 / 0   
  Free  PE / Size       11523 / 45.01 GiB    ## 空闲PE数
  VG UUID               HNyUPI-MsLO-od5j-JBFx-is6S-u9Dl-HiOWr1
   
[root@localhost ~]# 

****注意创建PE后,显示PV的详细属性信息中才会有PE相关的信息****
[root@localhost ~]# pvdisplay /dev/sdc5
  --- Physical volume ---
  PV Name               /dev/sdc5
  VG Name               vg0                                  ## 加入至vg0组中
  PV Size               10.00 GiB / not usable 4.51 MiB      ## 10G大小
  Allocatable           yes                  ## 表示当前查看的/dev/sdc5已经加入至vg0中,且可分配其中的PE。
  PE Size               4.00 MiB             ## 默认PE大小
  Total PE              2560
  Free PE               2560
  Allocated PE          0
  PV UUID               aIUY10-QgvL-D2lt-f3J9-3tPb-PXpr-P3bqvP
   
[root@localhost ~]#


   3) 扩展: vgextend VGNAME [<partition/raid/disk>]

1、查看vg0大小
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   1   5   0 wz--n- 97.65g 17.57g
  vg0    3   0   0 wz--n- 45.01g 45.01g  ## 45G

  2、准备空闲pv
[root@localhost ~]# pvcreate /dev/sdc8
  Physical volume "/dev/sdc8" successfully created
3、扩展
[root@localhost ~]# vgextend vg0 /dev/sdc8
  Volume group "vg0" successfully extended
  
4、查看vg0大小
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   1   5   0 wz--n- 97.65g 17.57g
  vg0    4   0   0 wz--n- 49.99g 49.99g  ## 49.99G


   4) 缩减:vgreduce VGNAME [<partition/raid/disk>]

1、查看vg0大小
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   1   5   0 wz--n- 97.65g 17.57g
  vg0    4   0   0 wz--n- 49.99g 49.99g  ## 49.99G
 
2、将要移除的pv中的数据移动至其他pv上
[root@localhost ~]# pvmove /dev/sdc8
  No data to move for vg0
[root@localhost ~]# 

3、缩减
[root@localhost ~]# vgreduce vg0 /dev/sdc8
  Removed "/dev/sdc8" from volume group "vg0"
  
4、查看大小
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   1   5   0 wz--n- 97.65g 17.57g
  vg0    3   0   0 wz--n- 45.01g 45.01g  ##45G
[root@localhost ~]#


    5)删除:vgremove VGNAME [<partition/raid/disk>]

1、查看vg0的空间
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   1   5   0 wz--n- 97.65g 17.57g
  vg0    3   0   0 wz--n- 45.01g 45.01g

2、移除vg
[root@localhost ~]# vgremove vg0
  Volume group "vg0" successfully removed

3、查看vg的简要信息
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   1   5   0 wz--n- 97.65g 17.57g



3、逻辑卷管理

    创建: lvcreate -L #[KMGTE] -n LVNAME VGNAME

1)、查看lv名字,避免创建的名字与之冲突
[root@localhost ~]# lvs
  LV      VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_home myvg -wi-ao----  4.88g                                                    
  lv_root myvg -wi-ao---- 48.83g                                                    
  lv_swap myvg -wi-ao----  1.95g                                                    
  lv_usr  myvg -wi-ao---- 14.65g                                                    
  lv_var  myvg -wi-ao----  9.77g             
2)、查看vg的空闲空间的大小,确认可以分配给LV的空间
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   1   5   0 wz--n- 97.65g 17.57g
  vg0    3   0   0 wz--n- 45.01g 45.01g  ## 空闲45G
3)、创建lv
[root@localhost ~]# lvcreate -L 10G -n mylv vg0
  Logical volume "mylv" created.
  
4)、查看创建的lv
[root@localhost ~]# lvs
  LV      VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_home myvg -wi-ao----  4.88g                                                    
  lv_root myvg -wi-ao---- 48.83g                                                    
  lv_swap myvg -wi-ao----  1.95g                                                    
  lv_usr  myvg -wi-ao---- 14.65g                                                    
  lv_var  myvg -wi-ao----  9.77g                                                    
  mylv    vg0  -wi-a----- 10.00g      ## 空闲10G


 显示: lvs ,lvdisplay

1、显示lv简要信息
[root@localhost ~]# lvs
  LV      VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_home myvg -wi-ao----  4.88g                                                    
  lv_root myvg -wi-ao---- 48.83g                                                    
  lv_swap myvg -wi-ao----  1.95g                                                    
  lv_usr  myvg -wi-ao---- 14.65g                                                    
  lv_var  myvg -wi-ao----  9.77g                                                    
  mylv    vg0  -wi-a----- 10.00g                                                    

2、显示某个lv的详细信息
[root@localhost ~]# lvdisplay /dev/mapper/vg0-mylv
  --- Logical volume ---
  LV Path                /dev/vg0/mylv   ##lvpath
  LV Name                mylv            
  VG Name                vg0
  LV UUID                faTCWz-2P0e-qy9q-pk8T-mdAL-HycR-4T9lQF
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2017-08-12 17:30:42 +0800
  LV Status              available
  # open                 0
  LV Size                10.00 GiB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:5
   
[root@localhost ~]#

    扩展: 

1、格式化,挂载
2、查看文件系统可用空间
3、复制文件至LV中,并查看文件
4、扩展
5、查看文件系统可用空间
6、查看文件,验证文件是否损坏

1、格式化,挂载
1)、格式化
[root@localhost ~]# mke2fs -t ext4 -b 1024 -L 'Spring' -m 3 /dev/vg0/mylv
2)、挂载
[root@localhost ~]# install -d /Spring_dir
[root@localhost ~]# mount -L Spring /Spring_dir
3)、验证挂载
[root@localhost ~]# ls -l /Spring_dir
总用量 12
drwx------ 2 root root 12288 8月  12 17:37 lost+found
[root@localhost ~]# mount | fgrep pring
/dev/mapper/vg0-mylv on /Spring_dir type ext4 (rw)
2、查看文件系统可用空间
[root@localhost ~]# df -lhP
Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/myvg-lv_root   48G  520M   45G   2% /
tmpfs                     122M     0  122M   0% /dev/shm
/dev/sda1                 477M   33M  419M   8% /boot
/dev/mapper/myvg-lv_home  4.7G  9.9M  4.5G   1% /home
/dev/mapper/myvg-lv_usr    15G  710M   13G   6% /usr
/dev/mapper/myvg-lv_var   9.5G   88M  9.0G   1% /var
/dev/md127                9.3G   23M  9.0G   1% /backup               ## 与上次md设备名变化了,故而需要以LABE或UUID方式进行挂载
/dev/md126                9.8G   23M  9.3G   1% /mydata
/dev/mapper/vg0-mylv      9.9G  3.8M  9.6G   1% /Spring_dir           ## 可用9.9

3、复制文件至LV中,并查看文件
[root@localhost ~]# cp /etc/{fstab,issue} /Spring_dir/
[root@localhost ~]# cat /Spring_dir/{fstab,issue}

4、扩展
[root@localhost ~]# lvextend -L +5G /dev/mapper/vg0-mylv
[root@localhost ~]# resize2fs /dev/vg0/mylv
5、查看文件系统可用空间
[root@localhost ~]# df -lhP
Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/vg0-mylv       15G  3.5M   15G   1% /Spring_dir          ##可用15G

6、查看文件,验证文件是否损坏
[root@localhost ~]# cat /Spring_dir/{fstab,issue}


    缩减:    

1、卸载
2、检测
3、缩减文件系统空间
4、缩减LV空间
5、挂载
6、查看文件系统可用空间
7、查看文件是否损坏

1、卸载
[root@localhost ~]# umount /Spring_dir/
2、检测
[root@localhost ~]# e2fsck -f /dev/vg0/mylv
3、缩减文件系统空间
[root@localhost ~]# resize2fs /dev/vg0/mylv 1G
4、缩减LV空间
[root@localhost ~]# lvreduce -L 5G /dev/mapper/vg0-mylv 
Do you really want to reduce vg0/mylv? [y/n]: y
5、挂载
[root@localhost ~]# mount /dev/mapper/vg0-mylv /Spring_dir/
6、查看文件系统可用空间
[root@localhost ~]# df -lhP
Filesystem                Size  Used Avail Use% Mounted on
/dev/md127                9.3G   23M  9.0G   1% /backup
/dev/md126                9.8G   23M  9.3G   1% /mydata
/dev/mapper/vg0-mylv      976M  2.8M  943M   1% /Spring_dir

7、查看文件是否损坏 
[root@localhost ~]# cat /Spring_dir/{fstab,issue}

#
# /etc/fstab
# Created by anaconda on Thu Aug  3 08:30:25 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
...


     快照:lvcreate -L #[KMGTE] -s -n lv_snap_NAME -p r lvpath

1.查看原卷大小
  LV      VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_home myvg -wi-ao----  4.88g                                                    
  lv_root myvg -wi-ao---- 48.83g                                                    
  lv_swap myvg -wi-ao----  1.95g                                                    
  lv_usr  myvg -wi-ao---- 14.65g                                                    
  lv_var  myvg -wi-ao----  9.77g                                                    
  mylv    vg0  -wi-ao----  5.00g     
2、创建快照卷
[root@localhost ~]# lvcreate -L 200M -s -n lv_snap -p r /dev/vg0/mylv
  Logical volume "mylv_snap" created.
[root@localhost ~]# 

4、挂载快照卷
[root@localhost ~]# mount /dev/vg0/lv_snap /mnt

5、显示内容 
[root@localhost ~]# ls /mnt
fstab  issue  lost+found

6、显示快照卷的可用空间
[root@localhost ~]# df -lPh
Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/vg0-mylv      976M  2.8M  943M   1% /Spring_dir
/dev/mapper/vg0-lv_snap   976M  2.8M  943M   1% /mnt  ## 同原卷大小,与快照卷是指向原卷Inode的另一个路径不谋而合。

7、查看原卷和快照卷的内容
[root@localhost ~]# cat /mnt/fstab /Spring_dir/fstab 
相同

8、在原卷中增加内容
[root@localhost ~]# cp -r /etc/pam.d /Spring_dir/   ## 源为单个目录,用-r选项。目标存在为目录。复制,原名。

9、查看快照卷是否也有此目录?
[root@localhost ~]# ls -l /mnt
总用量 15
-rw-r--r-- 1 root root  1211 8月  12 18:09 fstab
-rw-r--r-- 1 root root    47 8月  12 17:39 issue
drwx------ 2 root root 12288 8月  12 17:37 lost+found

10、在原卷中,删除所有文件
[root@localhost ~]# rm -rf /Spring_dir/*

11、快照卷中的文件:仍然存在
[root@localhost ~]# ls -l /mnt
总用量 15
-rw-r--r-- 1 root root  1211 8月  12 18:09 fstab
-rw-r--r-- 1 root root    47 8月  12 17:39 issue
drwx------ 2 root root 12288 8月  12 17:37 lost+found

12、备份快照卷至/Spring_dir
[root@localhost ~]# cp -a /mnt/* /Spring_dir/
[root@localhost ~]# ls /Spring_dir/
fstab  issue  lost+found


  删除: lvremove lvpath

13、卸载
[root@localhost ~]# umount /mnt
14、删除卷
[root@localhost ~]# lvremove /dev/vg0/lv_snap 
Do you really want to remove active logical volume lv_snap? [y/n]: y
  Logical volume "lv_snap" successfully removed