LVM介绍

  • LVM: Logical Volume Manager 可以允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小,允许在多个物理设备间重新组织文件系统
  • LVM可以弹性的更改LVM的容量:

    1. 通过交换PE来进行资料的转换,将原来LV内的PE转移到其他的设备中以降低LV的容量,或将其他设备中的PE加到LV中以加大容量<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/22154944/1626702564504-adce90a4-2dca-4949-84ab-d39d81838289.png#align=left&display=inline&height=323&margin=%5Bobject%20Object%5D&name=image.png&originHeight=323&originWidth=620&size=60715&status=done&style=none&width=620)

    实现过程

  • 将设备指定为物理卷

  • 用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的
  • 在物理卷上创建的逻辑卷, 是由物理区域(PE)组成
  • 可以在逻辑卷上创建文件系统并挂载

image.png

实现逻辑卷

相关工具来自于 lvm2 包

  1. [root@centos8 ~]#yum -y install lvm2

物理卷pv管理工具

  1. #显示pv信息
  2. pvs
  3. pvdisplay
  4. #创建pv
  5. pvcreate /dev/DEVICE
  6. #删除pv
  7. pvremove /dev/DEVICE

卷组vg管理工具

  1. #显示卷组信息
  2. vgs
  3. vgdisplay
  4. #创建卷组
  5. vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
  6. #示例
  7. vgcreate -s 16M vg0 /dev/sdb /dev/sdc # -s指定PE的大小,默认4M
  8. #管理卷组
  9. vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
  10. vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
  11. #删除卷组
  12. (1)先做pvmove
  13. (2)再做vgremove

逻辑卷lv管理工具

  1. #显示逻辑卷
  2. lvs
  3. Lvdisplay
  4. #创建逻辑卷
  5. lvcreate -L #[mMgGtT] -n NAME VolumeGroup
  6. #删除逻辑卷
  7. lvremove /dev/VG_NAME/LV_NAME

例子:创建逻辑卷

例子:给/dev/sdb 分配一个5G空间做物理卷 ,和sdc整个块设备做物理卷。 两者合成一个逻辑卷
image.png
(1)分配5G空间,得到sdb1

  1. [root@centos8 ~]#fdisk /dev/sdb
  2. Welcome to fdisk (util-linux 2.32.1).
  3. Changes will remain in memory only, until you decide to write them.
  4. Be careful before using the write command.
  5. Command (m for help): n
  6. Partition type
  7. p primary (0 primary, 0 extended, 4 free)
  8. e extended (container for logical partitions)
  9. Select (default p): p
  10. Partition number (1-4, default 1):
  11. First sector (2048-41943039, default 2048):
  12. Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): +5G
  13. Created a new partition 1 of type 'Linux' and of size 5 GiB.
  14. Command (m for help): w
  15. The partition table has been altered.
  16. Calling ioctl() to re-read partition table.
  17. Syncing disks.
  18. [root@centos8 ~]#lsblk
  19. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  20. sda 8:0 0 200G 0 disk
  21. ├─sda1 8:1 0 1G 0 part /boot
  22. ├─sda2 8:2 0 100G 0 part /
  23. ├─sda3 8:3 0 2G 0 part [SWAP]
  24. ├─sda4 8:4 0 1K 0 part
  25. └─sda5 8:5 0 50G 0 part /data
  26. sdb 8:16 0 20G 0 disk
  27. └─sdb1 8:17 0 5G 0 part #得到sdb1
  28. sdc 8:32 0 10G 0 disk
  29. sr0 11:0 1 8.6G 0 rom

