LVM管理

  1. LVM(Logical Volume Manager)是Linux下的逻辑卷管理器,它可以把多个硬盘分区或者整个硬盘作为一个卷组(Volume Group)来管理,再从卷组中划分出逻辑卷(Logical Volume),从而实现对逻辑卷(Logical Volume)的创建、删除、扩展等操作。并将这些逻辑卷格式化并挂载到文件系统上使用。这种方式能够在不影响数据的情况下对磁盘空间进行动态管理和调整。
  2. LVM的优点在于可以灵活地管理硬盘空间,提高数据的可用性和可靠性,同时还可以实现动态扩容和在线热迁移等高级功能。

1.原理

LVM的基本原理是将物理卷(硬盘、分区、RAID阵列等)划分为若干个物理区域(Physical Extents),再将这些物理区域组成卷组(Volume Group)。卷组是LVM中的基本管理单元,它可以动态地增加、删除物理卷,以及调整物理卷和逻辑卷的大小。

在卷组中,LVM可以划分出逻辑卷(Logical Volume),并将这些逻辑卷格式化为文件系统并挂载到目录上。逻辑卷可以动态地调整大小,而不需要重建文件系统或拷贝数据。

LVM的主要思路是将物理卷抽象成卷组,将卷组抽象成逻辑卷,从而实现灵活的磁盘空间管理。LVM提供了很多高级功能,如在线热迁移、快照和镜像等,这些功能可以提高数据的可靠性和可用性,同时也可以方便地进行系统维护和管理

  1. 物理卷(Physical Volume):在LVM中,物理卷是指一个物理硬盘、分区或者LUN(Logical Unit Number),它是LVM管理的最小单位,每个物理卷都有一个唯一的标识符UUID(Universally Unique Identifier)。
  2. 卷组(Volume Group):卷组是由一个或多个物理卷组成的逻辑组,它提供了一个抽象层,可以将多个物理卷组合成一个更大的存储池,以供逻辑卷使用。
  3. 逻辑卷(Logical Volume):逻辑卷是从卷组中分配出来的磁盘空间,它可以看作是一组连续的物理块(Physical Extents),逻辑卷也有一个唯一的标识符UUID。
  4. 文件系统:在逻辑卷上创建文件系统,就可以在其中存储数据了。

2.LVM使用步骤

  1. 创建物理卷:使用pvcreate命令将一个物理硬盘或分区初始化为一个物理卷。
  2. 创建卷组:使用vgcreate命令将一个或多个物理卷组成一个卷组,指定卷组的名称和包含的物理卷。
  3. 创建逻辑卷:使用lvcreate命令从卷组中分配一部分空间来创建一个逻辑卷。
  4. 创建文件系统:使用mkfs命令在逻辑卷上创建文件系统。
  5. 挂载逻辑卷:使用mount命令将逻辑卷挂载到文件系统中的一个目录下,使其可以被访问和使用。
  6. 扩展逻辑卷:使用lvextend命令将逻辑卷扩展到更大的空间。
  7. 缩小逻辑卷:使用lvreduce命令将逻辑卷缩小到更小的空间。
  8. 移动逻辑卷:使用pvmove命令将逻辑卷从一个物理卷迁移到另一个物理卷上。
  9. 删除逻辑卷:使用lvremove命令删除逻辑卷。
  10. 删除卷组:使用vgremove命令删除卷组。
  11. 删除物理卷:使用pvremove命令删除物理卷。

Physical Extent(PE)

在真正操作前,我们先了解一个PE的概念:

LVM(Logical Volume Manager)是一种在 Linux 操作系统上对硬盘进行管理和分区的工具,它可以将多个物理硬盘上的分区组合成一个或多个逻辑卷,并对逻辑卷进行动态扩展、收缩、备份等操作。PE(Physical Extent)是 LVM 中的一个重要概念,它表示物理卷(Physical Volume)上的最小存储单位

在 LVM 中,物理卷被划分成一系列大小相同的 PE,每个 PE 的大小通常为 4MB 或 8MB。逻辑卷(Logical Volume)由一个或多个物理卷组成,可以由不同物理卷上的 PE 组成,这些 PE 可以来自同一个物理卷或不同的物理卷。在逻辑卷中,PE 是逻辑卷和物理卷之间的桥梁,它们提供了逻辑卷和物理卷之间的映射关系。

PE 的大小对 LVM 的性能和灵活性都有影响。如果 PE 太小,那么需要管理的 PE 数量就会增加,从而增加管理的复杂性和开销;如果 PE 太大,那么在进行调整时可能会浪费更多的空间。因此,在设计 LVM 时需要权衡 PE 大小和整个系统的需求。

创建物理卷(Physical Volume)

#首先,给磁盘sdb进行分区,分出一个sdb1的主分区
[root@centos8 ~]#fdisk /dev/sdb

#分区的时候一定要输入t将分区类型改成8e

[root@centos8 ~]#lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk
├─sda1   8:1    0  100G  0 part /
├─sda2   8:2    0   50G  0 part /data
├─sda3   8:3    0    2G  0 part
├─sda4   8:4    0    1K  0 part
├─sda5   8:5    0    1G  0 part /boot
└─sda6   8:6    0    1M  0 part
sdb      8:16   0   20G  0 disk
└─sdb1   8:17   0    5G  0 part
sdc      8:32   0   10G  0 disk
sr0     11:0    1  9.5G  0 rom
sr1     11:1    1 10.1G  0 rom

#下面要将sdb1和sdc两个分区变成物理卷->卷组->逻辑卷
#1.创建物理卷(Physical Volume)
[root@centos8 ~]#pvcreate /dev/sd{b1,c}
  Cannot use /dev/sdc: device is partitioned
  Physical volume "/dev/sdb1" successfully created.
[root@centos8 ~]#

#之前sdc做过试验,所以创建失败了
#清空sdc,将分区表破坏即可
[root@centos8 ~]#dd if=/dev/zero of=/dev/sdc bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00516282 s, 203 MB/s
[root@centos8 ~]#
[root@centos8 ~]#pvcreate /dev/sdc #创建成功
  Physical volume "/dev/sdc" successfully created.
[root@centos8 ~]#

#查看当前的Physical Volume
[root@centos8 ~]#pvs #简略的看
  PV         VG Fmt  Attr PSize  PFree
  /dev/sdb1     lvm2 ---   5.00g  5.00g
  /dev/sdc      lvm2 ---  10.00g 10.00g
[root@centos8 ~]#
#详细查看
[root@centos8 ~]#pvdisplay
  "/dev/sdb1" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               UxSQHV-bLEr-CgBf-jjnt-mKRA-zIb5-vaIVVO

  "/dev/sdc" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               JwnWDk-7yAo-CAgL-Bxwm-ChZz-Vw00-YSMXK1

[root@centos8 ~]#

创建卷组(Volume Group)

#创建卷组
[root@centos8 ~]#vgcreate vg0 /dev/sd{b1,c}  #vg0 自定义Volume Group的名称
  Volume group "vg0" successfully created
[root@centos8 ~]#
[root@centos8 ~]#pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg0     #已经显示了,之前查看是没有的
  PV Size               5.00 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB    #已经有了PE的单位
  Total PE              1279    #总的PE数量
  Free PE               1279    #PE可用数量
  Allocated PE          0
  PV UUID               UxSQHV-bLEr-CgBf-jjnt-mKRA-zIb5-vaIVVO

  --- Physical volume ---
  PV Name               /dev/sdc
  VG Name               vg0
  PV Size               10.00 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              2559
  Free PE               2559
  Allocated PE          0
  PV UUID               JwnWDk-7yAo-CAgL-Bxwm-ChZz-Vw00-YSMXK1

[root@centos8 ~]#

#使用vg查看卷组
[root@centos8 ~]#vgdisplay
  --- Volume group ---
  VG Name               vg0
  System ID
  Format                lvm2
  Metadata Areas        2
  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                2
  Act PV                2
  VG Size               14.99 GiB
  PE Size               4.00 MiB
  Total PE              3838
  Alloc PE / Size       0 / 0
  Free  PE / Size       3838 / 14.99 GiB
  VG UUID               V1oC8Y-vsey-pBJ4-O5Os-0CkR-LDCO-cZFRcY

[root@centos8 ~]#

创建逻辑卷(Logical Volume)

#创建mysql逻辑卷
# -n 指定逻辑卷的名称,-l 指定PE的数量,-L 指定大小,系统会自动计算PE个数 最后是创建好的卷组名称
[root@centos8 ~]#lvcreate -n mysql -L 1G vg0
  Logical volume "mysql" created.
[root@centos8 ~]#
[root@centos8 ~]#lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg0/mysql
  LV Name                mysql
  VG Name                vg0
  LV UUID                WcD2fa-AyoA-yJgO-kjoN-wInb-pSQZ-aghCe5
  LV Write Access        read/write
  LV Creation host, time centos8.xingyuyu.com, 2023-03-08 22:37:10 +0800
  LV Status              available
  # open                 0
  LV Size                1.00 GiB
  Current LE             256    #逻辑卷里叫LE不叫PE,但指的是同一个东西
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

[root@centos8 ~]#

