一、LVM概念

LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。

二、LVM术语

PV(Physical Volume)- 物理卷
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘。
VG(Volumne Group)-卷组
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
LV(Logical Volume)- 逻辑卷
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组

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

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

如下图所示PV、VG、LV三者关系:

三、常用命令
PV:Physical(物理卷)

pvcreate、pvs 、pvdisplay 、pvremove、pvmove、pvscan

VG:Volume Group(卷组)

vgcreate、vgs、vgdisplay、vgremove、vgrename、vgreduce、vgextent、vgscan

LV:logical Volume(逻辑卷)

lvcreate、lvs、lvdisplay、lvremove、lvextend、lvresize、lvscan、lvrename

四、环境准备

1、虚拟机新增两块磁盘

ESXI线添加虚拟磁盘,fdisk -l没发现,一般情况下重启服务器就可以。但是不能影响业务,为什么新增磁盘或磁盘扩容后,Linux系统识别不到呢?因为连接存储设备的SCSI总线需要重新扫描,才能识别到这些新的存储设备

  1. [root@Node1 ~]# ls /sys/class/scsi_host/ //确定主机总线SCSI总线号
  2. host0 host1 host2
  3. [root@Node1 ~]# echo "- - -" > /sys/class/scsi_host/host0/scan //重新扫描 SCSI总线添加磁盘
  4. [root@Node1 ~]# echo "- - -" > /sys/class/scsi_host/host1/scan
  5. [root@Node1 ~]# echo "- - -" > /sys/class/scsi_host/host2/scan
  6. [root@Node1 ~]# fdisk -l | grep "^Disk /dev" //检查硬盘是否在线
  7. Disk /dev/sda: 53.7 GB, bytes, sectors
  8. Disk /dev/sdb: 21.5 GB, bytes, sectors
  9. Disk /dev/sdc: 32.2 GB, bytes, sectors
  10. [root@Node1 ~]#

2、用fidsk分别对/dev/sdb与/dev/sdc进行分区

  1. [root@Node1 ~]# fdisk /dev/sdb //对/dev/sdb进行分区
  2. Welcome to fdisk (util-linux 2.23.)
  3.  
  4. Changes will remain in memory only, until you decide to write them.
  5. Be careful before using the write command.
  6.  
  7. Device does not contain a recognized partition table
  8. Building a new DOS disklabel with disk identifier 0xafcc8a41.
  9.  
  10. Command (m for help): n
  11. Partition type:
  12. p primary ( primary, extended, free)
  13. e extended
  14. Select (default p): p //主分区
  15. Partition number (-, default ):
  16. First sector (-, default ):
  17. Using default value
  18. Last sector, +sectors or +size{K,M,G} (-, default ): +10G
  19. Partition of type Linux and of size GiB is set
  20.  
  21. Command (m for help): t
  22. Selected partition
  23. Hex code (type L to list all codes): 8e
  24. Changed type of partition 'Linux' to 'Linux LVM'
  25.  
  26. Command (m for help): n
  27. Partition type:
  28. p primary ( primary, extended, free)
  29. e extended
  30. Select (default p): p
  31. Partition number (-, default ):
  32. First sector (-, default ):
  33. Using default value
  34. Last sector, +sectors or +size{K,M,G} (-, default ):
  35. Using default value
  36. Partition of type Linux and of size GiB is set
  37.  
  38. Command (m for help): t
  39. Partition number (,, default ):
  40. Hex code (type L to list all codes): 8e
  41. Changed type of partition 'Linux' to 'Linux LVM'
  42.  
  43. Command (m for help): w
  44. The partition table has been altered!
  45.  
  46. Calling ioctl() to re-read partition table.
  47. Syncing disks.

3、partprobe让内核重新识别分区表

  1. [root@Node1 ~]#partprobe /dev/sd{b,c}
  2. [root@Node1 ~]# partx -a /dev/sdc
    [root@Node1 ~]# partx -s /dev/sdc
  3. [root@Node1 ~]# cat /proc/partitions //查看分区信息表
  4. major minor #blocks name
  5.  
  6. sda
  7. sda1
  8. sda2
  9. sda3
  10. sda4
  11. sda5
  12. sda6
  13. sda7
  14. sdb
  15. sdb1
  16. sdb2
  17. sdc
  18. sdc1
  19. sdc5
  20. sdc6
  21. sr0
  22. [root@Node1 ~]# ls /dev/sdb* //查看/dev/sdb分区情况
  23. /dev/sdb /dev/sdb1 /dev/sdb2
  24. [root@Node1 ~]# ls /dev/sdc* //查看/dev/sdc分区情况
  25. /dev/sdc /dev/sdc1 /dev/sdc5 /dev/sdc6