然后将sdb1类型改成“Linux LVM” ,ID为8e

  1. [root@centos8 ~]#fdisk /dev/sdb
  2. Welcome to fdisk (util-linux 2.32.1).
  3. Changes will remain in memory only, until you decide to write them.
  4. Be careful before using the write command.
  5. Command (m for help): p
  6. Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
  7. Units: sectors of 1 * 512 = 512 bytes
  8. Sector size (logical/physical): 512 bytes / 512 bytes
  9. I/O size (minimum/optimal): 512 bytes / 512 bytes
  10. Disklabel type: dos
  11. Disk identifier: 0x781c65fc
  12. Device Boot Start End Sectors Size Id Type
  13. /dev/sdb1 2048 10487807 10485760 5G 83 Linux # 当前sdb1的Id是83, type是“Linux”
  14. Command (m for help): t #t修改类型
  15. Selected partition 1
  16. Hex code (type L to list all codes): L #L查看所有的类型列表
  17. 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
  18. 1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
  19. 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
  20. 3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT-
  21. 4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
  22. 5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
  23. 6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
  24. 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
  25. 8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
  26. 9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
  27. a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
  28. b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
  29. c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignment
  30. e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs
  31. f W95 Extd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
  32. 10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
  33. 11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b
  34. 12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor
  35. 14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor
  36. 16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary
  37. 17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS
  38. 18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE
  39. 1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto
  40. 1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep
  41. 1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT
  42. Hex code (type L to list all codes): 8e # 8e Linux LVM
  43. Changed type of partition 'Linux' to 'Linux LVM'.
  44. Command (m for help): p
  45. Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
  46. Units: sectors of 1 * 512 = 512 bytes
  47. Sector size (logical/physical): 512 bytes / 512 bytes
  48. I/O size (minimum/optimal): 512 bytes / 512 bytes
  49. Disklabel type: dos
  50. Disk identifier: 0x781c65fc
  51. Device Boot Start End Sectors Size Id Type
  52. /dev/sdb1 2048 10487807 10485760 5G 8e Linux LVM #成功将类型改成Linux LVM
  53. Command (m for help): w
  54. The partition table has been altered.
  55. Calling ioctl() to re-read partition table.
  56. Syncing disks.

(2)创建物理卷

  1. #创建两个物理卷 pvcreate
  2. pvcreate /dev/sdb1 /dev/sdc
  3. #查看物理卷
  4. [root@centos8 ~]#pvs
  5. PV VG Fmt Attr PSize PFree
  6. /dev/sdb1 lvm2 --- 5.00g 5.00g
  7. /dev/sdc lvm2 --- 10.00g 10.00g
  8. [root@centos8 ~]#pvdisplay
  9. "/dev/sdb1" is a new physical volume of "5.00 GiB"
  10. --- NEW Physical volume ---
  11. PV Name /dev/sdb1
  12. VG Name
  13. PV Size 5.00 GiB
  14. Allocatable NO
  15. PE Size 0
  16. Total PE 0
  17. Free PE 0
  18. Allocated PE 0
  19. PV UUID 9AegYM-t6pf-N8DS-UZHe-1A7j-qsPg-PUbYFy
  20. "/dev/sdc" is a new physical volume of "10.00 GiB"
  21. --- NEW Physical volume ---
  22. PV Name /dev/sdc
  23. VG Name
  24. PV Size 10.00 GiB
  25. Allocatable NO
  26. PE Size 0
  27. Total PE 0
  28. Free PE 0
  29. Allocated PE 0
  30. PV UUID DJNagH-p4H4-YCck-7mZJ-D6t5-TnYz-y7XYEF

(3)创建卷组 vgcreate

  1. [root@centos8 ~]#vgcreate vg0 /dev/sdc /dev/sdb1
  2. Volume group "vg0" successfully created
  3. #或者指定PE大小
  4. vgcreate -s 16M vg0 /dev/sdb /dev/sdc # -s指定PE的大小,默认4M
  5. #查看信息
  6. [root@centos8 ~]#vgs
  7. VG #PV #LV #SN Attr VSize VFree
  8. vg0 2 0 0 wz--n- 14.99g 14.99g
  9. [root@centos8 ~]#vgdisplay
  10. --- Volume group ---
  11. VG Name vg0
  12. System ID
  13. Format lvm2
  14. Metadata Areas 2
  15. Metadata Sequence No 1
  16. VG Access read/write
  17. VG Status resizable
  18. MAX LV 0
  19. Cur LV 0
  20. Open LV 0
  21. Max PV 0
  22. Cur PV 2
  23. Act PV 2
  24. VG Size 14.99 GiB
  25. PE Size 4.00 MiB
  26. Total PE 3838
  27. Alloc PE / Size 0 / 0
  28. Free PE / Size 3838 / 14.99 GiB
  29. VG UUID vjvvb9-RXlU-JdwY-Ajrn-J3Np-zsQb-3XyUKi

