Linux系统的磁盘管理-LVM实战讲解

文章目录

  • ​​Linux系统的磁盘管理-LVM实战讲解​​
  • ​​1.LVM简介​​
  • ​​2.LVM的原理​​
  • ​​3.LVM的基本组成​​
  • ​​3.1物理卷(PV,Physical Volume)​​
  • ​​3.2卷组 (VG,Volume Group)​​
  • ​​3.3逻辑卷 (LV,Logical Volume)​​
  • ​​3.4物理块 (PE,Physical Extends)​​
  • ​​4.LVM的组成关系​​
  • ​​5.LVM的优缺点​​
  • ​​5.1优点​​
  • ​​5.2缺点​​
  • ​​6.常用操作命令介绍​​
  • ​​6.1指定磁盘块PE大小​​
  • ​​6.2扩容文件系统​​
  • ​​6.3LVM的删除​​
  • ​​7.LVM扩容实战​​
  • ​​7.1实验思路​​
  • ​​7.2实战演示​​

1.LVM简介

LVM主要用于解决 服务器磁盘存储数据、分区磁盘空间不足时实现磁盘动态扩容。

2.LVM的原理

磁盘和文件系统之间增加一个逻辑层,来动态的调整文件系统的大小,从而实现对磁盘的管理

3.LVM的基本组成

3.1物理卷(PV,Physical Volume)

  1. 逻辑上的一个 物理卷 ,不能存储文件,基础逻辑存储块

3.2卷组 (VG,Volume Group)

  1. 逻辑上的一个 卷组,不能存储文件,由多个PV组成

3.3逻辑卷 (LV,Logical Volume)

  1. 最终的 逻辑卷,可以存储文件

3.4物理块 (PE,Physical Extends)

  1. 物理拓展,LVM的最小单元,一般默认4M,是4M的倍数 ,(类似于硬盘的一个扇区:一般默认512字节 )

4.LVM的组成关系

组成关系:

多个磁盘/分区/raid–>多个物理卷PV–>合成卷组VG–>从VG划出逻辑卷LV–>格式化LV挂载使用

【Linux系统的磁盘管理-LVM实战讲解】_4G

5.LVM的优缺点

5.1优点

  1. 使用卷组: 使用多个硬盘空间,看起来像一块大的硬盘
  2. 使用逻辑卷,可以跨多个硬盘空间的分区 sdb1 sdb2 sdc1 sdd2 sdf
  3. 在使用逻辑卷时,它可以在空间不足时动态调整它的大小
  4. 可以在线对LV,VG 进行创建,删除,调整大小等操作。LVM上的文件系统也需要重新调整大小。

5.2缺点

  1. 系统设置时步骤较为复杂
  2. 无法在Windows系统上进行访问,因为LVM不支持Windows。

6.常用操作命令介绍

常用命令:

【Linux系统的磁盘管理-LVM实战讲解】_运维_02

6.1指定磁盘块PE大小

-s 存储文件比较大文件, PE 调大一下,读取快

[root@localhost lv01]# vgcreate -s 16M vg03 /dev/sdb4
Volume group "vg03" successfully created
[root@localhost lv01]# vgs
VG #PV #LV #SN Attr VSize VFree
centos_anonymous 1 2 0 wz--n- <19.00g 0
vg01 1 2 0 wz--n- <4.00g 3.96g
vg02 2 0 0 wz--n- 7.99g 7.99g
vg03 1 0 0 wz--n- 3.98g 3.98g
[root@localhost lv01]# vgdisplay vg03
--- Volume group ---
VG Name vg03
System ID
Format lvm2
Metadata Areas 1
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 1
Act PV 1
VG Size 3.98 GiB
PE Size 16.00 MiB
Total PE 255
Alloc PE / Size 0 / 0
Free PE / Size 255 / 3.98 GiB
VG UUID MU9NLn-IIJG-Immq-h2DK-s1B9-BESR-OAA40w

6.2扩容文件系统

常用参数:

-L +30M 20M --50M            
-L 30M 30M

实操:

  • 方法一
    ext4 resize2fs
    XFS xfs_growfs