4、验证磁盘分区结果

  1. [root@Node1 ~]# fdisk -l | grep "LVM$"
  2. /dev/sdb1 8e Linux LVM
  3. /dev/sdb2 8e Linux LVM
  4. /dev/sdc5 8e Linux LVM
  5. /dev/sdc6 8e Linux LVM

四、LVM常用操作命令

1、安装LVM

  1. [root@Node1 ~]# cat /etc/system-release //查看系统版本
  2. CentOS Linux release 7.6. (Core)
  3. [root@Node1 ~]# yum -y install lvm2 //安装LVM包
  4. [root@Node1 ~]# rpm -qa | grep lvm
  5. llvm-private-6.0.-.el7.x86_64
  6. lvm2-2.02.-.el7_6..x86_64
  7. lvm2-libs-2.02.-.el7_6..x86_64

2、PV物理卷常用操作
       
pvcreate /dev/DEVICE: 创建PV
        pvs:简要PV信息显示
        pvdisplay:显示PV的详细信息
        pvremove  /dev/DEVICE: 移除PV
        pvscan: 扫描系统中连接的所有硬盘,列出找到的物理卷列表

  1. [root@Node1 ~]# pvcreate /dev/sdb{,} //创建2个物理卷pv
  2. Physical volume "/dev/sdb1" successfully created.
  3. Physical volume "/dev/sdb2" successfully created.
  4. [root@Node1 ~]# pvs //查看物理卷摘要信息
  5. PV VG Fmt Attr PSize PFree
  6. /dev/sdb1 lvm2 --- .00g .00g
  7. /dev/sdb2 lvm2 --- <.00g <.00g
  8. [root@Node1 ~]# pvscan //搜索已存在的物理卷
  9. PV /dev/sdb2 lvm2 [<10.00 GiB]
  10. PV /dev/sdb1 lvm2 [10.00 GiB]
  11. Total: [<20.00 GiB] / in use: [ ] / in no VG: [<20.00 GiB]
  12. [root@Node1 ~]# pvremove /dev/sdb2 //移除/dev/sdb2
  13. Labels on physical volume "/dev/sdb2" successfully wiped.
  14. [root@Node1 ~]# pvdisplay /dev/sdb1 //显示详细的物理卷信息
  15. "/dev/sdb1" is a new physical volume of "10.00 GiB"
  16. --- NEW Physical volume ---
  17. PV Name /dev/sdb1
  18. VG Name
  19. PV Size 10.00 GiB
  20. Allocatable NO
  21. PE Size
  22. Total PE
  23. Free PE
  24. Allocated PE
  25. PV UUID k6YMJN-BfTI-DL8G-qjEr-onjT-CmDK-IzC9vB
    [root@Node1 ~]# pvcreate /dev/sdb2 // 将/dev/sdb2加入物理卷
      Physical volume "/dev/sdb2" successfully created.
    [root@Node1 ~]# pvs -o +pv_uuid
      PV         VG     Fmt  Attr PSize   PFree   PV UUID                               
      /dev/sdb1  datavg lvm2 a--  <10.00g <10.00g GX3Clm-pGDv-4xtw-VIr3-x00m-vIlD-zPOooJ
      /dev/sdb2  datavg lvm2 a--  <10.00g <10.00g zuMtAt-6S6z-3vDa-xnj2-WADw-hk0s-H9V1Wi
      /dev/sdc5  datavg lvm2 a--  <10.00g <10.00g orxgvl-GKbn-LMN0-YOUY-mIGA-TqJp-g1V8iv
    [root@Node1 ~]# pvs -v