#查看逻辑卷
[root@centos8 ~]#pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg0
  PV Size               5.00 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              1279    
  Free PE               1023    #发现可用变少了,说明创建的mysql逻辑卷使用的是sdb1这个分区,但是这个我们不关注
  Allocated PE          256
  PV UUID               UxSQHV-bLEr-CgBf-jjnt-mKRA-zIb5-vaIVVO

  --- Physical volume ---
  PV Name               /dev/sdc
  VG Name               vg0
  PV Size               10.00 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              2559
  Free PE               2559
  Allocated PE          0
  PV UUID               JwnWDk-7yAo-CAgL-Bxwm-ChZz-Vw00-YSMXK1

[root@centos8 ~]#

[root@centos8 ~]#vgdisplay
  --- Volume group ---
  VG Name               vg0
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               14.99 GiB
  PE Size               4.00 MiB
  Total PE              3838
  Alloc PE / Size       256 / 1.00 GiB
  Free  PE / Size       3582 / 13.99 GiB
  VG UUID               V1oC8Y-vsey-pBJ4-O5Os-0CkR-LDCO-cZFRcY

[root@centos8 ~]#

#创建log逻辑卷
[root@centos8 ~]#lvcreate -n log -l 512 vg0
  Logical volume "log" created.
[root@centos8 ~]#lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg0/mysql
  LV Name                mysql
  VG Name                vg0
  LV UUID                WcD2fa-AyoA-yJgO-kjoN-wInb-pSQZ-aghCe5
  LV Write Access        read/write
  LV Creation host, time centos8.xingyuyu.com, 2023-03-08 22:37:10 +0800
  LV Status              available
  # open                 0
  LV Size                1.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/vg0/log
  LV Name                log
  VG Name                vg0
  LV UUID                XYqOav-2gC7-bjMn-lujz-qlas-yXOX-bSLlic
  LV Write Access        read/write
  LV Creation host, time centos8.xingyuyu.com, 2023-03-08 22:44:10 +0800
  LV Status              available
  # open                 0
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

[root@centos8 ~]#

#创建的逻辑卷有三种名字 dm-*系列
[root@centos8 ~]#ll /dev/dm*
brw-rw---- 1 root disk  253, 0 Mar  8 22:37 /dev/dm-0
brw-rw---- 1 root disk  253, 1 Mar  8 22:44 /dev/dm-1
crw-rw---- 1 root audio  14, 9 Mar  4 01:29 /dev/dmmidi
[root@centos8 ~]#
#mapper系列
[root@centos8 ~]#ll /dev/mapper/*
crw------- 1 root root 10, 236 Mar  8 22:37 /dev/mapper/control
lrwxrwxrwx 1 root root       7 Mar  8 22:44 /dev/mapper/vg0-log -> ../dm-1
lrwxrwxrwx 1 root root       7 Mar  8 22:37 /dev/mapper/vg0-mysql -> ../dm-0
[root@centos8 ~]#
#还有就是/dev/vg0/mysql,使用lvdisplay可以看到

创建文件系统

#对逻辑卷mysql创建文件系统
[root@centos8 ~]#mkfs.ext4 /dev/vg0/mysql
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: 88b05bd0-f20f-473e-9bf4-1b1eeddd2771
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

#对逻辑卷log创建文件系统
[root@centos8 ~]#mkfs.xfs /dev/vg0/log
meta-data=/dev/vg0/log           isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@centos8 ~]#

[root@centos8 ~]#lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0  200G  0 disk
├─sda1          8:1    0  100G  0 part /
├─sda2          8:2    0   50G  0 part /data
├─sda3          8:3    0    2G  0 part
├─sda4          8:4    0    1K  0 part
├─sda5          8:5    0    1G  0 part /boot
└─sda6          8:6    0    1M  0 part
sdb             8:16   0   20G  0 disk
└─sdb1          8:17   0    5G  0 part
  ├─vg0-mysql 253:0    0    1G  0 lvm
  └─vg0-log   253:1    0    2G  0 lvm
sdc             8:32   0   10G  0 disk
sr0            11:0    1  9.5G  0 rom
sr1            11:1    1 10.1G  0 rom
[root@centos8 ~]#blkid
/dev/sda1: UUID="ad19dd45-b7ee-485c-87e6-3c9bb8ec3996" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="64f77bbe-01"
/dev/sda2: UUID="933c390a-5904-4b01-aa6a-447c771b7f08" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="64f77bbe-02"
/dev/sda3: UUID="98f53a44-1fb7-4139-85c6-a3c2d1633cd7" TYPE="swap" PARTUUID="64f77bbe-03"
/dev/sda5: UUID="8fbb4a9c-1506-4c4a-889d-b78163091bb0" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="64f77bbe-05"
/dev/sr0: BLOCK_SIZE="2048" UUID="2020-11-02-15-15-23-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTUUID="6b8b4567" PTTYPE="dos"
/dev/sr1: BLOCK_SIZE="2048" UUID="2021-11-13-01-04-26-00" LABEL="CentOS-8-5-2111-x86_64-dvd" TYPE="iso9660" PTUUID="5fb10f71" PTTYPE="dos"
/dev/sdb1: UUID="UxSQHV-bLEr-CgBf-jjnt-mKRA-zIb5-vaIVVO" TYPE="LVM2_member" PARTUUID="da250a9c-01"
/dev/sdc: UUID="JwnWDk-7yAo-CAgL-Bxwm-ChZz-Vw00-YSMXK1" TYPE="LVM2_member"
/dev/sda6: PARTUUID="64f77bbe-06"
/dev/mapper/vg0-mysql: UUID="88b05bd0-f20f-473e-9bf4-1b1eeddd2771" BLOCK_SIZE="4096" TYPE="ext4"
/dev/mapper/vg0-log: UUID="7383e853-3046-435b-8cfb-983d369b2a8d" BLOCK_SIZE="512" TYPE="xfs"
[root@centos8 ~]#

挂载

#创建mysql逻辑卷挂载点
[root@centos8 ~]#mkdir /mnt/mysql
#创建log逻辑卷挂载点
[root@centos8 ~]#mkdir /mnt/log

#添加配置
[root@centos8 ~]#vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Apr 20 06:18:15 2022
#
# 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.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=ad19dd45-b7ee-485c-87e6-3c9bb8ec3996 /                       xfs     defaults        0 0
UUID=8fbb4a9c-1506-4c4a-889d-b78163091bb0 /boot                   ext4    defaults        1 2
UUID=933c390a-5904-4b01-aa6a-447c771b7f08 /data                   xfs     defaults        0 0
UUID=98f53a44-1fb7-4139-85c6-a3c2d1633cd7 none                    swap    defaults        0 0
#UUID=2d508d02-801c-411d-bbcb-471d18142dd3 /data/mysql             ext4    defaults        0 0
#UUID=515fb6d1-e7bd-4021-9863-5ca3d037e4d9 swap                    swap    defaults        0 0
/dev/vg0/mysql                             /mnt/mysql              ext4    defaults       0  0
/dev/vg0/log                             /mnt/log              xfs    defaults       0  0
[root@centos8 ~]#

#挂载
[root@centos8 ~]#mount -a

[root@centos8 ~]#lsblk -f
NAME          FSTYPE      LABEL                      UUID                                   MOUNTPOINT
sda
├─sda1        xfs                                    ad19dd45-b7ee-485c-87e6-3c9bb8ec3996   /
├─sda2        xfs                                    933c390a-5904-4b01-aa6a-447c771b7f08   /data
├─sda3        swap                                   98f53a44-1fb7-4139-85c6-a3c2d1633cd7
├─sda4
├─sda5        ext4                                   8fbb4a9c-1506-4c4a-889d-b78163091bb0   /boot
└─sda6
sdb
└─sdb1        LVM2_member                            UxSQHV-bLEr-CgBf-jjnt-mKRA-zIb5-vaIVVO
  ├─vg0-mysql ext4                                   88b05bd0-f20f-473e-9bf4-1b1eeddd2771   /mnt/mysql
  └─vg0-log   xfs                                    7383e853-3046-435b-8cfb-983d369b2a8d   /mnt/log
sdc           LVM2_member                            JwnWDk-7yAo-CAgL-Bxwm-ChZz-Vw00-YSMXK1
sr0           iso9660     CentOS 7 x86_64            2020-11-02-15-15-23-00
sr1           iso9660     CentOS-8-5-2111-x86_64-dvd 2021-11-13-01-04-26-00
[root@centos8 ~]#

测试

#往刚才创建好的逻辑卷里面拷贝一些文件
[root@centos8 ~]#cp /etc/fstab /mnt/mysql/
[root@centos8 ~]#ll /mnt/mysql/
total 20
-rw-r--r-- 1 root root  1006 Mar  8 22:49 fstab
drwx------ 2 root root 16384 Mar  8 22:46 lost+found
[root@centos8 ~]#

#普通的硬盘分区和逻辑卷的性能哪个好
[root@centos8 ~]#dd if=/dev/zero of=/data/test.img bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 4.00763 s, 262 MB/s  #向硬盘普通分区硬盘写的速度是262MB/s
[root@centos8 ~]#
#同样的命令再执行一次,速度却提升了,这是因为有缓冲的原因
[root@centos8 ~]#dd if=/dev/zero of=/data/test.img bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 1.7454 s, 601 MB/s
[root@centos8 ~]#

#存在缓冲,所以速度提升了
[root@centos8 ~]#free -h
              total        used        free      shared  buff/cache   available
Mem:          2.9Gi       229Mi       1.5Gi       8.0Mi       1.2Gi       2.5Gi
Swap:         6.0Gi          0B       6.0Gi
[root@centos8 ~]#