[root@localhost lv01]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos_anonymous -wi-ao---- <17.00g
swap centos_anonymous -wi-ao---- 2.00g
lv01 vg01 -wi-ao---- 16.00m
lv02 vg01 -wi-a----- 16.00m
[root@localhost lv01]# lvextend -L +30M /dev/vg01/lv01
Rounding size to boundary between physical extents: 32.00 MiB. ##PE必须是4M的倍数
Size of logical volume vg01/lv01 changed from 16.00 MiB (4 extents) to 48.00 MiB (12 extents).
Logical volume vg01/lv01 successfully resized.
[root@localhost lv01]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos_anonymous -wi-ao---- <17.00g
swap centos_anonymous -wi-ao---- 2.00g
lv01 vg01 -wi-ao---- 48.00m
lv02 vg01 -wi-a----- 16.00m
[root@localhost lv01]# df -Th /lv01/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 xfs 13M 896K 12M 7% /lv01
[root@localhost lv01]# xfs_
xfs_admin xfs_db xfs_fsr xfs_io xfs_metadump xfs_quota
xfs_bmap xfs_estimate xfs_growfs xfs_logprint xfs_mkfile xfs_repair
xfs_copy xfs_freeze xfs_info xfs_mdrestore xfs_ncheck xfs_rtcp
[root@localhost lv01]# xfs_growfs /dev/vg01/lv01
meta-data=/dev/mapper/vg01-lv01 isize=512 agcount=1, agsize=4096 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=4096, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 4096 to 12288
[root@localhost lv01]# df -Th /lv01/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 xfs 45M 960K 44M 3% /lv01
[root@localhost lv01]#
  • 方法二
[root@localhost lv01]# df -Th /lv01/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 xfs 45M 960K 44M 3% /lv01
[root@localhost lv01]# df -Th /lv01/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 xfs 45M 960K 44M 3% /lv01
[root@localhost lv01]# lvextend -L 80M -r /dev/vg01/lv01
Size of logical volume vg01/lv01 changed from 48.00 MiB (12 extents) to 80.00 MiB (20 extents).
Logical volume vg01/lv01 successfully resized.
meta-data=/dev/mapper/vg01-lv01 isize=512 agcount=3, agsize=4096 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=12288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 12288 to 20480
[root@localhost lv01]# df -Th /lv01/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 xfs 77M 1.0M 76M 2% /lv01

6.3LVM的删除

[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos_anonymous-root 253:0 0 17G 0 lvm /
└─centos_anonymous-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 4G 0 part
│ ├─vg01-lv01 253:2 0 80M 0 lvm /lv01
│ └─vg01-lv02 253:3 0 16M 0 lvm
├─sdb2 8:18 0 4G 0 part
│ └─vg02-lv03 253:4 0 100M 0 lvm /lv03
├─sdb3 8:19 0 4G 0 part
└─sdb4 8:20 0 4G 0 part
sr0 11:0 1 4.2G 0 rom /run/media/root/CentOS 7 x86_64
[root@localhost ~]# umount /dev/vg01/lv01
[root@localhost ~]# df -h !$
df -h /dev/vg01/lv01
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
[root@localhost ~]# lvremove /dev/vg01/lv01
Do you really want to remove active logical volume vg01/lv01? [y/n]: y
Logical volume "lv01" successfully removed
[root@localhost ~]# lvremove /dev/vg01/lv02
Do you really want to remove active logical volume vg01/lv02? [y/n]: y
Logical volume "lv02" successfully removed
[root@localhost ~]# vgremove vg01
Volume group "vg01" successfully removed
[root@localhost ~]# pvremove /dev/sdb1
Labels on physical volume "/dev/sdb1" successfully wiped.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos_anonymous-root 253:0 0 17G 0 lvm /
└─centos_anonymous-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 4G 0 part
├─sdb2 8:18 0 4G 0 part
│ └─vg02-lv03 253:4 0 100M 0 lvm /lv03
├─sdb3 8:19 0 4G 0 part
└─sdb4 8:20 0 4G 0 part
sr0 11:0 1 4.2G 0 rom /run/media/root/CentOS 7 x86_64
[root@localhost ~]#

7.LVM扩容实战

7.1实验思路

  1. 创建磁盘、分区
  2. 创建PV
  3. 创建VG
  4. 创建LV
  5. 格式化挂载LV

7.2实战演示

  1. 创建磁盘,分区
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos_anonymous-root 253:0 0 17G 0 lvm /
└─centos_anonymous-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sr0 11:0 1 4.2G 0 rom /run/media/root/CentOS 7 x86_64


[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x1287997e 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+4G
分区 1 已设置为 Linux 类型,大小设为 4 GiB

命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):
Using default response p
分区号 (2-4,默认 2):
起始 扇区 (8390656-41943039,默认为 8390656):
将使用默认值 8390656
Last 扇区, +扇区 or +size{K,M,G} (8390656-41943039,默认为 41943039):+4G
分区 2 已设置为 Linux 类型,大小设为 4 GiB

命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p):
Using default response p
分区号 (3,4,默认 3):
起始 扇区 (16779264-41943039,默认为 16779264):
将使用默认值 16779264
Last 扇区, +扇区 or +size{K,M,G} (16779264-41943039,默认为 41943039):+4G
分区 3 已设置为 Linux 类型,大小设为 4 GiB