3、VG常用操作
        vgcreate /dev/DEVICE: 创建VG卷组
        vgs: 简要VG信息显示
        vgextend:动态扩展LVM卷组,它通过向卷组中添加物理卷来增加卷组的容量
        vgreduce:通过删除LVM卷组中的物理卷来减少卷组容量,不能删除LVM卷组中剩余的最后一个物理卷
        vgdisplay:显示VG的详细信息
        vgscan:查找系统中存在的LVM卷组,并显示找到的卷组列表
        vgremove:删除卷组,其上的逻辑卷必须处于离线状态

  1. [root@Node1 ~]# vgcreate datavg /dev/sdb{,} //创建datavg卷组
  2. Volume group "datavg" successfully created
  3. [root@Node1 ~]# vgdisplay datavg //显示datavg详细信息,也可以使用vgdisplay -vv或vgdisplay -vvv命令 --- Volume group ---
  4. VG Name datavg
  5. System ID
  6. Format lvm2
  7. Metadata Areas
  8. Metadata Sequence No
  9. VG Access read/write
  10. VG Status resizable
  11. MAX LV
  12. Cur LV
  13. Open LV
  14. Max PV
  15. Cur PV
  16. Act PV
  17. VG Size 19.99 GiB
  18. PE Size 4.00 MiB
  19. Total PE
  20. Alloc PE / Size /
  21. Free PE / Size / 19.99 GiB
  22. VG UUID thDWMH-ZXq6-zJP5-LtTn-xmQh-OpG5-b3qrUu
  23.  
  24. [root@Node1 ~]# vgs //显示VG的简要信息
  25. VG #PV #LV #SN Attr VSize VFree
  26. datavg wz--n- .99g .99g
  27. [root@Node1 ~]# vgextend datavg /dev/sdc5 //向datavg卷组中添加物理卷
  28. Physical volume "/dev/sdc5" successfully created.
  29. Volume group "datavg" successfully extended
  30. [root@Node1 ~]# pvs
  31. PV VG Fmt Attr PSize PFree
  32. /dev/sdb1 datavg lvm2 a-- <.00g <.00g
  33. /dev/sdb2 datavg lvm2 a-- <.00g <.00g
  34. /dev/sdc5 datavg lvm2 a-- <1.00g <.00g
  35. [root@Node1 ~]# vgs
  36. VG #PV #LV #SN Attr VSize VFree
  37. datavg wz--n- <.99g <.99g
  38. [root@Node1 ~]# vgreduce datavg /dev/sdc5 //从datavg卷组中移除物理卷
  39. Removed "/dev/sdc5" from volume group "datavg"
  40. [root@Node1 ~]# vgs
  41. VG #PV #LV #SN Attr VSize VFree
  42. datavg wz--n- .99g .99g
  43. [root@Node1 ~]# pvs
  44. PV VG Fmt Attr PSize PFree
  45. /dev/sdb1 datavg lvm2 a-- <.00g <.00g
  46. /dev/sdb2 datavg lvm2 a-- <.00g <.00g
  47. /dev/sdc5 lvm2 --- .00g .00g
  48. [root@Node1 ~]# vgremove datavg //移除datavg
  49. Volume group "datavg" successfully removed.
  50. [root@Node1 ~]# vgs
  51. [root@Node1 ~]# vgcreate datavg /dev/sdb{,}
  52. Volume group "datavg" successfully created
  53. [root@Node1 ~]# vgdisplay datavg
  54. --- Volume group ---
  55. VG Name datavg
  56. System ID
  57. Format lvm2
  58. Metadata Areas
  59. Metadata Sequence No
  60. VG Access read/write
  61. VG Status resizable
  62. MAX LV
  63. Cur LV
  64. Open LV
  65. Max PV
  66. Cur PV
  67. Act PV
  68. VG Size 19.99 GiB
  69. PE Size 4.00 MiB
  70. Total PE
  71. Alloc PE / Size /
  72. Free PE / Size / 19.99 GiB
  73. VG UUID T8c1W9-xpJF-vvnS-bm5y-gqmY-5RBK-wRkD9Y
  74.  
  75. [root@Node1 ~]# vgs
  76. VG #PV #LV #SN Attr VSize VFree
  77. datavg wz--n- .99g .99g
  78. [root@Node1 ~]# vgextend datavg /dev/sdc5
  79. Volume group "datavg" successfully extended
  80. [root@Node1 ~]# vgs
  81. VG #PV #LV #SN Attr VSize VFree
  82. datavg wz--n- <.99g <.99g
  83. [root@Node1 ~]# pvs
  84. PV VG Fmt Attr PSize PFree
  85. /dev/sdb1 datavg lvm2 a-- <.00g <.00g
  86. /dev/sdb2 datavg lvm2 a-- <.00g <.00g
  87. /dev/sdc5 datavg lvm2 a-- <1.00g <1.00g
    [root@Node1 ~]# pvscan //扫描系统中连接的所有硬盘,列出找到的物理卷列表
      PV /dev/sdb1   VG datavg          lvm2 [<10.00 GiB / <10.00 GiB free]
      PV /dev/sdb2   VG datavg          lvm2 [<10.00 GiB / <10.00 GiB free]
      PV /dev/sdc5   VG datavg          lvm2 [<10.00 GiB / <10.00 GiB free]
      Total: 3 [<29.99 GiB] / in use: 3 [<29.99 GiB] / in no VG: 0 [0   ]
    [root@Node1 ~]# vgscan //显示系统中所有卷组
      Reading volume groups from cache.
      Found volume group "datavg" using metadata type lvm2
    [root@Node1 ~]# vgs -o +pv_name
      VG     #PV #LV #SN Attr   VSize   VFree   PV        
      datavg   3   0   0 wz--n- <29.99g <29.99g /dev/sdb1
      datavg   3   0   0 wz--n- <29.99g <29.99g /dev/sdb2
      datavg   3   0   0 wz--n- <29.99g <29.99g /dev/sdc5
    [root@Node1 ~]# vgs -v
      VG     Attr   Ext   #PV #LV #SN VSize   VFree   VG UUID                                VProfile
      datavg wz--n- 4.00m   3   0   0 <29.99g <29.99g 2b9qgs-mCb0-Isc2-Af74-5uWo-Yf8Q-4KOmns 