#如果不清理掉缓冲的话,向逻辑卷写入会影响正常数据,但是实际生产中很少清楚缓冲。直接使用 echo 3 > /proc/sys/vm/drop_caches 命令来释放缓冲区。这个命令会清空内核中的 pagecache、dentries 和 inodes 缓存。这个方法并不会强制将数据写入磁盘,所以在使用这个命令之后,你需要确保所有数据都已经写入磁盘了。
[root@centos8 ~]#echo 3 > /proc/sys/vm/drop_caches

[root@centos8 ~]#free -h
              total        used        free      shared  buff/cache   available
Mem:          2.9Gi       222Mi       2.6Gi       8.0Mi        72Mi       2.5Gi
Swap:         6.0Gi          0B       6.0Gi
[root@centos8 ~]#

#写入逻辑卷
[root@centos8 ~]#dd if=/dev/zero of=/mnt/mysql/test.img bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 2.17351 s, 482 MB/s
[root@centos8 ~]#
#可以看到逻辑卷速度要比普通的分区快

扩容逻辑卷(Logical Volume)

当逻辑卷的磁盘空间不足时,可以通过扩容来增加逻辑卷的磁盘空间。

下面是 LVM 扩容逻辑卷的步骤:

  1. 查看当前的逻辑卷信息,使用 lvdisplay 命令查看逻辑卷的信息,例如逻辑卷的名称、大小、所在的卷组、挂载点等等。
  2. 确认是否有可用的物理卷,使用 pvdisplay 命令查看物理卷的信息,确认是否有未使用的物理卷可以用于扩容逻辑卷。如果没有可用的物理卷,需要先添加一个或多个物理卷。
  3. 将新的物理卷加入卷组,使用 vgextend 命令将新的物理卷添加到卷组中,例如: vgextend <卷组名称> <新的物理卷路径>
  4. 扩展逻辑卷的大小,使用 lvextend 命令扩展逻辑卷的大小,例如: lvextend -L +<扩展的大小> <逻辑卷路径>
  5. 将文件系统扩展到逻辑卷的大小,使用 resize2fs 命令将文件系统扩展到逻辑卷的大小,例如: resize2fs <逻辑卷路径>。如果使用的是 XFS 文件系统,则使用 xfs_growfs 命令扩展文件系统大小。
  6. 验证逻辑卷的大小,使用 lvdisplay 命令验证逻辑卷的大小是否已经扩展到期望的大小。

需要注意的是,扩展逻辑卷时需要先将新的物理卷加入卷组,然后才能将逻辑卷的大小扩展到新的物理卷中。另外,扩展逻辑卷的大小会影响文件系统的大小,因此需要将文件系统扩展到逻辑卷的大小。最后,一定要在扩展逻辑卷之前备份数据,以防数据丢失。

#LVM使用最多的是扩容逻辑卷(lvextend)
#上面使用了3G的空间,VG中还剩12G的空间,下面给mysql扩容4G
#[root@centos8 ~]#lvextend -L +2G /dev/vg0/mysql   #写了+代表扩容2G,不写代表扩容到2G
  Size of logical volume vg0/mysql changed from 1.00 GiB (256 extents) to 7.00 GiB (1792 extents). 
  Logical volume vg0/mysql successfully resized.
[root@centos8 ~]#

#查看逻辑卷和卷组的容量
[root@centos8 ~]#lvs
  LV    VG  Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  log   vg0 -wi-ao---- 2.00g
  mysql vg0 -wi-ao---- 7.00g
[root@centos8 ~]#vgs
  VG  #PV #LV #SN Attr   VSize  VFree
  vg0   2   2   0 wz--n- 14.99g 5.99g
[root@centos8 ~]#

#此时,使用df -Th查看发现mysql还是1G,这是因为目前有文件系统ext4的空间是1G,刚刚分出来的6G还没有文件系统,所以这里目前还看不到
[root@centos8 ~]#df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
devtmpfs              devtmpfs  958M     0  958M   0% /dev
tmpfs                 tmpfs     976M     0  976M   0% /dev/shm
tmpfs                 tmpfs     976M  8.8M  967M   1% /run
tmpfs                 tmpfs     976M     0  976M   0% /sys/fs/cgroup
/dev/sda1             xfs       100G  3.1G   97G   4% /
/dev/sda2             xfs        50G   12G   39G  24% /data
/dev/sda5             ext4      976M  141M  768M  16% /boot
tmpfs                 tmpfs     298M     0  298M   0% /run/user/0
/dev/mapper/vg0-mysql ext4      976G 804M   106M  89% /mnt/mysql
/dev/mapper/vg0-log   xfs       2.0G   47M  2.0G   3% /mnt/log
[root@centos8 ~]#

#扩容文件系统,原来是什么样的系统就扩容什么系统
#将6G的空间都变成了ext4文件系统
[root@centos8 ~]#resize2fs /dev/vg0/mysql   #resize2fs只支持文件系统是ext系列的,xfs的文件系统不支持
resize2fs 1.45.6 (20-Mar-2020)
Filesystem at /dev/vg0/mysql is mounted on /mnt/mysql; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg0/mysql is now 1835008 (4k) blocks long.

[root@centos8 ~]#

#扩容成功
[root@centos8 ~]#df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
devtmpfs              devtmpfs  958M     0  958M   0% /dev
tmpfs                 tmpfs     976M     0  976M   0% /dev/shm
tmpfs                 tmpfs     976M  8.8M  967M   1% /run
tmpfs                 tmpfs     976M     0  976M   0% /sys/fs/cgroup
/dev/sda1             xfs       100G  3.1G   97G   4% /
/dev/sda2             xfs        50G   12G   39G  24% /data
/dev/sda5             ext4      976M  141M  768M  16% /boot
tmpfs                 tmpfs     298M     0  298M   0% /run/user/0
/dev/mapper/vg0-mysql ext4      6.9G  1.0G  5.5G  16% /mnt/mysql
/dev/mapper/vg0-log   xfs       2.0G   47M  2.0G   3% /mnt/log
[root@centos8 ~]#

#2.扩容log逻辑卷,是xfs文件系统
[root@centos8 ~]#df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
devtmpfs              devtmpfs  958M     0  958M   0% /dev
tmpfs                 tmpfs     976M     0  976M   0% /dev/shm
tmpfs                 tmpfs     976M  8.8M  967M   1% /run
tmpfs                 tmpfs     976M     0  976M   0% /sys/fs/cgroup
/dev/sda1             xfs       100G  3.1G   97G   4% /
/dev/sda2             xfs        50G   12G   39G  24% /data
/dev/sda5             ext4      976M  141M  768M  16% /boot
tmpfs                 tmpfs     298M     0  298M   0% /run/user/0
/dev/mapper/vg0-mysql ext4      6.9G  1.0G  5.5G  16% /mnt/mysql
/dev/mapper/vg0-log   xfs       2.0G   47M  2.0G   3% /mnt/log
[root@centos8 ~]#
#扩容1G,只是扩容了空间,但是文件系统没有扩容
[root@centos8 ~]#lvextend -L +1G /dev/vg0/log
  Size of logical volume vg0/log changed from 2.00 GiB (512 extents) to 3.00 GiB (768 extents).
  Logical volume vg0/log successfully resized.
[root@centos8 ~]#

#使用df发现大小还是2G
#扩容文件系统,xfs只能使用xfs_growfs来扩容,而且xfs的只能增加不能缩容
[root@centos8 ~]#xfs_growfs /mnt/log
meta-data=/dev/mapper/vg0-log    isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 524288 to 786432
[root@centos8 ~]#

[root@centos8 ~]#df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
devtmpfs              devtmpfs  958M     0  958M   0% /dev
tmpfs                 tmpfs     976M     0  976M   0% /dev/shm
tmpfs                 tmpfs     976M  8.8M  967M   1% /run
tmpfs                 tmpfs     976M     0  976M   0% /sys/fs/cgroup
/dev/sda1             xfs       100G  3.1G   97G   4% /
/dev/sda2             xfs        50G   12G   39G  24% /data
/dev/sda5             ext4      976M  141M  768M  16% /boot
tmpfs                 tmpfs     298M     0  298M   0% /run/user/0
/dev/mapper/vg0-mysql ext4      6.9G  1.0G  5.5G  16% /mnt/mysql
/dev/mapper/vg0-log   xfs       3.0G   54M  3.0G   2% /mnt/log
[root@centos8 ~]#

自动扩容逻辑卷

给逻辑卷增加大小以后,对于不同的文件系统还得使用不同的命令进行扩容文件系统以后才能使用df -Th看到,为了解决这个问题,下面使用自动扩容,在扩容逻辑卷的时候指定选项,就可以自动扩容成和之前一模一样的文件系统了。

#上面做完试验,还剩5G的卷组空间,全部用上
[root@centos8 ~]#lvextend -r -l +100%free /dev/vg0/mysql  #其中,-r选项用于自动调整文件系统大小以匹配逻辑卷大小的更改。-L选项用于指定逻辑卷的新大小。
  Size of logical volume vg0/mysql changed from 7.00 GiB (1792 extents) to 11.99 GiB (3070 extents).
  Logical volume vg0/mysql successfully resized.
resize2fs 1.45.6 (20-Mar-2020)
Filesystem at /dev/mapper/vg0-mysql is mounted on /mnt/mysql; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/mapper/vg0-mysql is now 3143680 (4k) blocks long.

[root@centos8 ~]#