命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): p
已选择分区 4
起始 扇区 (25167872-41943039,默认为 25167872):
将使用默认值 25167872
Last 扇区, +扇区 or +size{K,M,G} (25167872-41943039,默认为 41943039):+4G
分区 4 已设置为 Linux 类型,大小设为 4 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x1287997e

设备 Boot Start End Blocks Id System
/dev/sdb1 2048 8390655 4194304 83 Linux
/dev/sdb2 8390656 16779263 4194304 83 Linux
/dev/sdb3 16779264 25167871 4194304 83 Linux
/dev/sdb4 25167872 33556479 4194304 83 Linux

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# ll /dev/sdb*
brw-rw----. 1 root disk 8, 16 11月 14 14:08 /dev/sdb
brw-rw----. 1 root disk 8, 17 11月 14 14:08 /dev/sdb1
brw-rw----. 1 root disk 8, 18 11月 14 14:08 /dev/sdb2
brw-rw----. 1 root disk 8, 19 11月 14 14:08 /dev/sdb3
brw-rw----. 1 root disk 8, 20 11月 14 14:08 /dev/sdb4

2.创建PV

[root@localhost ~]# pvcreate /dev/sdb{1..4}
Device /dev/sdb4 not found (or ignored by filtering).
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdb3" successfully created.
Physical volume "/dev/sdb4" successfully created.
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos_anonymous lvm2 a-- <19.00g 0
/dev/sdb1 lvm2 --- 4.00g 4.00g
/dev/sdb2 lvm2 --- 4.00g 4.00g
/dev/sdb3 lvm2 --- 4.00g 4.00g
/dev/sdb4 lvm2 --- 4.00g 4.00g
[root@localhost ~]#

3.创建VG

[root@localhost ~]# vgcreate vg01 /dev/sdb1
Volume group "vg01" successfully created
[root@localhost ~]# vgdisplay vg01
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 1
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 1
Act PV 1
VG Size <4.00 GiB
PE Size 4.00 MiB
Total PE 1023
Alloc PE / Size 0 / 0
Free PE / Size 1023 / <4.00 GiB
VG UUID lb05QT-DCip-Lcbx-sahb-dKA1-KAnc-nHXnYD

[root@localhost ~]#

4.创建LV

[root@localhost ~]# lvcreate -n lv01 -L 16M vg01 
Logical volume "lv01" created.
[root@localhost ~]# lvcreate -n lv02 -l 4 vg01
Logical volume "lv02" created.
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos_anonymous -wi-ao---- <17.00g
swap centos_anonymous -wi-ao---- 2.00g
lv01 vg01 -wi-a----- 16.00m
lv02 vg01 -wi-a----- 16.00m
[root@localhost ~]# lvdisplay /dev/vg01/lv01
--- Logical volume ---
LV Path /dev/vg01/lv01
LV Name lv01
VG Name vg01
LV UUID DjHCEk-m7Ng-oCE2-sQjH-UoiK-fDif-KIRtMM
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2022-11-14 14:40:38 +0800
LV Status available
# open 0
LV Size 16.00 MiB
Current LE 4
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2

5.格式化挂载LV

[root@localhost ~]# mkdir /lv01
[root@localhost ~]# mkfs.xfs /dev/vg01/lv01
meta-data=/dev/vg01/lv01 isize=512 agcount=1, agsize=4096 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=4096, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mount !$ /lv01/
mount /dev/vg01/lv01 /lv01/
[root@localhost ~]# df -Th /lv01/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 xfs 13M 896K 12M 7% /lv01
[root@localhost ~]#