4、LV常用操作
          lvcreate : 用来创建LVM的逻辑卷
               lvcreate -L #[mMgGtT] -n NAME VolumeGroup
              用法:lvcreate [选项] [参数]
    选项:
       -L:指定大小
       -l:指定大小(LE数)
       -n:指定名称
       -s:创建快照
       -p r:设置为只读(该选项一般用于创建快照中
        lvs : 显示逻辑卷信息
        lvscan:扫描当前系统中的所有逻辑卷,及其对应的设备文件
        lvdisplay:显示逻辑卷属性
        lvextend:可在线扩展逻辑卷空间
        lvreduce:缩减逻辑卷空间,一般离线使用
        lvremove:删除逻辑卷,需要处于离线(卸载)状态

  1. [root@Node1 ~]# lvcreate -L 5G -n datalv datavg //创建datalv逻辑卷
  2. Logical volume "datalv" created.
  3. [root@Node1 ~]# ls /dev/mapper/
  4. control datavg-datalv
  5. [root@Node1 ~]# mkfs.xfs -L Backup /dev/datavg/datalv //格式化逻辑卷
  6. meta-data=/dev/datavg/datalv isize= agcount=, agsize= blks
  7. = sectsz= attr=, projid32bit=
  8. = crc= finobt=, sparse=
  9. data = bsize= blocks=, imaxpct=
  10. = sunit= swidth= blks
  11. naming =version bsize= ascii-ci= ftype=
  12. log =internal log bsize= blocks=, version=
  13. = sectsz= sunit= blks, lazy-count=
  14. realtime =none extsz= blocks=, rtextents=
  15. [root@Node1 ~]# mkdir /dbbackup
  16. [root@Node1 ~]# mount /dev/mapper/datavg-datalv /dbbackup/ //挂载至/dbbackup目录
  17. [root@Node1 ~]# df -hT | grep datalv //查询datalv的挂载情况
  18. /dev/mapper/datavg-datalv xfs 5G 33M 5G % /dbbackup
  19. [root@Node1 ~]# lvs //显示逻辑卷信息
  20. LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
  21. datalv datavg -wi-ao---- .00g
  22. [root@Node1 ~]# lvscan //扫描系统中的逻辑卷
  23. ACTIVE '/dev/datavg/datalv' [5.00 GiB] inherit
  24. [root@Node1 ~]# lvdisplay //显示逻辑卷详细信息
  25. --- Logical volume ---
  26. LV Path /dev/datavg/datalv
  27. LV Name datalv
  28. VG Name datavg
  29. LV UUID Y1P5zJ-Wy1Q-kERv-VUtC-4vAm-NsMb-3aCy1y
  30. LV Write Access read/write
  31. LV Creation host, time Node1.contoso.com, -- :: +
  32. LV Status available
  33. # open
  34. LV Size 5.00 GiB
  35. Current LE
  36. Segments
  37. Allocation inherit
  38. Read ahead sectors auto
  39. - currently set to
  40. Block device :0
    [root@Node1 ~]# lvcreate -L 3G -n weblv datavg //创建weblv逻辑卷
    [root@Node1 ~]# mkfs.ext4 -L webapp /dev/datavg/weblv
    [root@Node1 ~]# mkdir /webapp
    [root@Node1 ~]# mount /dev/mapper/datavg-weblv /webapp/
    [root@Node1 ~]# df -hT | grep mapper
    /dev/mapper/datavg-datalv xfs        5G   33M   5G   1% /dbbackup
    /dev/mapper/datavg-weblv  ext4      2.9G  9.0M  2.8G   1% /webapp
    [root@Node1 ~]# lvs
      LV     VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      datalv datavg -wi-ao---- 5.00g                                                    
      weblv  datavg -wi-ao----  3.00g                                                    
    [root@Node1 ~]# lvscan
      ACTIVE            '/dev/datavg/datalv' [5.00 GiB] inherit
      ACTIVE            '/dev/datavg/weblv' [3.00 GiB] inherit

5、LVM逻辑卷的扩充与缩小

lvextend:扩展逻辑卷空间
             lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
       lvreduce:缩减逻辑卷空间
          缩减逻辑卷:
            1、先确定缩减后的目标大小;并确保对应的目标逻辑卷大小中有足够的空间可容纳原有所有数据;
            2、先卸载文件系统,并要执行强制检测  e2fsck -f
            3、缩减逻辑边界 resize2fs DEVICE
            4、缩减物理边界 lvreduce
            5、新挂载 mount
        PS:缩减很危险,要离线操作

lvresize:扩展或缩小逻辑卷空间
       resize2fs: 针对的是ext2、ext3、ext4文件系统
                      调整ext2\ext3\ext4文件系统的大小,它可以放大或者缩小没有挂载的文件系统的大小。如果文件系统已经挂载,它可以扩大文件系统的大小,前提是内核支持在线调整大小。
       xfs_growfs: 针对的是xfs文件系统

1)ext2/ext3/ext4文件系统的调整命令是resize2fs(增大和减小都支持)

  1. [root@Node1 ~]# lvextend -L 5G /dev/mapper/datavg-weblv //增大至5G
  2. [root@Node1 ~]# lvextend -L +2G /dev/mapper/datavg-weblv //增加2G
  3. [root@Node1 ~]# resize2fs /dev/mapper/datavg-weblv //调整逻辑大小
  4. [root@Node1 ~]# df -hT | grep weblv //由3G增大至5,又增加2G,目前7G
  5. /dev/mapper/datavg-weblv ext4 .9G 14M .5G % /webapp
  6. [root@Node1 webapp]# cp /etc/fstab . //复制fstab命令至当前目录
  7. [root@Node1 webapp]# ls
  8. fstab lost+found
  9. [root@Node1 ~]# umount -f /dev/mapper/datavg-weblv //卸载/dev/mapper/datavg-weblv逻辑卷
  10. [root@Node1 ~]# e2fsck -f /dev/datavg/weblv //检查ext2、ext3、ext4文件系统,如果系统已经挂载了,那么不建议去检查,因为这样是不安全的
  11. e2fsck 1.42. (-Dec-)
  12. Pass : Checking inodes, blocks, and sizes
  13. Pass : Checking directory structure
  14. Pass : Checking directory connectivity
  15. Pass : Checking reference counts
  16. Pass : Checking group summary information
  17. webapp: / files (0.0% non-contiguous), / blocks
  18. [root@Node1 ~]# resize2fs /dev/datavg/weblv 5G //调整至5G空间大小的逻辑卷
  19. resize2fs 1.42. (-Dec-)
  20. Resizing the filesystem on /dev/datavg/weblv to (4k) blocks.
  21. The filesystem on /dev/datavg/weblv is now blocks long.
  22.  
  23. [root@Node1 ~]# lvreduce -L 5G /dev/datavg/weblv //缩减至5G空间大小的逻辑卷
  24. WARNING: Reducing active logical volume to 5.00 GiB.
  25. THIS MAY DESTROY YOUR DATA (filesystem etc.)
  26. Do you really want to reduce datavg/weblv? [y/n]: y
  27. Size of logical volume datavg/weblv changed from 7.00 GiB ( extents) to 5.00 GiB ( extents).
  28. Logical volume datavg/weblv successfully resized.
  29. [root@Node1 ~]# mount /dev/mapper/datavg-weblv /webapp/ //重新挂载
  30. [root@Node1 ~]# df -hT | grep weblv/dev/mapper/datavg-weblv ext4 .9G 12M .7G % /webapp
  31. [root@Node1 ~]# ls /webapp/ //查看fstab文件还在
  32. fstab lost+found