(3)创建逻辑卷lv

  1. [root@centos8 ~]#lvcreate -n mysql -L 1G vg0 #-L 指定大小 -l以PE为单位指定大小
  2. Logical volume "mysql" created.
  3. #查看
  4. [root@centos8 ~]#lvdisplay
  5. --- Logical volume ---
  6. LV Path /dev/vg0/mysql
  7. LV Name mysql
  8. VG Name vg0
  9. LV UUID fUcq3s-GhSD-YI1U-lhPv-PZCs-naAJ-UGuqpX
  10. LV Write Access read/write
  11. LV Creation host, time centos8.3.magedu.com, 2021-07-19 21:22:29 +0800
  12. LV Status available
  13. # open 0
  14. LV Size 1.00 GiB
  15. Current LE 256
  16. Segments 1
  17. Allocation inherit
  18. Read ahead sectors auto
  19. - currently set to 8192
  20. Block device 253:0
  21. [root@centos8 ~]#lvs
  22. LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
  23. mysql vg0 -wi-a----- 1.00g

(4)给逻辑卷vg0-mysql创建文件系统,并进行挂着

image.png

  1. #创建文件系统
  2. [root@centos8 ~]#mkfs.ext4 /dev/vg0/mysql
  3. #编辑/etc/fstab块设备文件 增加挂载点
  4. [root@centos8 ~]#vim /etc/fstab

image.png

  1. #查看挂载是否成功
  2. [root@centos8 ~]#mount -a #挂载点/mnt/mysql目录不存在
  3. mount: /mnt/mysql: mount point does not exist.
  4. [root@centos8 ~]#mkdir /mnt/mysql #创建
  5. [root@centos8 ~]#mount -a
  6. [root@centos8 ~]#df
  7. Filesystem 1K-blocks Used Available Use% Mounted on
  8. devtmpfs 886960 0 886960 0% /dev
  9. tmpfs 916500 0 916500 0% /dev/shm
  10. tmpfs 916500 9580 906920 2% /run
  11. tmpfs 916500 0 916500 0% /sys/fs/cgroup
  12. /dev/sda2 104806400 6128280 98678120 6% /
  13. /dev/sda5 52403200 398404 52004796 1% /data
  14. /dev/sda1 999320 203380 727128 22% /boot
  15. tmpfs 183300 1180 182120 1% /run/user/42
  16. tmpfs 183300 0 183300 0% /run/user/0
  17. /dev/mapper/vg0-mysql 999320 2564 927944 1% /mnt/mysql #挂载成功
  1. [root@centos8 ~]#lsblk
  2. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  3. sda 8:0 0 200G 0 disk
  4. ├─sda1 8:1 0 1G 0 part /boot
  5. ├─sda2 8:2 0 100G 0 part /
  6. ├─sda3 8:3 0 2G 0 part [SWAP]
  7. ├─sda4 8:4 0 1K 0 part
  8. └─sda5 8:5 0 50G 0 part /data
  9. sdb 8:16 0 20G 0 disk
  10. └─sdb1 8:17 0 5G 0 part
  11. sdc 8:32 0 10G 0 disk
  12. ├─vg0-mysql 253:0 0 1G 0 lvm /mnt/mysql
  13. └─vg0-log 253:1 0 2G 0 lvm
  14. sr0 11:0 1 8.6G 0 rom


关于逻辑卷对应的设备名

第一个逻辑卷对应设备名:/dev/dm-#
dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块

  1. /dev/vg0/mysql
  2. /dev/dm-0
  1. [root@centos8 ~]#ll /dev/vg0/mysql
  2. lrwxrwxrwx. 1 root root 7 Jul 19 21:22 /dev/vg0/mysql -> ../dm-0
  3. [root@centos8 ~]#ll /dev/dm-0
  4. brw-rw----. 1 root disk 253, 0 Jul 19 21:22 /dev/dm-0

扩展逻辑卷