#可以看到自动扩容了
[root@centos8 ~]#lvs
  LV    VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  log   vg0 -wi-ao----  3.00g
  mysql vg0 -wi-ao---- 11.99g
[root@centos8 ~]#vgs
  VG  #PV #LV #SN Attr   VSize  VFree
  vg0   2   2   0 wz--n- 14.99g    0
[root@centos8 ~]#df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
devtmpfs              devtmpfs  958M     0  958M   0% /dev
tmpfs                 tmpfs     976M     0  976M   0% /dev/shm
tmpfs                 tmpfs     976M  8.8M  967M   1% /run
tmpfs                 tmpfs     976M     0  976M   0% /sys/fs/cgroup
/dev/sda1             xfs       100G  3.1G   97G   4% /
/dev/sda2             xfs        50G   12G   39G  24% /data
/dev/sda5             ext4      976M  141M  768M  16% /boot
tmpfs                 tmpfs     298M     0  298M   0% /run/user/0
/dev/mapper/vg0-mysql ext4       12G  1.1G   11G   9% /mnt/mysql
/dev/mapper/vg0-log   xfs       3.0G   54M  3.0G   2% /mnt/log
[root@centos8 ~]#

扩容卷组(Volume Group)

上面测试以后,卷组的空间已经没有了,也就意味着没办法继续创建逻辑卷或者是扩容逻辑卷,下面讲解如何扩容卷组。要扩大一个LVM卷组(VG),需要增加物理卷(PV)的大小或添加新的物理卷。

步骤:

  1. 确认物理卷的可用空间:使用pvdisplay命令来查看当前每个物理卷的可用空间。
  2. 添加物理卷:使用vgextend命令来将新的物理卷添加到卷组中。
  3. 扩大逻辑卷:使用lvextend命令来扩大逻辑卷的大小。
#卷组(Volume Group)的空间是来自于物理卷(Physical Volume),所以扩容卷组就必须扩容物理卷,但是物理卷是来自于硬盘分区

#sdb之前分了5G,现在还剩15G,对这15G进行分区
[root@centos8 ~]#lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0  200G  0 disk
├─sda1          8:1    0  100G  0 part /
├─sda2          8:2    0   50G  0 part /data
├─sda3          8:3    0    2G  0 part
├─sda4          8:4    0    1K  0 part
└─sda5          8:5    0    1G  0 part /boot
sdb             8:16   0   20G  0 disk
└─sdb1          8:17   0    5G  0 part
  ├─vg0-mysql 253:0    0   12G  0 lvm  /mnt/mysql
  └─vg0-log   253:1    0    3G  0 lvm  /mnt/log
sdc             8:32   0   10G  0 disk
├─vg0-mysql   253:0    0   12G  0 lvm  /mnt/mysql
└─vg0-log     253:1    0    3G  0 lvm  /mnt/log
sr0            11:0    1  4.4G  0 rom
sr1            11:1    1 10.1G  0 rom
[root@centos8 ~]#

#分区,记得类型要改成8e
[root@centos8 ~]#fdisk /dev/sdb

Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2):
First sector (10487808-41943039, default 10487808):
Last sector, +sectors or +size{K,M,G,T,P} (10487808-41943039, default 41943039):

Created a new partition 2 of type 'Linux' and of size 15 GiB.

Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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
Disklabel type: dos
Disk identifier: 0xd528d7c1

Device     Boot    Start      End  Sectors Size Id Type
/dev/sdb1           2048 10487807 10485760   5G 8e Linux LVM
/dev/sdb2       10487808 41943039 31455232  15G 83 Linux

Command (m for help): t
Partition number (1,2, default 2):
Hex code (type L to list all codes): 8e

Changed type of partition 'Linux' to 'Linux LVM'.

Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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
Disklabel type: dos
Disk identifier: 0xd528d7c1

Device     Boot    Start      End  Sectors Size Id Type
/dev/sdb1           2048 10487807 10485760   5G 8e Linux LVM
/dev/sdb2       10487808 41943039 31455232  15G 8e Linux LVM

Command (m for help): w
The partition table has been altered.
Syncing disks.

[root@centos8 ~]#

#2.变成物理卷
[root@centos8 ~]#pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.
#3.将物理卷加到当前卷组中
[root@centos8 ~]#vgextend vg0 /dev/sdb2
  Volume group "vg0" successfully extended
[root@centos8 ~]#vgs
  VG  #PV #LV #SN Attr   VSize   VFree
  vg0   3   2   0 wz--n- <29.99g <15.00g
[root@centos8 ~]#

缩容逻辑卷(Logical Volume)

缩容逻辑卷一共分为五步:

  1. 取消挂载umont
  2. 使用e2fsck命令检查文件系统
  3. 与lvreduce区别
  4. 使用lvreduce缩减逻辑卷的大小,但是缩小之前必须先缩小逻辑卷中的文件系统大小,以便逻辑卷可以缩小到指定的大小。
  5. mount重新挂载
#查看分区利用情况
[root@centos8 ~]#df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
devtmpfs              devtmpfs  958M     0  958M   0% /dev
tmpfs                 tmpfs     976M     0  976M   0% /dev/shm
tmpfs                 tmpfs     976M  8.8M  967M   1% /run
tmpfs                 tmpfs     976M     0  976M   0% /sys/fs/cgroup
/dev/sda1             xfs       100G  3.1G   97G   4% /
/dev/sda2             xfs        50G   12G   39G  24% /data
/dev/sda5             ext4      976M  141M  768M  16% /boot
tmpfs                 tmpfs     298M     0  298M   0% /run/user/0
/dev/mapper/vg0-mysql ext4       12G  1.1G   11G   9% /mnt/mysql
/dev/mapper/vg0-log   xfs       3.0G   54M  3.0G   2% /mnt/log
[root@centos8 ~]#

#将mysql逻辑卷缩减到2G,如果太小的话可能破坏文件系统。缩容一定是在离线状态,也就是取消挂载。

[root@centos8 ~]#df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
devtmpfs              devtmpfs  958M     0  958M   0% /dev
tmpfs                 tmpfs     976M     0  976M   0% /dev/shm
tmpfs                 tmpfs     976M  8.8M  967M   1% /run
tmpfs                 tmpfs     976M     0  976M   0% /sys/fs/cgroup
/dev/sda1             xfs       100G  3.1G   97G   4% /
/dev/sda2             xfs        50G   12G   39G  24% /data
/dev/sda5             ext4      976M  141M  768M  16% /boot
tmpfs                 tmpfs     298M     0  298M   0% /run/user/0
/dev/mapper/vg0-mysql ext4       12G  1.1G   11G   9% /mnt/mysql    #将mysql从12G缩容---> 2G
/dev/mapper/vg0-log   xfs       3.0G   54M  3.0G   2% /mnt/log
[root@centos8 ~]#

#1.取消挂载
[root@centos8 ~]#umount /mnt/mysql

#2.缩容之前必须使用fsck命令进行检测一遍或者是e2fsck,如果直接缩容文件系统会提示错误
[root@centos8 ~]#resize2fs /dev/vg0/mysql 2G
resize2fs 1.45.6 (20-Mar-2020)
Please run 'e2fsck -f /dev/vg0/mysql' first.

[root@centos8 ~]#

#正确
[root@centos8 ~]#e2fsck -f /dev/vg0/mysql
e2fsck 1.45.6 (20-Mar-2020)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg0/mysql: 109/786432 files (0.0% non-contiguous), 328444/3143680 blocks
[root@centos8 ~]#

#3.使用resize2fs缩减文件系统的大小
[root@centos8 ~]#resize2fs /dev/vg0/mysql 2G
resize2fs 1.45.6 (20-Mar-2020)
Resizing the filesystem on /dev/vg0/mysql to 524288 (4k) blocks.
The filesystem on /dev/vg0/mysql is now 524288 (4k) blocks long.

[root@centos8 ~]#

#4.缩减逻辑卷大小
[root@centos8 ~]#lvreduce -L 2G /dev/vg0/mysql
  WARNING: Reducing active logical volume to 2.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/mysql? [y/n]: y
  Size of logical volume vg0/mysql changed from 11.99 GiB (3070 extents) to 2.00 GiB (512 extents).
  Logical volume vg0/mysql successfully resized.
[root@centos8 ~]#

#5.挂载
[root@centos8 ~]#mount -a

#查看是否缩减成功
[root@centos8 ~]#df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
devtmpfs              devtmpfs  958M     0  958M   0% /dev
tmpfs                 tmpfs     976M     0  976M   0% /dev/shm
tmpfs                 tmpfs     976M  8.8M  967M   1% /run
tmpfs                 tmpfs     976M     0  976M   0% /sys/fs/cgroup
/dev/sda1             xfs       100G  3.1G   97G   4% /
/dev/sda2             xfs        50G   12G   39G  24% /data
/dev/sda5             ext4      976M  141M  768M  16% /boot
tmpfs                 tmpfs     298M     0  298M   0% /run/user/0
/dev/mapper/vg0-log   xfs       3.0G   54M  3.0G   2% /mnt/log
/dev/mapper/vg0-mysql ext4      2.0G 1017M  828M  56% /mnt/mysql
[root@centos8 ~]#