2)xfs文件系统的调整命令是xfs_growfs(只支持增大)

  1. [root@Node1 ~]# lvextend -L 8G /dev/mapper/datavg-datalv //增大至8G
  2. [root@Node1 ~]# lvextend -L +2G /dev/mapper/datavg-datalv //增加2G
  3. [root@Node1 ~]# xfs_growfs /dev/mapper/datavg-datalv //扩容xfs逻辑卷
  4. [root@Node1 ~]# vgs
  5. VG #PV #LV #SN Attr VSize VFree
  6. datavg wz--n- <.99g <.99g
  7. [root@Node1 ~]# lvs
  8. LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
  9. datalv datavg -wi-ao---- .00g
  10. weblv datavg -wi-ao---- .00g
  11. [root@Node1 ~]# lvscan
  12. ACTIVE '/dev/datavg/datalv' [15.00 GiB] inherit
  13. ACTIVE '/dev/datavg/weblv' [5.00 GiB] inherit
  14.  
  15. PS:xfs文件系统只支持增大分区空间的情况,不支持减小的情况,硬要减小的话,只能在减小后将逻辑分区重新通过mkfs.xfs命令重新格式化才能挂载上,这样的话这个逻辑分区上原来的数据就丢失了

6、逻辑卷快照
 snapshot是像照相一样将当前的系统信息保存下来。