实现方法

  1. #两步实现
  2. #第一步实现逻辑卷的空间扩展
  3. lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
  4. #第二步实现文件系统的扩展
  5. #针对ext
  6. resize2fs /dev/VG_NAME/LV_NAME
  7. #针对xfs
  8. xfs_growfs MOUNTPOINT
  9. #一步实现容间和文件系统的扩展 使用-r选项
  10. lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
  • lvextend说明 ```bash lvextend -l +50%free /dev/vg0/mysql #在剩余可用空间里面取 50% 增加到 /dev/vg0/mysql 逻辑卷里

lvextend -l 50%free /dev/vg0/mysql #将/dev/vg0/mysql 逻辑卷扩展到50%

lvextend -L +1G /dev/vg0/log # 给/dev/vg0/log逻辑卷增加 1G 的空间

  1. **例子:拓展逻辑卷: 给/dev/vg0/mysql 增加空间**<br />第一步实现逻辑卷的空间扩展
  2. ```bash
  3. [root@centos8 ~]#lvextend -l +50%free /dev/vg0/mysql
  4. Size of logical volume vg0/mysql changed from 1.00 GiB (256 extents) to <7.02 GiB (1797 extents).
  5. Logical volume vg0/mysql successfully resized.
  6. [root@centos8 ~]#lvdisplay
  7. --- Logical volume ---
  8. LV Path /dev/vg0/mysql
  9. LV Name mysql
  10. VG Name vg0
  11. LV UUID fUcq3s-GhSD-YI1U-lhPv-PZCs-naAJ-UGuqpX
  12. LV Write Access read/write
  13. LV Creation host, time centos8.3.magedu.com, 2021-07-19 21:22:29 +0800
  14. LV Status available
  15. # open 1
  16. LV Size <7.02 GiB
  17. Current LE 1797
  18. Segments 2
  19. Allocation inherit
  20. Read ahead sectors auto
  21. - currently set to 8192
  22. Block device 253:0
  23. --- Logical volume ---
  24. LV Path /dev/vg0/log
  25. LV Name log
  26. VG Name vg0
  27. LV UUID x4p6C9-4tyu-SPEV-zKIM-oQK0-b7IM-PXnqtP
  28. LV Write Access read/write
  29. LV Creation host, time centos8.3.magedu.com, 2021-07-19 21:27:18 +0800
  30. LV Status available
  31. # open 1
  32. LV Size 1.95 GiB
  33. Current LE 500
  34. Segments 1
  35. Allocation inherit
  36. Read ahead sectors auto
  37. - currently set to 8192
  38. Block device 253:1
  39. [root@centos8 ~]#vgdisplay
  40. --- Volume group ---
  41. VG Name vg0
  42. System ID
  43. Format lvm2
  44. Metadata Areas 2
  45. Metadata Sequence No 4
  46. VG Access read/write
  47. VG Status resizable
  48. MAX LV 0
  49. Cur LV 2
  50. Open LV 2
  51. Max PV 0
  52. Cur PV 2
  53. Act PV 2
  54. VG Size 14.99 GiB
  55. PE Size 4.00 MiB
  56. Total PE 3838
  57. Alloc PE / Size 2297 / 8.97 GiB
  58. Free PE / Size 1541 / <6.02 GiB
  59. VG UUID vjvvb9-RXlU-JdwY-Ajrn-J3Np-zsQb-3XyUKi

