硬raid与软raid

磁盘阵列冗余技术

区别

硬RAID:通过用硬件来实现RAID功能的就是硬RAID,比如:各种RAID卡,还有主板集成能够做的RAID都是硬RAID。

软RAID:通过用操作系统来完成RAID功能的就是软RAID,比如:在Linux操作系统下,用3块硬盘做的RAID5。


  • 软raid会额外消耗cpu资源,造成服务器压力,影响性能
  • 硬raid更加稳定且软raid可能造成磁盘发热超量,造成损坏;
  • 硬raid兼容性更好,软raid兼容性依赖于操作系统,可能出问题;
  • 软raid安全性不好,当硬盘损坏它不能实现重构,而硬raid可以,且当raid卡损坏,可以通过更换实现不丢失数据。

软raid搭建

搭建raid10(1+0),4块硬盘。

创建4块虚拟硬盘

检查磁盘信息

1
fdisk -l

搭建raid10

使用mdadm命令,用于建设、管理和监控raid技术的命令

mdadm命令

需要先安装该命令

1
yum install mdadm -y

创建raid10

1
mdadm -Cv /dev/md0 -a yes -n

参数说明

1
2
3
4
5
6
7
-C 表示创建Raid阵列
-v 表示显示创建过程
/dev/md0 表示raid阵列的名字
-a yes 自动创建阵列设备文件
-n 4 表示用四块硬盘创建阵列
-l 10 表示raid级别
最后加上四块硬盘的名字

执行演示

1
2
3
4
5
6
7
[root@localhost ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 10476544K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

针对磁盘阵列设备,进行文件系统格式化

格式化/dev/md0为xfs文件系统

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# mkfs.xfs /dev/md0
meta-data=/dev/md0 isize=512 agcount=16, agsize=327296 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5236736, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0d

针对分区进行挂载

创建挂载文件夹

1
mkdir /mnt1

挂载

1
mount /dev/md0 /mnt1

检查挂载情况

1
mount -l
1
2
...
/dev/md0 on /mnt1 type xfs (rw,relatime,seclabel,attr2,inode64,sunit=1024,swidth=2048,noquota)

最后显示设备md0已挂载!


使用df命令,检查挂载空间使用情况

1
2
3
4
5
6
7
8
9
10
[root@localhost /]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 899M 0 899M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 9.6M 901M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 2.6G 15G 15% /
/dev/sda1 xfs 1014M 189M 826M 19% /boot
tmpfs tmpfs 182M 0 182M 0% /run/user/0
/dev/md0 xfs 20G 33M 20G 1% /mnt1

为什么size20G呢?

查询raid情况

1
mdadm -D /dev/md0 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@localhost /]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Aug 3 15:52:10 2022
Raid Level : raid10
Array Size : 20953088 (19.98 GiB 21.46 GB)
Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Wed Aug 3 17:59:25 2022
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Layout : near=2
Chunk Size : 512K

Consistency Policy : resync

Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 9db711f3:9c55a474:2a7846c3:7f74896e
Events : 19

Number Major Minor RaidDevice State
0 8 16 0 active sync set-A /dev/sdb
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde

因为raid10采用了raid0和raid1的技术,raid1技术使用了备份盘,4个盘中一半用作备份。

检查的方法可以生成多个文件,观察文件大小和占用空间!

开机自动挂载至/mnt

编辑/etc/fstab

1
2
3
[root@localhost mnt]# vi /etc/fstab
[root@localhost mnt]# tail -1 /etc/fstab
/dev/md0 /mnt xfs defaults 0 0

模拟raid故障

从raid硬盘组中剔除一块硬盘

剔除命令

1
mdadm /dev/md0 -f /dev/sdd

执行演示

1
2
[root@localhost mnt]# mdadm /dev/md0 -f /dev/sdd
mdadm: set /dev/sdd faulty in /dev/md0

检查raid

1
mdadm -D /dev/md0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@localhost mnt]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Aug 3 15:52:10 2022
Raid Level : raid10
Array Size : 20953088 (19.98 GiB 21.46 GB)
Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Wed Aug 3 18:28:03 2022
State : clean, degraded
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0

Layout : near=2
Chunk Size : 512K

Consistency Policy : resync

Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 9db711f3:9c55a474:2a7846c3:7f74896e
Events : 21

Number Major Minor RaidDevice State
0 8 16 0 active sync set-A /dev/sdb
1 8 32 1 active sync set-B /dev/sdc
- 0 0 2 removed
3 8 64 3 active sync set-B /dev/sde

2 8 48 - faulty /dev/sdd