当创建一个snapshot的时候,仅拷贝原始卷里数据的元数据(meta-data)。创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里,因此这个原理的实现叫做写时复制(copy-on-write)。
在写操作写入块之前,原始数据被移动到 snapshot空间里,这样就保证了所有的数据在snapshot创建时保持一致。而对于snapshot的读操作,如果是没有修改过的块,那么会将读操作直接重定向到原始卷上,如果是已经修改过的块,那么就读取拷贝到snapshot中的块。
     注:创建快照前需将针对的逻辑卷临时改为只读,创建完毕后再改为读写,例如
     - 创建快照前:mount -o remount,ro /dev/datavg/weblv /webapp
     - 创建快照后:mount -o remount,rw /dev/datavg/weblv /webapp

  1. [root@Node1 webapp]# df -h | grep datavg
  2. /dev/mapper/datavg-weblv .9G 13M .7G % /webapp
  3. /dev/mapper/datavg-datalv 15G 33M 15G % /dbbackup
  4. [root@Node1 ~]# cd /webapp/
  5. [root@Node1 webapp]# cp /etc/passwd /etc/fstab /etc/redhat-release . //复制一些文件到当前目录
  6. [root@Node1 webapp]# ls
  7. fstab lost+found passwd redhat-release
  8. [root@Node1 webapp]# mount -o remount,ro /dev/datavg/weblv /webap //先改成只读挂载
  9. [root@Node1 webapp]# lvcreate -s -L 2G -n weblvsnap -p r /dev/datavg/weblv //对weblv做快照为weblvsnap 大小为2G,设为只读
  10. Logical volume "weblvsnap" created.
  11. [root@Node1 webapp]# mount -o remount,rw /dev/datavg/weblv /webapp //快照完,改为读写挂载
  12. [root@Node1 webapp]# mdir /mnt/web
  13. [root@Node1 webapp]# mount /dev/datavg/weblvsnap /mnt/web/ //挂载快照
  14. mount: /dev/mapper/datavg-weblvsnap is write-protected, mounting read-only
  15. [root@Node1 webapp]# df -hT | grep weblv
  16. /dev/mapper/datavg-weblv ext4 .9G 13M .7G % /webapp
  17. /dev/mapper/datavg-weblvsnap ext4 .9G 13M .7G % /mnt/web
  18. [root@Node1 webapp]# ls
  19. fstab lost+found passwd redhat-release
  20. [root@Node1 webapp]# rm -rf fstab && echo data > data.txt
  21. [root@Node1 webapp]# ls
  22. data.txt lost+found passwd redhat-release
  23. [root@Node1 webapp]# ls /mnt/web/
  24. fstab lost+found passwd redhat-release
  25. [root@Node1 webapp]# ls
  26. data.txt lost+found passwd redhat-release
  27. [root@Node1 webapp]# ls /mnt/web/
  28. fstab lost+found passwd redhat-release
  29. [root@Node1 webapp]# cd /mnt/web/
  30. [root@Node1 web]# ls
  31. fstab lost+found passwd redhat-release
  32. [root@Node1 web]# rm -rf fstab //挂载为只读模式,无法删除该目录下的文件
  33. rm: cannot remove fstab’: Read-only
  34. [root@Node1 web]# lvs
  35. LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
  36. datalv datavg -wi-ao---- .00g
  37. weblv datavg owi-aos--- .00g
  38. weblvsnap datavg sri-aos--- .00g weblv 0.01
  39. [root@Node1 web]# lvscan
  40. ACTIVE '/dev/datavg/datalv' [15.00 GiB] inherit
  41. ACTIVE Original '/dev/datavg/weblv' [5.00 GiB] inherit
  42. ACTIVE Snapshot '/dev/datavg/weblvsnap' [2.00 GiB] inherit
    [root@Node1 web]# lvdisplay /dev/datavg/weblvsnap
    --- Logical volume ---
    LV Path /dev/datavg/weblvsnap
    LV Name weblvsnap
    VG Name datavg
    LV UUID pf2jl8-21kq-kCKf-PymV-Vqvn-a5nm-q2tp0s
    LV Write Access read only
    LV Creation host, time Node1.contoso.com, 2019-09-19 05:31:23 +0800
    LV snapshot status active destination for weblv
    LV Status available
    # open 1
    LV Size 5.00 GiB
    Current LE 1280
    COW-table size 2.00 GiB
    COW-table LE 512
    Allocated to snapshot 0.01%
    Snapshot chunk size 4.00 KiB
    Segments 1
    Allocation inherit
    Read ahead sectors auto
    - currently set to 8192
    Block device 253:4