第二步实现文件系统的扩展

  1. [root@centos8 ~]#df -Th
  2. Filesystem Type Size Used Avail Use% Mounted on
  3. devtmpfs devtmpfs 867M 0 867M 0% /dev
  4. tmpfs tmpfs 896M 0 896M 0% /dev/shm
  5. tmpfs tmpfs 896M 9.4M 886M 2% /run
  6. tmpfs tmpfs 896M 0 896M 0% /sys/fs/cgroup
  7. /dev/sda2 xfs 100G 5.9G 95G 6% /
  8. /dev/sda5 xfs 50G 1.2G 49G 3% /data
  9. /dev/mapper/vg0-mysql ext4 976M 804M 105M 89% /mnt/mysql #mysql空间未改变
  10. /dev/sda1 ext4 976M 199M 711M 22% /boot
  11. tmpfs tmpfs 180M 1.2M 178M 1% /run/user/42
  12. tmpfs tmpfs 180M 0 180M 0% /run/user/0
  13. /dev/mapper/vg0-log xfs 2.0G 47M 1.9G 3% /mnt/log
  14. #第二步实现文件系统的扩展
  15. [root@centos8 ~]#resize2fs /dev/vg0/mysql
  16. resize2fs 1.45.6 (20-Mar-2020)
  17. Filesystem at /dev/vg0/mysql is mounted on /mnt/mysql; on-line resizing required
  18. old_desc_blocks = 1, new_desc_blocks = 1
  19. The filesystem on /dev/vg0/mysql is now 1840128 (4k) blocks long.
  20. [root@centos8 ~]#df -hT
  21. Filesystem Type Size Used Avail Use% Mounted on
  22. devtmpfs devtmpfs 867M 0 867M 0% /dev
  23. tmpfs tmpfs 896M 0 896M 0% /dev/shm
  24. tmpfs tmpfs 896M 9.4M 886M 2% /run
  25. tmpfs tmpfs 896M 0 896M 0% /sys/fs/cgroup
  26. /dev/sda2 xfs 100G 5.9G 95G 6% /
  27. /dev/sda5 xfs 50G 1.2G 49G 3% /data
  28. /dev/mapper/vg0-mysql ext4 6.9G 806M 5.8G 12% /mnt/mysql #mysql空间已扩展成功
  29. /dev/sda1 ext4 976M 199M 711M 22% /boot
  30. tmpfs tmpfs 180M 1.2M 178M 1% /run/user/42
  31. tmpfs tmpfs 180M 0 180M 0% /run/user/0
  32. /dev/mapper/vg0-log xfs 2.0G 47M 1.9G 3% /mnt/log

例子:拓展逻辑卷: 给/dev/vg0/mysql 增加空间 : 一步实现

  1. #使用-r 选项
  2. [root@centos8 ~]#lvextend -r -l +100%free /dev/vg0/mysql
  3. Size of logical volume vg0/mysql changed from <7.02 GiB (1797 extents) to <12.04 GiB (3082 extents).
  4. Logical volume vg0/mysql successfully resized.
  5. resize2fs 1.45.6 (20-Mar-2020)
  6. Filesystem at /dev/mapper/vg0-mysql is mounted on /mnt/mysql; on-line resizing required
  7. old_desc_blocks = 1, new_desc_blocks = 2
  8. The filesystem on /dev/mapper/vg0-mysql is now 3155968 (4k) blocks long.
  9. [root@centos8 ~]#df -Th
  10. Filesystem Type Size Used Avail Use% Mounted on
  11. devtmpfs devtmpfs 867M 0 867M 0% /dev
  12. tmpfs tmpfs 896M 0 896M 0% /dev/shm
  13. tmpfs tmpfs 896M 9.4M 886M 2% /run
  14. tmpfs tmpfs 896M 0 896M 0% /sys/fs/cgroup
  15. /dev/sda2 xfs 100G 5.9G 95G 6% /
  16. /dev/sda5 xfs 50G 1.2G 49G 3% /data
  17. /dev/mapper/vg0-mysql ext4 12G 807M 11G 7% /mnt/mysql
  18. /dev/sda1 ext4 976M 199M 711M 22% /boot
  19. tmpfs tmpfs 180M 1.2M 178M 1% /run/user/42
  20. tmpfs tmpfs 180M 0 180M 0% /run/user/0
  21. /dev/mapper/vg0-log xfs 3.0G 54M 2.9G 2% /mnt/log
  • 如果当前卷组vg的可用空间不足,但依然需要给逻辑卷lv扩展空间,就需要先增加pv,进而增加vg,再从vg中给lv增加空间

例子:扩展卷组vg

  1. #pv可用空间不足,造成vg空间不足就需要增加pv进而增加vg
  2. [root@centos8 ~]#pvs
  3. PV VG Fmt Attr PSize PFree
  4. /dev/sdb1 vg0 lvm2 a-- <5.00g 0
  5. /dev/sdc vg0 lvm2 a-- <10.00g 0