#文件系统可以正常访问
[root@centos8 ~]#ls /mnt/mysql/
adjtime                  crontab                  exports      host.conf    ld.so.cache     magic                     netconfig          rc.local        shells          system-release-cpe
aliases                  crypttab                 filesystems  hostname     ld.so.conf      mailcap                   networks           redhat-release  subgid          tcsd.conf
aliases.db               csh.cshrc                fstab        hosts        libaudit.conf   mail.rc                   nsswitch.conf      resolv.conf     subgid-         test.img
anacrontab               csh.login                fuse.conf    idmapd.conf  libuser.conf    makedumpfile.conf.sample  nsswitch.conf.bak  rpc             subuid          vconsole.conf
at.deny                  DIR_COLORS               GREP_COLORS  inittab      locale.conf     man_db.conf               os-release         rsyslog.conf    subuid-         vimrc
bashrc                   DIR_COLORS.256color      group        inputrc      localtime       mime.types                passwd             screenrc        sudo.conf       virc
bindresvport.blacklist   DIR_COLORS.lightbgcolor  group-       issue        login.defs      mke2fs.conf               passwd-            services        sudoers         wgetrc
centos-release           dracut.conf              grub2.cfg    issue.net    logrotate.conf  motd                      printcap           sestatus.conf   sudo-ldap.conf  xattr.conf
centos-release-upstream  environment              gshadow      kdump.conf   lost+found      mtab                      profile            shadow          sysctl.conf     yum.conf
cron.deny                ethertypes               gshadow-     krb5.conf    machine-id      nanorc                    protocols          shadow-         system-release
[root@centos8 ~]#

拆除LVM中的硬盘

如果想移走lvm依赖的硬盘,那么必须可以将以该硬盘形成的物理卷上的数据移动到其他物理卷上。

#上面是什么意思呢?
#通过下面的命令可以看到物理卷的大小,/dev/sdc中已经Allocated的PE是1280个,说明这1280个PE中是有数据的,也就是1280*4/1024=5G的data。想要拆除这块硬盘那么就一定要将形成的物理卷上面的数据移动到其他物理卷上面,前提是其他所有的物理卷的PE加起来一定要大于1280才可以移动。
[root@centos8 ~]#pvs
  PV         VG  Fmt  Attr PSize   PFree
  /dev/sdb1  vg0 lvm2 a--   <5.00g  <5.00g
  /dev/sdb2  vg0 lvm2 a--  <15.00g <15.00g
  /dev/sdc   vg0 lvm2 a--  <10.00g  <5.00g
[root@centos8 ~]#pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg0
  PV Size               5.00 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              1279
  Free PE               1279
  Allocated PE          0
  PV UUID               wbeZD1-1JlE-LMly-bceX-ZB22-mfpi-d9e6Ts

  --- Physical volume ---
  PV Name               /dev/sdc
  VG Name               vg0
  PV Size               10.00 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              2559
  Free PE               1279
  Allocated PE          1280
  PV UUID               7ZFHtJ-SPb8-VD53-PwEE-0HV8-1Si8-gWUWd9

  --- Physical volume ---
  PV Name               /dev/sdb2
  VG Name               vg0
  PV Size               <15.00 GiB / not usable 3.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              3839
  Free PE               3839
  Allocated PE          0
  PV UUID               xgYDOJ-c3QI-ZVcI-tNIY-xdvd-n0gC-T5v4CS

[root@centos8 ~]#

#那可以看到加起来的PE大小是完全足够容纳1280的
#1.移动1280个PE所在的空间,数据也就自然而然移动了
[root@centos8 ~]#pvmove /dev/sdc
  /dev/sdc: Moved: 0.78%
  /dev/sdc: Moved: 20.00%
  /dev/sdc: Moved: 40.00%
  /dev/sdc: Moved: 80.00%
  /dev/sdc: Moved: 99.92%
  /dev/sdc: Moved: 100.00%
[root@centos8 ~]#

[root@centos8 ~]#pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg0
  PV Size               5.00 GiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              1279
  Free PE               0
  Allocated PE          1279
  PV UUID               wbeZD1-1JlE-LMly-bceX-ZB22-mfpi-d9e6Ts

  --- Physical volume ---
  PV Name               /dev/sdc
  VG Name               vg0
  PV Size               10.00 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              2559
  Free PE               2559        
  Allocated PE          0       #被分配的已经为0
  PV UUID               7ZFHtJ-SPb8-VD53-PwEE-0HV8-1Si8-gWUWd9

  --- Physical volume ---
  PV Name               /dev/sdb2
  VG Name               vg0
  PV Size               <15.00 GiB / not usable 3.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              3839
  Free PE               3838
  Allocated PE          1
  PV UUID               xgYDOJ-c3QI-ZVcI-tNIY-xdvd-n0gC-T5v4CS

[root@centos8 ~]#

#2.从卷组(vg)里面移走该物理卷(pv)
[root@centos8 ~]#vgreduce vg0 /dev/sdc
  Removed "/dev/sdc" from volume group "vg0"
[root@centos8 ~]#
#此时虽然从vg移走了,但是还是pv
[root@centos8 ~]#pvs
  PV         VG  Fmt  Attr PSize   PFree
  /dev/sdb1  vg0 lvm2 a--   <5.00g     0
  /dev/sdb2  vg0 lvm2 a--  <15.00g 14.99g
  /dev/sdc       lvm2 ---   10.00g 10.00g
[root@centos8 ~]#

#3.删除该物理卷(pv)
[root@centos8 ~]#pvremove /dev/sdc
  Labels on physical volume "/dev/sdc" successfully wiped.
[root@centos8 ~]#pvs
  PV         VG  Fmt  Attr PSize   PFree
  /dev/sdb1  vg0 lvm2 a--   <5.00g     0
  /dev/sdb2  vg0 lvm2 a--  <15.00g 14.99g
[root@centos8 ~]#

逻辑卷快照

原理:快照是特殊的逻辑卷,创建逻辑卷快照会在卷组中开辟一块空间生成逻辑卷快照。逻辑卷快照的大小可以比逻辑卷小,因为快照逻辑卷不会把所有的数据都拷贝过去,只有当主逻辑卷的数据进行第一次修改的时候,那么原来的文件就会到逻辑卷快照中,但是以后修改了,就不会移动,只保存原来的文件。但是主逻辑卷中保留的是最新的;删除的时候也是,虽然删除了,但是会把删除的文件拷贝一份到逻辑卷快照当中,但是新建的文件不会移动到快照当中。

#查看当前的逻辑卷
[root@centos8 ~]#lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg0/mysql
  LV Name                mysql
  VG Name                vg0
  LV UUID                KWP0iY-vMeL-VJSY-bo2V-xELp-HOZR-N64Sfm
  LV Write Access        read/write
  LV Creation host, time centos8.xingyuyu.com, 2023-03-09 17:46:31 +0800
  LV Status              available
  # open                 1
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/vg0/log
  LV Name                log
  VG Name                vg0
  LV UUID                0flExE-2BEV-T3sg-d1fr-oMl8-uwt2-KsXJ4A
  LV Write Access        read/write
  LV Creation host, time centos8.xingyuyu.com, 2023-03-09 17:47:21 +0800
  LV Status              available
  # open                 1
  LV Size                3.00 GiB
  Current LE             768
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

[root@centos8 ~]#

#创建mysql的快照(ext4系列)
[root@centos8 ~]#lvcreate -s -n mysql-snapshot -L 500M /dev/vg0/mysql #-s指创建快照,-n快照的名字 /dev/vg0/mysql 谁的快照这里就写谁
  Logical volume "mysql-snapshot" created.
[root@centos8 ~]#
#如果实现只读效果下面的命令
[root@centos8 ~]#lvcreate -s -n mysql-snapshot -L 500M -p r /dev/vg0/mysql #-s指创建快照,-n快照的名字 -p r 是ext系列的只读 /dev/vg0/mysql 谁的快照这里就写谁
  Logical volume "mysql-snapshot" created.
[root@centos8 ~]#

#查看基于mysql的快照
[root@centos8 ~]#lvs
  LV             VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  log            vg0 -wi-ao----   3.00g
  mysql          vg0 owi-aos---   2.00g
  mysql-snapshot vg0 swi-a-s--- 500.00m      mysql  0.01
[root@centos8 ~]#
#创建挂载点
[root@centos8 ~]#mkdir /mnt/snap
#临时挂载
[root@centos8 ~]#mount  /dev/vg0/mysql-snapshot /mnt/snap
[root@centos8 ~]#df -Th
Filesystem                      Type      Size  Used Avail Use% Mounted on
devtmpfs                        devtmpfs  958M     0  958M   0% /dev
tmpfs                           tmpfs     976M     0  976M   0% /dev/shm
tmpfs                           tmpfs     976M  8.8M  967M   1% /run
tmpfs                           tmpfs     976M     0  976M   0% /sys/fs/cgroup
/dev/sda1                       xfs       100G  3.1G   97G   4% /
/dev/sda2                       xfs        50G   12G   39G  24% /data
/dev/sda5                       ext4      976M  141M  768M  16% /boot
tmpfs                           tmpfs     298M     0  298M   0% /run/user/0
/dev/mapper/vg0-log             xfs       3.0G   54M  3.0G   2% /mnt/log
/dev/mapper/vg0-mysql           ext4      2.0G 1017M  828M  56% /mnt/mysql
/dev/mapper/vg0-mysql--snapshot ext4      2.0G 1017M  828M  56% /mnt/snap