7、删除LVM流程
       卸载=>lvremove=>vgremove=>pvremove

  1. [root@Node1 ~]# umount /dev/mapper/datavg-weblvsnap
    [root@Node1 ~]# umount /dev/mapper/datavg-weblv
    [root@Node1 ~]# umount /dev/mapper/datavg-datalv
  2. [root@Node1 ~]# lvremove /dev/mapper/datavg-weblvsnap //删除逻辑卷,需要处于离线(卸载)状态
  3. Do you really want to remove active logical volume datavg/weblvsnap? [y/n]: y
  4. Logical volume "weblvsnap" successfully removed
  5. [root@Node1 ~]# lvs
  6. LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
  7. datalv datavg -wi-ao---- .00g
  8. weblv datavg -wi-ao---- .00g
  9. [root@Node1 ~]# vgremove datavg //删除卷组
  10. Do you really want to remove volume group "datavg" containing logical volumes? [y/n]: y
  11. Do you really want to remove active logical volume datavg/weblv? [y/n]: y
  12. Logical volume "weblv" successfully removed
  13. Volume group "datavg" successfully removed
  14. [root@Node1 ~]# pvremove /dev/sdc5 //移除物理卷
  15. Labels on physical volume "/dev/sdc5" successfully wiped.

五、LVM的优缺点   

优点:
     1. 文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制。
     2. 可以在系统运行的状态下动态的扩展文件系统的大小    
     3. 可以增加新的磁盘到LVM的存储池中。   
     4. 可以以镜像的方式冗余重要的数据到多个物理磁盘。    
     5. 可以方便的导出整个卷组到另外一台机器。
    
     缺点:   
     1. 在从卷组中移除一个磁盘的时候必须使用reducevg命令(这个命令要求root权限,并且不允许在快照卷组中使用)。   
     2. 当卷组中的一个磁盘损坏时,整个卷组都会受到影响。    
     3. 因为加入了额外的操作,存储性能受到影响
     4. 不能减小文件系统大小(受文件系统类型限制)

使用 LVM 将获得更好的可扩展性和可操作性,但却损失了可靠性和存储性能,总的说来就是在这两者间选择。