我们看到Failded Devices:1正在运行的设备为3个。

1
2
3
[root@localhost mnt]# cd /mnt
[root@localhost mnt]# ls
test1.txt test2.txt test3.txt test4.txt test5.txt test6.txt

我们可以发现,即使挂掉一个硬盘,也不会影响整个raid10的使用

添加硬盘

我们再将剔除的硬盘添加回设备

1
mdadm /dev/md0 -a /dev/sdd

执行演示

1
2
[root@localhost /]# mdadm /dev/md0 -a /dev/sdd
mdadm: Cannot open /dev/sdd: Device or resource busy

这时报错,需要我们重启机器reboot

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Last login: Wed Aug  3 18:11:08 2022 from 192.168.41.1
[root@localhost ~]# mdadm /dev/md0 -a /dev/sdd
mdadm: added /dev/sdd
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Aug 3 15:52:10 2022
Raid Level : raid10
Array Size : 20953088 (19.98 GiB 21.46 GB)
Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Wed Aug 3 18:37:59 2022
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Layout : near=2
Chunk Size : 512K

Consistency Policy : resync

Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 9db711f3:9c55a474:2a7846c3:7f74896e
Events : 44

Number Major Minor RaidDevice State
0 8 16 0 active sync set-A /dev/sdb
1 8 32 1 active sync set-B /dev/sdc
4 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde

重启,添加硬盘后等待raid10故障修复完毕。

raid10的重启

创建raid配置文件

1
echo DEVICE /dev/sd[b-e] > /etc/mdadm.conf

执行演示

1
2
3
[root@localhost ~]# echo DEVICE /dev/sd[b-e] > /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde

扫描磁盘阵列信息,追加到配置文件中

1
mdadm -Ds >> /etc/mdadm.conf
1
2
3
4
[root@localhost ~]# mdadm -Ds >> /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde
ARRAY /dev/md/0 metadata=1.2 name=localhost.localdomain:0 UUID=9db711f3:9c55a474:2a7846c3:7f74896e

取消挂载

md0

1
umount /dev/md0

停止raid10

1
mdadm -S /dev/md0

执行演示