#上面分析原理之后,快照逻辑卷中应该没有数据才对,只有当修改以后才会有,可是这里的数据跟主逻辑卷一模一样,这是其实因为这里看到的文件,并不是快照逻辑卷的,而是主逻辑卷的。
[root@centos8 ~]#ls /mnt/snap/
adjtime                  crontab                  exports      host.conf    ld.so.cache     magic                     netconfig          rc.local        shells          system-release-cpe
aliases                  crypttab                 filesystems  hostname     ld.so.conf      mailcap                   networks           redhat-release  subgid          tcsd.conf
aliases.db               csh.cshrc                fstab        hosts        libaudit.conf   mail.rc                   nsswitch.conf      resolv.conf     subgid-         test.img
anacrontab               csh.login                fuse.conf    idmapd.conf  libuser.conf    makedumpfile.conf.sample  nsswitch.conf.bak  rpc             subuid          vconsole.conf
at.deny                  DIR_COLORS               GREP_COLORS  inittab      locale.conf     man_db.conf               os-release         rsyslog.conf    subuid-         vimrc
bashrc                   DIR_COLORS.256color      group        inputrc      localtime       mime.types                passwd             screenrc        sudo.conf       virc
bindresvport.blacklist   DIR_COLORS.lightbgcolor  group-       issue        login.defs      mke2fs.conf               passwd-            services        sudoers         wgetrc
centos-release           dracut.conf              grub2.cfg    issue.net    logrotate.conf  motd                      printcap           sestatus.conf   sudo-ldap.conf  xattr.conf
centos-release-upstream  environment              gshadow      kdump.conf   lost+found      mtab                      profile            shadow          sysctl.conf     yum.conf
cron.deny                ethertypes               gshadow-     krb5.conf    machine-id      nanorc                    protocols          shadow-         system-release
[root@centos8 ~]#ls /mnt/mysql/
adjtime                  crontab                  exports      host.conf    ld.so.cache     magic                     netconfig          rc.local        shells          system-release-cpe
aliases                  crypttab                 filesystems  hostname     ld.so.conf      mailcap                   networks           redhat-release  subgid          tcsd.conf
aliases.db               csh.cshrc                fstab        hosts        libaudit.conf   mail.rc                   nsswitch.conf      resolv.conf     subgid-         test.img
anacrontab               csh.login                fuse.conf    idmapd.conf  libuser.conf    makedumpfile.conf.sample  nsswitch.conf.bak  rpc             subuid          vconsole.conf
at.deny                  DIR_COLORS               GREP_COLORS  inittab      locale.conf     man_db.conf               os-release         rsyslog.conf    subuid-         vimrc
bashrc                   DIR_COLORS.256color      group        inputrc      localtime       mime.types                passwd             screenrc        sudo.conf       virc
bindresvport.blacklist   DIR_COLORS.lightbgcolor  group-       issue        login.defs      mke2fs.conf               passwd-            services        sudoers         wgetrc
centos-release           dracut.conf              grub2.cfg    issue.net    logrotate.conf  motd                      printcap           sestatus.conf   sudo-ldap.conf  xattr.conf
centos-release-upstream  environment              gshadow      kdump.conf   lost+found      mtab                      profile            shadow          sysctl.conf     yum.conf
cron.deny                ethertypes               gshadow-     krb5.conf    machine-id      nanorc                    protocols          shadow-         system-release
[root@centos8 ~]#

[root@centos8 ~]#df -h
Filesystem                       Size  Used Avail Use% Mounted on
devtmpfs                         958M     0  958M   0% /dev
tmpfs                            976M     0  976M   0% /dev/shm
tmpfs                            976M  8.8M  967M   1% /run
tmpfs                            976M     0  976M   0% /sys/fs/cgroup
/dev/sda1                        100G  3.1G   97G   4% /
/dev/sda2                         50G   12G   39G  24% /data
/dev/sda5                        976M  141M  768M  16% /boot
tmpfs                            298M     0  298M   0% /run/user/0
/dev/mapper/vg0-log              3.0G   54M  3.0G   2% /mnt/log
/dev/mapper/vg0-mysql            2.0G 1017M  828M  56% /mnt/mysql
/dev/mapper/vg0-mysql--snapshot  2.0G 1017M  828M  56% /mnt/snap
[root@centos8 ~]#

#可以修改其中的的一个文件,删除一个,然后新增一个,以后恢复快照看看是否是预期的样子
[root@centos8 ~]#vim /mnt/mysql/fstab       #清空文件   
[root@centos8 ~]#rm -rf /mnt/mysql/motd     #删除
[root@centos8 ~]#touch /mnt/mysql/f1.txt    #创建
[root@centos8 ~]#

#还原快照,先取消挂载
[root@centos8 ~]#umount /mnt/snap
[root@centos8 ~]#umount /mnt/mysql

#将快照恢复,后面是快照的名字
[root@centos8 ~]#lvconvert --merge /dev/vg0/mysql-snapshot
  Merging of volume vg0/mysql-snapshot started.
  vg0/mysql: Merged: 100.00%

#发现快照消失了,只要快照一还原就自动删除了,这就是寿命 
[root@centos8 ~]#lvs
  LV    VG  Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  log   vg0 -wi-ao---- 3.00g
  mysql vg0 -wi-a----- 2.00g
[root@centos8 ~]#

#重新挂载
[root@centos8 ~]#ls /mnt/mysql/
adjtime                  crontab                  exports      host.conf    ld.so.cache     magic                     netconfig          rc.local        shells          system-release-cpe
aliases                  crypttab                 filesystems  hostname     ld.so.conf      mailcap                   networks           redhat-release  subgid          tcsd.conf
aliases.db               csh.cshrc                fstab        hosts        libaudit.conf   mail.rc                   nsswitch.conf      resolv.conf     subgid-         test.img
anacrontab               csh.login                fuse.conf    idmapd.conf  libuser.conf    makedumpfile.conf.sample  nsswitch.conf.bak  rpc             subuid          vconsole.conf
at.deny                  DIR_COLORS               GREP_COLORS  inittab      locale.conf     man_db.conf               os-release         rsyslog.conf    subuid-         vimrc
bashrc                   DIR_COLORS.256color      group        inputrc      localtime       mime.types                passwd             screenrc        sudo.conf       virc
bindresvport.blacklist   DIR_COLORS.lightbgcolor  group-       issue        login.defs      mke2fs.conf               passwd-            services        sudoers         wgetrc
centos-release           dracut.conf              grub2.cfg    issue.net    logrotate.conf  motd                      printcap           sestatus.conf   sudo-ldap.conf  xattr.conf
centos-release-upstream  environment              gshadow      kdump.conf   lost+found      mtab                      profile            shadow          sysctl.conf     yum.conf
cron.deny                ethertypes               gshadow-     krb5.conf    machine-id      nanorc                    protocols          shadow-         system-release
[root@centos8 ~]#cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Wed Apr 20 06:18:15 2022
#
# 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.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=ad19dd45-b7ee-485c-87e6-3c9bb8ec3996 /                       xfs     defaults        0 0
UUID=8fbb4a9c-1506-4c4a-889d-b78163091bb0 /boot                   ext4    defaults        1 2
UUID=933c390a-5904-4b01-aa6a-447c771b7f08 /data                   xfs     defaults        0 0
#UUID=98f53a44-1fb7-4139-85c6-a3c2d1633cd7 none                    swap    defaults        0 0
#UUID=430542b8-0e56-4316-8e49-e937b8b682f5 /data/mysql             ext4    defaults        0 0
#UUID=2a9d6777-78de-4af3-9b97-0ba31db1c95c none                    swap    pri=55       0 0
/data/swapfile                                  none                   swap     defaults        0 0
/dev/vg0/mysql                             /mnt/mysql              ext4     defaults        0 0
/dev/vg0/log                             /mnt/log              xfs     defaults        0 0
[root@centos8 ~]#

上面是ext4系统快照,下面是xfs系统快照

[root@centos8 ~]#df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
devtmpfs              devtmpfs  958M     0  958M   0% /dev
tmpfs                 tmpfs     976M     0  976M   0% /dev/shm
tmpfs                 tmpfs     976M  8.8M  967M   1% /run
tmpfs                 tmpfs     976M     0  976M   0% /sys/fs/cgroup
/dev/sda1             xfs       100G  3.1G   97G   4% /
/dev/sda2             xfs        50G   12G   39G  24% /data
/dev/sda5             ext4      976M  141M  768M  16% /boot
tmpfs                 tmpfs     298M     0  298M   0% /run/user/0
/dev/mapper/vg0-log   xfs       3.0G   54M  3.0G   2% /mnt/log
/dev/mapper/vg0-mysql ext4      2.0G 1017M  828M  56% /mnt/mysql
[root@centos8 ~]#

#log是xfs系统
#拷贝几个文件到/mnt/log下
[root@centos8 ~]#cp /etc/fstab /mnt/log/a.txt
[root@centos8 ~]#cp /etc/fstab /mnt/log/b.txt
[root@centos8 ~]#cp /etc/fstab /mnt/log/c.txt
[root@centos8 ~]#
#创建快照
[root@centos8 ~]#lvcreate -s -n log-snapshot -L 500M /dev/vg0/log
  Logical volume "log-snapshot" created.
[root@centos8 ~]#
#上面我们还是不加-p r选项,通过mount挂载的时候使用-o选项加
[root@centos8 ~]#mount -o ro /dev/vg0/log-snapshot /mnt/snap/
mount: /mnt/snap: wrong fs type, bad option, bad superblock on /dev/mapper/vg0-log--snapshot, missing codepage or helper program, or other error.
[root@centos8 ~]#
#这里提示报错了,这是因为xfs不允许相同的uuid进行挂载,使用选项nouuid意思就是不检查uuid