**

  1. #利用sdb的剩余空间创建一个新的pv 加入到vg0中
  2. [root@centos8 ~]#lsblk
  3. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  4. sda 8:0 0 200G 0 disk
  5. ├─sda1 8:1 0 1G 0 part /boot
  6. ├─sda2 8:2 0 100G 0 part /
  7. ├─sda3 8:3 0 2G 0 part [SWAP]
  8. ├─sda4 8:4 0 1K 0 part
  9. └─sda5 8:5 0 50G 0 part /data
  10. sdb 8:16 0 20G 0 disk #剩余15G
  11. └─sdb1 8:17 0 5G 0 part
  12. └─vg0-mysql 253:0 0 12G 0 lvm /mnt/mysql
  13. sdc 8:32 0 10G 0 disk
  14. ├─vg0-mysql 253:0 0 12G 0 lvm /mnt/mysql
  15. └─vg0-log 253:1 0 3G 0 lvm /mnt/log
  16. sr0 11:0 1 8.6G 0 rom
  17. [root@centos8 ~]#fdisk /dev/sdb #创建分区
  18. Device Boot Start End Sectors Size Id Type
  19. /dev/sdb1 2048 10487807 10485760 5G 8e Linux LVM
  20. /dev/sdb2 10487808 41943039 31455232 15G 8e Linux LVM #创建了新的分区 类型是Linux LVM
  21. #创建新的pv
  22. [root@centos8 ~]#pvcreate /dev/sdb2
  23. Physical volume "/dev/sdb2" successfully created.
  24. [root@centos8 ~]#pvs
  25. PV VG Fmt Attr PSize PFree
  26. /dev/sdb1 vg0 lvm2 a-- <5.00g 0
  27. /dev/sdb2 lvm2 --- <15.00g <15.00g
  28. /dev/sdc vg0 lvm2 a-- <10.00g 0
  29. #扩展vg 利用新的pv扩展vg0
  30. [root@centos8 ~]#vgextend vg0 /dev/sdb2
  31. Volume group "vg0" successfully extended
  32. [root@centos8 ~]#vgs #查看空间是否已扩展成功
  33. VG #PV #LV #SN Attr VSize VFree
  34. vg0 3 2 0 wz--n- <29.99g <15.00g
  35. [root@centos8 ~]#vgdisplay
  36. --- Volume group ---
  37. VG Name vg0
  38. System ID
  39. Format lvm2
  40. Metadata Areas 3
  41. Metadata Sequence No 7
  42. VG Access read/write
  43. VG Status resizable
  44. MAX LV 0
  45. Cur LV 2
  46. Open LV 2
  47. Max PV 0
  48. Cur PV 3
  49. Act PV 3
  50. VG Size <29.99 GiB
  51. PE Size 4.00 MiB
  52. Total PE 7677
  53. Alloc PE / Size 3838 / 14.99 GiB
  54. Free PE / Size 3839 / <15.00 GiB
  55. VG UUID vjvvb9-RXlU-JdwY-Ajrn-J3Np-zsQb-3XyUKi


缩减逻辑卷

注意:缩减有数据损坏的风险,建议先备份再缩减,xfs文件系统不支持缩减

  • 缩减逻辑卷的5个步骤

    1. 缩减逻辑卷的5个步骤
    2. 1)取消挂载
    3. umount /dev/VG_NAME/LV_NAME
    4. 2)检查文件系统完整性
    5. e2fsck -f /dev/VG_NAME/LV_NAME
    6. 3)缩减文件系统 指定缩减大小
    7. resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
    8. 4)缩减逻辑卷 指定大小需要与第3步一致
    9. lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
    10. 5)重新挂载
    11. mount /dev/VG_NAME/LV_NAME mountpoint
  • 例子:

(1)取消挂载

  1. [root@centos8 ~]#umount /mnt/mysql

(2)检查文件系统完整性

  1. [root@centos8 ~]#e2fsck -f /dev/vg0/mysql
  2. e2fsck 1.45.6 (20-Mar-2020)
  3. Pass 1: Checking inodes, blocks, and sizes
  4. Pass 2: Checking directory structure
  5. Pass 3: Checking directory connectivity
  6. Pass 4: Checking reference counts
  7. Pass 5: Checking group summary information
  8. /dev/vg0/mysql: 137/794624 files (0.0% non-contiguous), 264494/3155968 blocks