1
2
[root@localhost ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0

检查一下磁盘阵列的信息

1
mdadm -D /dev/md0 

执行演示

1
2
[root@localhost ~]# mdadm -D /dev/md0
mdadm: cannot open /dev/md0: No such file or directory

我们发现停止raid后,已经找不到设备文件的了!

启动raid10

1
mdadm -A /dev/md0

执行演示

1
2
[root@localhost ~]# mdadm -A /dev/md0
mdadm: /dev/md0 has been started with 4 drives.

再次检查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Aug 3 15:52:10 2022
Raid Level : raid10
Array Size : 20953088 (19.98 GiB 21.46 GB)
Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Wed Aug 3 18:55:10 2022
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Layout : near=2
Chunk Size : 512K

Consistency Policy : resync

Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 9db711f3:9c55a474:2a7846c3:7f74896e
Events : 44

Number Major Minor RaidDevice State
0 8 16 0 active sync set-A /dev/sdb
1 8 32 1 active sync set-B /dev/sdc
4 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde

raid10信息正常!

raid10的删除

取消挂载

1
umount /dev/md0

停止raid服务

1
mdadm -S /dev/md0

卸载raid10中所有的磁盘信息

1
2
3
4
mdadm --misc --zero-superblock /dev/sdb
mdadm --misc --zero-superblock /dev/sdc
mdadm --misc --zero-superblock /dev/sdd
mdadm --misc --zero-superblock /dev/sde

删除raid配置文件

1
rm /etc/mdadm.conf

清除开机自动挂载

1
2
vi /etc/fstab
#删除raid相关行,保存

raid与备份盘

使用3个硬盘搭建raid5,剩下的一个搭建备份盘

搭建raid5

1
mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde

执行演示

1
2
3
4
5
6
7
[root@localhost ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 10476544K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

检查阵列组信息

1
mdadm -D /dev/md0

执行演示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Aug 3 19:28:17 2022
Raid Level : raid5
Array Size : 20953088 (19.98 GiB 21.46 GB)
Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Wed Aug 3 19:29:10 2022
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 512K

Consistency Policy : resync

Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : bd00f14c:fdca48d0:461d34c0:f2eca4a3
Events : 18

Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd

3 8 64 - spare /dev/sde

针对阵列组进行格式化文件系统

1
mkfs.xfs /dev/md0

执行演示

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# mkfs.xfs /dev/md0
mkfs.xfs: /dev/md0 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
[root@localhost ~]# mkfs.xfs /dev/md0 -f
meta-data=/dev/md0 isize=512 agcount=16, agsize=327296 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5236736, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

挂载

1
mount /mnt

写入数据文件检查raid状况

1
2
3
4
5
6
7
8
cd /mnt
echo {1..1000000} > test1.txt
echo {1..1000000} >> test1.txt
echo {1..1000000} >> test1.txt
cp test1.txt test2.txt
cp test1.txt test3.txt
cp test1.txt test4.txt
cp test1.txt test5.txt

检查

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost mnt]# du -h
110M .
[root@localhost mnt]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 899M 0 899M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 9.6M 901M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 2.6G 15G 15% /
/dev/sda1 xfs 1014M 189M 826M 19% /boot
tmpfs tmpfs 182M 0 182M 0% /run/user/0
/dev/md0 xfs 20G 143M 20G 1% /mnt

备份磁盘的作用体现

我们从第一次检查阵列信息可知,sde为备份盘

剔除一块磁盘sdb

1
mdadm /dev/md0 -f /dev/sdb

检查raid状态

1
mdadm -D /dev/md0
1
2
3
4
5
6
7
8
9
...
Rebuild Status : 72% complete
...
Number Major Minor RaidDevice State
3 8 64 0 spare rebuilding /dev/sde
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd

0 8 16 - faulty /dev/sdb

Rebuild Status : n% complete

备份盘自动加入阵列组


lvm逻辑卷技术

raid磁盘阵列技术,提高磁盘读写效率以及数据安全;

raid的缺点

当配置好raid后,容量大小被限定,如果存储服务非常多,就会出现磁盘空间不够用需要扩容,这将会非常麻烦!不同磁盘分区相对独立没有任何联系,可能空间利用率低

如果某个分区满了,默认磁盘管理无法直接扩容,只能重新分区,分配容量大小,创建文件系统,非常麻烦!

如果需要合并分区,还是需要重新格式化分区,还需要进行数据备份。

LVM技术

logical volume manager 逻辑卷管理技术

lvm技术是一个或多个磁盘在逻辑上进行合并,相当于用一个大的磁盘去使用。

当磁盘空间不足,可以直接去其他磁盘拿取空间。

image-20220803201152709

lvm优点

文件系统可以跨越多个磁盘,分区大小不受容量限制;

可以在系统运行中,直接动态扩容文件系统大小;

可以直接增加新的硬盘,到vg卷组中。

lvm使用方式

基于分区形式创建lvm

硬盘多个分区,由lvm统一进行管理为卷组,可以弹性调整卷组大小,加入新硬盘,可以充分的利用磁盘容量;

文件系统是创建在逻辑卷上,逻辑卷可以根据需求改变大小(总容量控制在卷组中)。

基于硬盘创建lvm

多块硬盘做成逻辑卷,将整个逻辑卷统一管理,对分区进行动态扩容。

lvm常见名词

PP(physical partition)物理分区

lvm直接创建在物理分区之上

PV(physical volume)物理卷

处于lvm最底层,一般一个pv对应一个pp。

PE(physical extends)物理区域

pv中可以用于分配的最小存储单位,同一个vg所有的pv中的pe大小相同,例如:1M,2M。

VG(volume group)卷组

卷组创建在pv之上,可以划分多个pv

LE(logical extends)逻辑拓展单元

le是组成lv的基本单元,一个le对应一个pe

LV(logical volume)逻辑卷

创建在vg之上,是一个可以动态拓容的分区概念

图解

imgimage-20220803202454933

lvm原理

LVM动态扩容大熊,其实就是通过互相交换PE的构成,达到弹性扩容分区大小;

想要减少空间容量,就是减少PE;

想要增加空间容量,需要增加PE;

PE默认大小一般都是4M,LVM最多可以创建65534个PE,因此LVM最大的VG卷组单位是256G;

LV逻辑卷的概念相当于普通分区的概念(/dev/sda,/dev/sdb)

lvm创建流程

物理分区阶段

针对物理磁盘或者分区,进行fdisk格式化,修改系统的id,默认是83,改为8e类型,是lvm类型

fdisk,修改磁盘的系统id

创建PV的阶段

通过pvcreate,pvdisplay将linux分区改为物理卷pv

pvcreate,创建pv

pvdisplay,显示pv信息

创建VG的阶段

通过vgcreate,vgdisplay将创建好的物理卷pv改为物理卷组vg

vgcreate,创建vg

vgdisplay,显示卷组信息

创建LV的阶段

通过lvcreate,lvdisplay将卷组分为若干个逻辑卷

lvcreate,创建lv

lvdisplay,显示lv信息

格式化文件系统

开始使用lv分区

lvm的管理命令

创建物理卷

语法

1
pvcreate [option] <设备名>

参数

1
2
3
4
-f:强制创建物理卷,不需要用户确认;
-u:指定设备的UUID;
-y:所有的问题都回答“yes”;
-Z:是否利用前4个扇区。

扫描物理卷信息

语法

1
pvscan [options]

参数

1
2
3
4
5
-d:调试模式;
-e:仅显示属于输出卷组的物理卷;
-n:仅显示不属于任何卷组的物理卷;
-s:短格式输出;
-u:显示UUID。

显示各个物理卷信息

语法

1
pvdisplay [option] <设备名>

参数

1
2
-s:以短格式输出;
-m:显示PE到LE的映射。

删除物理卷

语法

1
pvremove [option] <设备名>

参数

1
2
3
-d # 调试模式;
-f # 强制删除;
-y # 对提问回答“yes”。

其它命令都类似(lv,vg)

缩小卷组

语法

1
vgreduce [option] <设备名>

参数

1
2
-a:如果命令行中没有指定要删除的物理卷,则删除所有的空物理卷;
--removemissing:删除卷组中丢失的物理卷,使卷组恢复正常状态。

扩大卷组

语法

1
vgextend [option] <设备名> 

参数

1
2
-d:调试模式;
-t:仅测试。

lvm创建实践

创建pv

1
2
3
[root@localhost /]# pvcreate /dev/sdb /dev/sdc
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.

创建卷组

1
2
[root@localhost /]# vgcreate vg1 /dev/sdb /dev/sdc
Volume group "vg1" successfully created

创建一个叫做vg1的卷组,卷组的成员为sdb、sdc,也就是说vg1的总容量为sdb+sdc总和

扫描一下物理卷并显示详细信息

1
2
3
4
5
[root@localhost /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb vg1 lvm2 a-- <10.00g <10.00g
/dev/sdc vg1 lvm2 a-- <10.00g <10.00g
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@localhost /]# pvdisplay
--- Physical volume ---
PV Name /dev/sdb
VG Name vg1
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 saQbwU-1cnv-uVVx-j32n-7y6U-v88e-hA5eXr

--- Physical volume ---
PV Name /dev/sdc
VG Name vg1
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 o27ac2-2uPj-XuV8-6lMc-c5Ds-86Zc-AC3RcD

--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <19.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4863
Free PE 0
Allocated PE 4863
PV UUID LYVzwm-oAOF-Uxwx-m6tO-Ocrx-D64J-wvpb3G

扫描一下卷组并显示详细信息

1
2
3
4
5
[root@localhost /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb vg1 lvm2 a-- <10.00g <10.00g
/dev/sdc vg1 lvm2 a-- <10.00g <10.00g
1
2
3
4
[root@localhost /]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
vg1 2 0 0 wz--n- 19.99g 19.99g
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
[root@localhost /]# vgdisplay
--- Volume group ---
VG Name vg1
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 19.99 GiB
PE Size 4.00 MiB
Total PE 5118
Alloc PE / Size 0 / 0
Free PE / Size 5118 / 19.99 GiB
VG UUID ccw34M-26uf-aL32-YgUj-X88K-5LtL-9RDhJN

--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <19.00 GiB
PE Size 4.00 MiB
Total PE 4863
Alloc PE / Size 4863 / <19.00 GiB
Free PE / Size 0 / 0
VG UUID 1yoKAw-PbS4-y8er-9cpG-28Pw-5wve-wIRRBO

尝试扩容

先利用sdd创建一个物理卷

1
2
[root@localhost /]# pvcreate /dev/sdd
Physical volume "/dev/sdd" successfully created.

扩容vg

1
vgextend vg1 /dev/sdd

执行演示

1
2
[root@localhost /]# vgextend vg1 /dev/sdd
Volume group "vg1" successfully extended

尝试缩小卷组大小

剔除sdd

1
vgreduce vg1 /dev/sdd

执行演示

1
2
[root@localhost /]# vgreduce vg1 /dev/sdd
Removed "/dev/sdd" from volume group "vg1"

最后最好把物理卷也删除!

1
pvremove /dev/sdd

执行演示

1
2
[root@localhost /]# pvremove /dev/sdd
Labels on physical volume "/dev/sdd" successfully wiped.

创建逻辑卷

创建一个叫作lv1的逻辑卷,大小500M,从vg1中创建

1
lvcreate -n lv1 -L +500M vg1

执行演示

1
2
[root@localhost /]# lvcreate -n lv1 -L +500M vg1
Logical volume "lv1" created.

对lv1进行格式化文件系统

相当于买来一个磁盘进行格式化系统

1
mkfs.xfs /dev/vg1/lv1

执行演示

1
2
3
4
5
6
7
8
9
10
[root@localhost /]# mkfs.xfs /dev/vg1/lv1
meta-data=/dev/vg1/lv1 isize=512 agcount=4, agsize=32000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=128000, 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

查看一下文件系统情况

1
lsblk -f 

执行演示

1
2
3
...
sdb LVM2_member saQbwU-1cnv-uVVx-j32n-7y6U-v88e-hA5eXr
└─vg1-lv1 xfs

挂载到/mnt2

1
mount /dev/vg1/lv1 /mnt2

写入数据文件并查看容量

1
2
3
4
5
6
7
8
cd /mnt2
echo {1..1000000} > test1.txt
echo {1..1000000} >> test1.txt
echo {1..1000000} >> test1.txt
cp test1.txt test2.txt
cp test1.txt test3.txt
cp test1.txt test4.txt
cp test1.txt test5.txt
1
2
[root@localhost mnt2]# df -hT|grep lv1
/dev/mapper/vg1-lv1 xfs 497M 124M 373M 25% /mnt2

开机自动挂载

写入/etc/fstab文件

追加一行

1
/dev/vg1/lv1 /mnt2 xfs defaults 0 0

手动读取/etc/fstab

1
2
mount -a
# -a, --all 挂载 fstab 中的所有文件系统

针对lv逻辑卷的扩容操作

500M不够用了 !只要卷组中的容量够,那么就可以给逻辑卷扩容!

先取消挂载

1
umount /mnt2

拓展10G

1
lvextend -L +10G /dev/vg1/lv1

执行演示

1
2
3
[root@localhost mnt2]# lvextend -L +10G /dev/vg1/lv1
Size of logical volume vg1/lv1 changed from 500.00 MiB (125 extents) to <10.49 GiB (2685 extents).
Logical volume vg1/lv1 successfully resized.

检查效果

1
2
3
4
5
[root@localhost /]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-ao---- 2.00g
lv1 vg1 -wi-ao---- <10.49g
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
--- Logical volume ---
LV Path /dev/vg1/lv1
LV Name lv1
VG Name vg1
LV UUID 9WNut4-1KvY-LdnV-flQ9-Dk26-UGJw-RscNUw
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2022-08-03 21:25:28 +0800
LV Status available
# open 1
LV Size <10.49 GiB
Current LE 2685
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
1
2
[root@localhost /]# df -hT|grep lv
/dev/mapper/vg1-lv1 xfs 497M 124M 373M 25% /mnt2

我们发现使用df -hT命令查询文件系统情况时,容量大小并为发生变化,此时需要调整xfs文件系统大小

1
xfs_growfs /dev/vg1/lv1

执行演示

1
2
3
4
5
6
7
8
9
10
11
[root@localhost /]# xfs_growfs /dev/vg1/lv1
meta-data=/dev/mapper/vg1-lv1 isize=512 agcount=4, agsize=32000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=128000, 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 128000 to 2749440

再次使用df -hT

1
2
[root@localhost /]# df -hT|grep lv
/dev/mapper/vg1-lv1 xfs 11G 128M 11G 2% /mnt2

改变!

再次挂载

1
mount /dev/vg1/lv1 /mnt2

lvm卸载

注意数据备份

取消挂载

1
umount /mnt2

卸载lv

1
lvremove /dev/vg1/lv1

执行演示

1
2
[root@localhost /]# lvremove /dev/vg1/lv1 -y
Logical volume "lv1" successfully removed

卸载vg

可以直接加-y参数,同意删除

1
vgremove vg1

执行演示

1
2
3
4
[root@localhost /]# lvremove /dev/vg1/lv1 -y
Logical volume "lv1" successfully removed
[root@localhost /]# vgremove vg1
Volume group "vg1" successfully removed

卸载pv

1
pvremove /dev/sdb /dev/sdc

执行演示

1
2
3
[root@localhost /]# pvremove /dev/sdb /dev/sdc
Labels on physical volume "/dev/sdb" successfully wiped.
Labels on physical volume "/dev/sdc" successfully wiped.

检查是否全部卸载

1
2
3
pvs
vgs
lvs

执行演示

1
2
3
4
5
6
7
8
9
10
[root@localhost /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
[root@localhost /]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
[root@localhost /]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-ao---- 2.00g