[root@centos8 ~]#mount -o ro,nouuid /dev/vg0/log-snapshot /mnt/snap/
[root@centos8 ~]#vim /mnt/log/a.txt     #删除里面所有内容
[root@centos8 ~]#rm -rf /mnt/log/b.txt
[root@centos8 ~]#touch /mnt/log/d.txt

#取消挂载
[root@centos8 ~]#umount /mnt/snap
[root@centos8 ~]#umount /mnt/log
#还原快照
[root@centos8 ~]#lvconvert --merge /dev/vg0/log-snapshot
  Merging of volume vg0/log-snapshot started.
  vg0/log: Merged: 100.00%
[root@centos8 ~]#

#重新挂载
[root@centos8 ~]#mount -a
[root@centos8 ~]#ls /mnt/log
a.txt  b.txt  c.txt
[root@centos8 ~]#

删除逻辑卷

先删除逻辑卷、再删除卷组、最后删除物理卷,然后使用fdisk删除分区

#想要删除必须先取消挂载
[root@centos8 ~]#umount /mnt/mysql
[root@centos8 ~]#umount /mnt/log
#已经看不到挂载情况了
[root@centos8 ~]#df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  958M     0  958M   0% /dev
tmpfs          tmpfs     976M     0  976M   0% /dev/shm
tmpfs          tmpfs     976M  8.8M  967M   1% /run
tmpfs          tmpfs     976M     0  976M   0% /sys/fs/cgroup
/dev/sda1      xfs       100G  3.1G   97G   4% /
/dev/sda2      xfs        50G   12G   39G  24% /data
/dev/sda5      ext4      976M  141M  768M  16% /boot
tmpfs          tmpfs     298M     0  298M   0% /run/user/0
[root@centos8 ~]#

#删除逻辑卷
[root@centos8 ~]#lvremove /dev/vg0/mysql
Do you really want to remove active logical volume vg0/mysql? [y/n]: y
  Logical volume "mysql" successfully removed.
[root@centos8 ~]#lvremove /dev/vg0/log
Do you really want to remove active logical volume vg0/log? [y/n]: y
  Logical volume "log" successfully removed.
[root@centos8 ~]#

#删除卷组
[root@centos8 ~]#lvs
[root@centos8 ~]#vgs
  VG  #PV #LV #SN Attr   VSize  VFree
  vg0   2   0   0 wz--n- 19.99g 19.99g
[root@centos8 ~]#vgremove vg0
  Volume group "vg0" successfully removed
[root@centos8 ~]#

#删除物理卷
[root@centos8 ~]#pvremove /dev/sdb{1,2}
  Labels on physical volume "/dev/sdb1" successfully wiped.
  Labels on physical volume "/dev/sdb2" successfully wiped.
[root@centos8 ~]#pvs
[root@centos8 ~]#

#删除分区
[root@centos8 ~]#lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk
├─sda1   8:1    0  100G  0 part /
├─sda2   8:2    0   50G  0 part /data
├─sda3   8:3    0    2G  0 part
├─sda4   8:4    0    1K  0 part
└─sda5   8:5    0    1G  0 part /boot
sdb      8:16   0   20G  0 disk
├─sdb1   8:17   0    5G  0 part
└─sdb2   8:18   0   15G  0 part
sdc      8:32   0   10G  0 disk
sr0     11:0    1  4.4G  0 rom
sr1     11:1    1 10.1G  0 rom
[root@centos8 ~]#

#查看sdb还是lvm类型
[root@centos8 ~]#fdisk -l
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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
Disklabel type: dos
Disk identifier: 0xd528d7c1

Device     Boot    Start      End  Sectors Size Id Type
/dev/sdb1           2048 10487807 10485760   5G 8e Linux LVM
/dev/sdb2       10487808 41943039 31455232  15G 8e Linux LVM

Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 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
Disklabel type: dos
Disk identifier: 0x64f77bbe

Device     Boot     Start       End   Sectors  Size Id Type
/dev/sda1            2048 209717247 209715200  100G 83 Linux
/dev/sda2       209717248 314574847 104857600   50G 83 Linux
/dev/sda3       314574848 318769151   4194304    2G 82 Linux swap / Solaris
/dev/sda4       318769152 419430399 100661248   48G  5 Extended
/dev/sda5  *    318773248 320870399   2097152    1G 83 Linux

Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 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
[root@centos8 ~]#

[root@centos8 ~]#fdisk /dev/sdb

Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): d
Partition number (1,2, default 2):

Partition 2 has been deleted.

Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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
Disklabel type: dos
Disk identifier: 0xd528d7c1

Device     Boot Start      End  Sectors Size Id Type
/dev/sdb1        2048 10487807 10485760   5G 8e Linux LVM

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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
Disklabel type: dos
Disk identifier: 0xd528d7c1

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

[root@centos8 ~]#

[root@centos8 ~]#lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk
├─sda1   8:1    0  100G  0 part /
├─sda2   8:2    0   50G  0 part /data
├─sda3   8:3    0    2G  0 part
├─sda4   8:4    0    1K  0 part
└─sda5   8:5    0    1G  0 part /boot
sdb      8:16   0   20G  0 disk
sdc      8:32   0   10G  0 disk
sr0     11:0    1  4.4G  0 rom
sr1     11:1    1 10.1G  0 rom
[root@centos8 ~]#
#删除干净

3.命令说明

pvcreate

  1. pvcreate是一个Linux命令,用于将一个或多个磁盘分区初始化为LVM物理卷(Physical Volume),以便将它们添加到逻辑卷管理器(Logical Volume Manager,LVM)中。
  2. LVM是Linux操作系统中一种用于管理磁盘存储的技术,它能够将多个物理磁盘或分区组合成一个或多个逻辑卷组,并通过逻辑卷将逻辑卷组的存储空间分配给文件系统或应用程序

pvcreate命令的基本语法如下:

pvcreate [选项] 物理卷名称

其中,选项包括:

  • -M:指定物理卷的元数据备份位置,默认为/dev/null。
  • -v:启用详细模式,显示创建过程中的详细信息。
  • -y:跳过确认提示,直接执行命令。

下面是一个例子:

pvcreate /dev/sdb1

这个命令会将/dev/sdb1分区初始化为一个LVM物理卷。在将分区初始化为物理卷之前,需要先确保这个分区上没有数据,否则数据将会被覆盖并丢失。

创建物理卷之后,就可以使用vgcreate命令创建逻辑卷组(Volume Group),并使用lvcreate命令创建逻辑卷(Logical Volume),最后使用mkfs命令为逻辑卷创建文件系统,并将逻辑卷挂载到文件系统中,使其可以被应用程序访问。

需要注意的是,pvcreate命令必须以root用户或拥有sudo权限的用户身份运行,否则会提示权限不足的错误信息.

vgcreate

  1. vgcreate是一个Linux命令,用于创建一个新的LVM卷组(Volume Group),可以将多个物理卷(Physical Volume)组合成一个逻辑卷组(Volume Group)来使用。

  2. LVM(Logical Volume Manager)是Linux操作系统中一种用于管理磁盘存储的技术,它能够将多个物理磁盘或分区组合成一个或多个逻辑卷组,并通过逻辑卷(Logical Volume)将逻辑卷组的存储空间分配给文件系统或应用程序。

vgcreate命令的基本语法如下:

vgcreate [选项] 卷组名称 物理卷名称

其中,选项包括:

  • -s:指定PE(Physical Extent)的大小,默认为4MB。

下面是一个例子:

vgcreate myvg /dev/sdb1 /dev/sdc1

这个命令会将/dev/sdb1和/dev/sdc1这两个物理卷组合成一个名为myvg的逻辑卷组。如果物理卷之前没有被初始化为LVM物理卷,则需要先运行pvcreate命令进行初始化。

创建逻辑卷组后,就可以使用lvcreate命令创建逻辑卷(Logical Volume),并使用mkfs命令为逻辑卷创建文件系统。然后,可以将逻辑卷挂载到文件系统中,使其可以被应用程序访问。

需要注意的是,vgcreate命令必须以root用户或拥有sudo权限的用户身份运行,否则会提示权限不足的错误信息

lvcreate

  1. lvcreate是一个Linux命令,用于创建一个新的逻辑卷(Logical Volume),将逻辑卷组(Volume Group)中的一部分存储空间分配给逻辑卷。

  2. 逻辑卷是LVM中的一种逻辑存储单元,可以将其看作是类似于传统磁盘分区的一种存储单元,可以为其分配文件系统并挂载到系统中。

lvcreate命令的基本语法如下:

lvcreate [选项] 卷组名称 -n 逻辑卷名称 -L 逻辑卷大小

其中,选项包括:

  • -l:指定逻辑卷的大小为卷组中可用的物理卷数量,例如“-l 100%VG”表示将逻辑卷大小设置为卷组中可用物理卷的100%。
  • -n:指定逻辑卷的名称。
  • -L:指定逻辑卷的大小,单位为字节、千字节、兆字节或千兆字节,例如“-L 10G”表示将逻辑卷大小设置为10GB。
  • -s: 指定是快照模式
  • -p r:只读属性,才可以挂载,指的是快照

下面是一个例子:

lvcreate -n mylv -L 10G myvg

这个命令会在名为myvg的逻辑卷组中创建一个名为mylv的逻辑卷,并将其大小设置为10GB。