LVM(逻辑卷管理)的更多相关文章

  1. 18 LVM逻辑卷管理

    根据上一节的内容,我们知道md这个内核模块可以用来做软RAID的管理.同时RAID实现了两个功能:1.提高了磁盘的读写能力:2.对于数据进行了冗余备份: 但是,如果是管理员手动误删的数据,则一样无法找 ...

  2. LVM逻辑卷管理测试——逻辑卷扩展、收缩、快照及删除

    一.逻辑卷扩展 [root@lxjtest /]# umount /testLVM/ [root@lxjtest /]# df -h Filesystem Size Used Avail Use% M ...

  3. LVM逻辑卷管理测试——创建逻辑卷

    虚拟机里再添加两块硬盘,如下所示: 启动系统后,我们可以看到新添加的两块硬盘为/dev/sdb和/dev/sdc.每个2GB. [root@lxjtest ~]# fdisk -l Disk /dev ...

  4. CentOS下LVM逻辑卷管理技术解释

    1.LVM逻辑卷管理技术产生的背景 企业日益变化的存储需要使得传统的磁盘分区存储显得不够灵活 2.磁盘分区存储 对于这样的三个物理分区的话,迟早有一天会被数据填满,因为它是死的,无法进行缩放. 假设下 ...

  5. CentOS LVM逻辑卷管理

    在CentOS 挂载(U盘NTFS格式,新硬盘,增加交换分区,扩展根分区等)中扩展根分区部分用的就是LVM逻辑卷管理来进行扩展的. 1.为什么会有逻辑卷管理 传统磁盘管理是直接对硬盘分区进行访问,你如 ...

  6. linux的存储管理(RALD) LVM 逻辑卷管理 虚拟阵列

    磁盘存储管理 LVM 逻辑卷 虚拟阵列 1.Linux系统中 磁盘使用 存在3个大问题: 1.灵活性 2.安全性 3.性能 2.解决办法RAID独立磁盘冗余阵列 RAID(Redundant Arra ...

  7. 【Linux】LVM 逻辑卷管理

    LVM - 逻辑卷管理 简介 LVM(Logical Volume Manager), 即逻辑卷管理,是Linux环境下对磁盘分区进行管理的一种机制. 相关名词 PV(physical volume) ...

  8. 『学了就忘』Linux文件系统管理 — 65、LVM逻辑卷管理介绍

    目录 1.LVM逻辑卷管理的简介 2.LVM逻辑卷管理的原理 3.总结建立LVM分区的步骤 1.LVM逻辑卷管理的简介 LVM是Logical Volume Manager的简称,中文就是逻辑卷管理. ...

  9. Linux之LVM逻辑卷管理

    LVM逻辑卷管理 LVM机制:PV物理卷,VG卷组,LV逻辑卷. --功能-- --物理卷管理-- --卷组管理-- --逻辑卷管理-- create(建立) pvcreate vgcreate lv ...

  10. LVM逻辑卷管理

    一.LVM简介 LVM(Logic Volume Manager)逻辑卷管理,简单理解就是将一块或多块硬盘的分区在逻辑上集合,当一块大硬盘来使用. 其特点是: 1.可以实现在线动态扩展,也可以缩减 2 ...

随机推荐

  1. Spring Boot之Profile--快速搞定多环境使用与切换

    Spring Profile是Spring3引入的概念,主要用在项目多环境运行的情况下,通过激活方式实现多环境切换,省去多环境切换时配置参数和文件的修改,并且Spring profile提供了多种激活 ...

  2. react中babel的使用

    在开发中经常会使用到es6语法,那么如何能够很好兼容es6写法呢

  3. Gitment评论插件的使用

    前言 继上一篇的 GitPages部署自己的网站 现在开始添加博客的评论插件Gitment.这里的话我是使用hexo添加gitment插件,如果不是使用hexo,请到官网指定这里. 开始 第一步 注册 ...

  4. 【已解决】Https请求—未能创建 SSL/TLS 安全通道

    在做项目的微信推送消息功能时,由于微信并发量大,导致其它第三方接口调用时直接挂掉报错. 问题: 测试工程师做压测,100个线程同时调用微信和XX站的接口,日志报XX站的“请求被中止: 未能创建 SSL ...

  5. RobotFrameWork Web自动化测试环境搭建

    前言 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行.主要用于轮次很多的验收 ...

  6. win10下配置chromedrive。

    0x01:查看自己chrome的版本号 点击chrome右上角菜单栏,帮助,关于Google chrome,在这里,你可以看到自己chrome的版本号. 0x02:下载对应的chrome drive ...

  7. Apache和Apache Tomcat

    Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML.PHP.JSP.Perl等开发过程中,需要准确掌握其各自特点,选择最佳的服务器配置. Apache是web服 ...

  8. 安装VMware Workstation时遇到Microsoft Runtime DLL安装程序未能完成安装

    解决:这时不要点确定.开始菜单运行输入‘%temp%’,在弹出的窗体中找到一个文件名中含‘{XXXXXXXXXXXXX}~setup'的文件夹,打开里面会看到有 xxx.msi的,运行就开始vmwar ...

  9. 水果机抽奖(CocosCreator)

    推荐阅读:  我的CSDN  我的博客园  QQ群:704621321 一.前言       在前面给大家分享了大转盘的抽奖方式,这是现在游戏使用较多的一种抽奖方式,今天给大家介绍另一抽奖方式--水果 ...

  10. unityshader(属性)

    _Color("Color",Color)=(1,1,1,1)//RGBA _Vector("vector",Vector)=(1,2,3,4) //,fixe ...