(3)缩减文件系统 指定缩减大小

  1. [root@centos8 ~]#resize2fs /dev/vg0/mysql 2G
  2. resize2fs 1.45.6 (20-Mar-2020)
  3. Resizing the filesystem on /dev/vg0/mysql to 524288 (4k) blocks.
  4. The filesystem on /dev/vg0/mysql is now 524288 (4k) blocks long.

(4)缩减逻辑卷 指定大小需要与第3步一致

  1. [root@centos8 ~]#lvreduce -L 2G /dev/vg0/mysql
  2. WARNING: Reducing active logical volume to 2.00 GiB.
  3. THIS MAY DESTROY YOUR DATA (filesystem etc.)
  4. Do you really want to reduce vg0/mysql? [y/n]: y
  5. Size of logical volume vg0/mysql changed from <12.04 GiB (3082 extents) to 2.00 GiB (512 extents).
  6. Logical volume vg0/mysql successfully resized.

(5)重新挂载

  1. [root@centos8 ~]#mount -a

删除/迁移物理卷pv

  1. #查看当前的pv 目前需要迁移/dev/sdc
  2. [root@centos8 ~]#pvs
  3. PV VG Fmt Attr PSize PFree
  4. /dev/sdb1 vg0 lvm2 a-- <5.00g <5.00g
  5. /dev/sdb2 vg0 lvm2 a-- <15.00g <15.00g
  6. /dev/sdc vg0 lvm2 a-- <10.00g 5.04g

(1)空间移动(释放)
image.png
注意:pvmove移动的是空间。空间移动了,数据也会移动

(2)然后从组卷vg中删除 /dev/sdc ;
(3)再从pv中删除

  1. # 从组卷vg0 删除 /dev/sdc
  2. [root@centos8 ~]#vgreduce vg0 /dev/sdc
  3. Removed "/dev/sdc" from volume group "vg0"
  4. [root@centos8 ~]#pvs
  5. PV VG Fmt Attr PSize PFree
  6. /dev/sdb1 vg0 lvm2 a-- <5.00g 44.00m
  7. /dev/sdb2 vg0 lvm2 a-- <15.00g <15.00g
  8. /dev/sdc lvm2 --- 10.00g 10.00g # 可以看到不再是vg0
  9. [root@centos8 ~]#vgs
  10. VG #PV #LV #SN Attr VSize VFree
  11. vg0 2 2 0 wz--n- 19.99g <15.04g
  12. #从pvs中删除 /dev/sdc
  13. [root@centos8 ~]#pvremove /dev/sdc
  14. Labels on physical volume "/dev/sdc" successfully wiped.
  15. [root@centos8 ~]#pvs
  16. PV VG Fmt Attr PSize PFree
  17. /dev/sdb1 vg0 lvm2 a-- <5.00g 44.00m
  18. /dev/sdb2 vg0 lvm2 a-- <15.00g <15.00g
  19. [root@centos8 ~]#

逻辑卷快照

逻辑卷快照工作原理

  • 在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间
  • 当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中
  • 快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据

实现方法

  1. mkfs.xfs /dev/vg0/data
  2. mount /dev/vg0/data/ /mnt/data
  3. #为现有逻辑卷创建快照,注意ext4必须使用-p r 实现只读
  4. lvcreate -l 64 -s -n data-snapshot /dev/vg0/data
  5. #挂载快照,xfs注意要使用-o ro实现只读,访止快照被修改
  6. mkdir -p /mnt/snap
  7. mount -o ro,nouuid /dev/vg0/data-snapshot /mnt/snap # xfs必须添加nouuid,否则无法挂载成功
  8. #恢复快照
  9. umount /dev/vg0/data-snapshot
  10. umount /dev/vg0/data
  11. lvconvert --merge /dev/vg0/data-snapshot
  12. #删除快照
  13. umount /mnt/snap
  14. lvremove /dev/vg0/data-snapshot