创建逻辑卷之后,可以使用mkfs命令为逻辑卷创建文件系统,并使用mount命令将其挂载到文件系统中,使其可以被应用程序访问。

需要注意的是,lvcreate命令必须以root用户或拥有sudo权限的用户身份运行,否则会提示权限不足的错误信息。

pvdisplay

pvdisplayvgdisplaylvdisplay是Linux中常用的LVM(Logical Volume Manager)命令,用于显示物理卷、卷组和逻辑卷的信息。

pvdisplay命令用于显示系统中所有物理卷(Physical Volume)的详细信息,包括物理卷的名称、UUID、大小、状态等信息

pvdisplay命令的基本语法如下:

pvdisplay [选项] [物理卷名称]

其中,选项包括:

  • -c:以CSV格式显示物理卷信息。
  • -m:显示物理卷的映射信息。
  • s:以简洁格式显示物理卷信息

下面是一个例子:

pvdisplay /dev/sdb1
或者
pvdisplay

vgdisplay

vgdisplay命令用于显示系统中所有逻辑卷组(Volume Group)的详细信息,包括逻辑卷组的名称、UUID、大小、状态等信息。

vgdisplay命令的基本语法如下:

vgdisplay [选项] [卷组名称]

其中,选项包括:

  • -c:以CSV格式显示逻辑卷组信息。
  • -s:以简洁格式显示逻辑卷组信息。

lvdisplay

lvdisplay命令用于显示系统中所有逻辑卷(Logical Volume)的详细信息,包括逻辑卷的名称、UUID、大小、状态等信息。

lvdisplay命令的基本语法如下:

lvdisplay [选项] [逻辑卷名称]

其中,选项包括:

  • -c:以CSV格式显示逻辑卷信息。
  • -m:显示逻辑卷的映射信息。
  • -s:以简洁格式显示逻辑卷信息。
lvdisplay /dev/vg0/mysql

lvextend

lvextend 是 Linux 系统中用于扩展逻辑卷(Logical Volume,简称 LV)大小的命令。

使用 lvextend 命令可以将 LV 扩展到新的物理卷或者原有物理卷上空闲的空间。该命令必须以 root 用户或者拥有 sudo 权限的用户身份运行

下面是 lvextend 命令的基本语法:

lvextend [选项] LV名 [物理卷]

其中,LV名 是要扩展的 LV 的名称,物理卷 是新的物理卷或者原有物理卷上空闲的空间。

常用的选项包括:

  • -L:指定新的 LV 大小,例如 -L 10G 表示将 LV 扩展到 10GB。
  • -r:自动调整文件系统大小,该选项只能用于 ext2、ext3、ext4 和 XFS 文件系统。
  • -n:指定新的 LV 名称,用于重命名 LV。

示例:

  1. 将 LV 扩展到新的物理卷上:
lvextend -L +10G /dev/vg1/lv1 /dev/sdb1

以上命令将 /dev/sdb1 添加到卷组 vg1 中,并将 lv1 扩展到新的物理卷上,扩展的大小为 10GB。

  1. 将 LV 扩展到原有物理卷上的空闲空间:
lvextend -r -L +10G /dev/vg1/lv1

以上命令将 lv1 扩展到原有物理卷上空闲的空间,扩展的大小为 10GB,并自动调整文件系统大小

vgextend

vgextend 是 Linux 系统中用于扩展卷组(Volume Group)的命令。

卷组是物理卷(Physical Volume)的逻辑组合,而物理卷是硬盘分区或者硬盘整体。通过将多个物理卷组合成一个卷组,可以更好地管理磁盘空间。

vgextend 命令用于将新的物理卷添加到现有的卷组中,从而扩展该卷组的容量。使用 vgextend 命令时,需要指定待扩展的卷组名称和要添加到该卷组的物理卷名称。

用法:

vgextend [选项] 卷组名称 物理卷名称

其中,选项 为可选参数,可以包括以下参数:

  • -v:显示详细的扩展过程信息。
  • -f:强制执行操作,即使可能存在一些风险。
  • -A:扩展所有的卷组。

例如,假设要将名为 vg1 的卷组扩展,添加一个名为 /dev/sdb1 的物理卷。则可以使用以下命令:

vgextend vg1 /dev/sdb1

执行该命令后,vg1 卷组的容量将会增加,包括新添加的物理卷的容量。

resize2fs、xfs_growfs

resize2fsxfs_growfs都是用于调整Linux文件系统大小的工具。

resize2fs用于调整EXT2、EXT3和EXT4文件系统的大小。它可以增加或减少文件系统的大小。

xfs_growfs用于调整XFS文件系统的大小。它只能增加文件系统的大小,不能缩小。

总的来说,这两个工具都是非常有用的,因为它们可以在不影响数据的情况下调整Linux文件系统的大小,从而使得文件系统能够更好地适应存储需求的变化。

#如果不加-r,那么扩容以后不会自动调整,这个使用df -Th可以看到扩容以后的空间是没有文件系统的

#如果是ext4系列的,那么需要使用下面命令扩容:
resize2fs /dev/vg0/mysql

#如果是xfs系列的,那么需要下面命令扩容文件系统:
fs_growfs /mnt/log/ #这个需要写挂载点,而不是像上面逻辑卷

lvreduce

  • resize2fs /dev/vg0/mysql 2G 命令用于调整逻辑卷 /dev/vg0/mysql 所使用的文件系统大小为 2GB。逻辑卷的大小可以超过文件系统的大小,但是如果文件系统需要使用的空间超过逻辑卷的大小,则可能导致数据丢失或文件系统损坏。因此,在调整逻辑卷的大小之前,应该先使用 resize2fs 命令调整文件系统的大小,以确保它不会超出逻辑卷的大小。
  • lvreduce -L 2G /dev/vg0/mysql 命令用于调整逻辑卷 /dev/vg0/mysql 的大小为 2GB。它会缩小逻辑卷的大小,并自动调整文件系统的大小以适应新的逻辑卷大小。但是,需要注意的是,在缩小逻辑卷的大小之前,应该确保逻辑卷中没有超过新大小的数据。否则,数据可能会丢失。

lvresize

lvresizelvreduce 都是 LVM 命令,用于调整逻辑卷的大小,但它们的作用略有不同:

  1. lvresize 命令可以增加或缩小逻辑卷的大小。使用 lvresize 命令可以增加逻辑卷的大小,但是增加之前必须先增加物理卷的大小或者添加新的物理卷。同时,也可以使用 lvresize 命令缩小逻辑卷的大小。在缩小逻辑卷的大小之前,需要先确保逻辑卷中的文件系统大小已经被缩小到与逻辑卷一样大小。
  2. lvreduce 命令仅用于缩小逻辑卷的大小。使用 lvreduce 命令可以缩小逻辑卷的大小,但是缩小之前必须先缩小逻辑卷中的文件系统大小,以便逻辑卷可以缩小到指定的大小。在缩小逻辑卷的大小之前,需要先备份重要数据,以免数据丢失。

因此,lvresize 命令的功能更加全面,可以用于增加或缩小逻辑卷的大小,而 lvreduce 命令则只能用于缩小逻辑卷的大小。在实际使用中,需要根据具体的需求和情况来选择使用哪个命令。

lvremove

lvremove 命令用于删除一个逻辑卷(logical volume,简称 LV)。删除逻辑卷将导致该卷中的数据被永久删除,因此在执行该命令之前,应该先备份数据以避免数据丢失。

lvremove 命令的语法格式如下:

lvremove [options] LV

其中,LV 是要删除的逻辑卷名称。options 为可选参数,常用的参数如下:

  • -f:强制删除逻辑卷,不提示确认。
  • -v:显示详细信息。

例如,要删除名为 lv_data 的逻辑卷,可以使用以下命令:

lvremove /dev/vg_data/lv_data

执行该命令将提示确认是否要删除逻辑卷。如果不希望进行确认,可以添加 -f 参数:

lvremove -f /dev/vg_data/lv_data

pvremove

pvremove 命令用于从 LVM 中删除一个物理卷(physical volume,简称 PV)。执行该命令将导致该物理卷中的数据被永久删除,因此在执行该命令之前,应该先备份数据以避免数据丢失。

pvremove 命令的语法格式如下:

pvremove [options] PV

其中,PV 是要删除的物理卷名称或设备路径。options 为可选参数,常用的参数如下:

  • -f:强制删除物理卷,不提示确认。
  • -v:显示详细信息。

例如,要删除名为 /dev/sdb1 的物理卷,可以使用以下命令:

例如,要删除名为 /dev/sdb1 的物理卷,可以使用以下命令:

pvremove /dev/sdb1
Categories: LVM

邢宇宇

我是一名热情的云原生架构师和Java开发者,专注于构建可扩展的大数据解决方案。我的职业旅程始于对代码的热爱和创新技术的追求。我拥有在云计算和大数据领域深厚的技术背景,这使我能够设计和实现高效、稳健的系统。 我擅长使用Java来开发高性能的应用程序,同时也深入研究了如何利用云服务来优化数据处理过程。我热衷于探索新技术,如容器化、微服务架构和自动化,这些都是当今构建和部署现代软件解决方案的关键元素。 在我的博客中,我分享我的专业知识和行业见解,探讨最佳实践,以及如何克服在云原生生态系统中遇到的挑战。我相信通过共享和协作,我们可以推动技术的发展,创造出更好的解决方案来解决复杂问题。欢迎加入我的技术之旅,与我一起深入云原生的世界!

0 Comments

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注