一、前言
悟已往之不谏,知来者之可追。实迷途其未远,觉今是而昨非。舟遥遥以轻飏,风飘飘而吹衣。问征夫以前路,恨晨光之熹微。
第一版我已经全部放到我的精选里了,大家可以点开我的头像主页,选择精选观看,本系列依照《Linux就该这么学》第二版随书学习练习操作,将一些课本上不顺畅的地方,全部以最简方式免费开源展示给大家,资源大家可以自行百度,学习起来我们既要多巴胺也要内啡肽。
趁着你还年轻,做一个牛逼的人,世上不缺伯乐,缺的是千里马,短期利益看工资,长期利益看发展,都不沾看自己是不是不够优秀,为啥会到如今这个地步,算一下自己的岁数,想想多少次想突破一下却望而却步,不肯迈出第一步。人生无心外之物,诸相皆由心生,不要老想着补短板,把长板加长,让别人看到你。踏踏实实学,天塌了都挨不着你来顶,送上一首天王的<周杰伦-蜗牛>,不够牛的时候请闭紧嘴巴,低下头做事。
7.1 RAID磁盘冗余阵列
RAID 0、RAID 1、RAID 5与RAID 10这4种最常见的方案。这4种方案的对比,n代表硬盘总数。
RAID级别 | 最少硬盘 | 可用容量 | 读写性能 | 安全性 | 特点 |
0 | 2 | n | n | 低 | 追求最大容量和速度,任何一块盘损坏,数据全部异常。 |
1 | 2 | n/2 | n | 高 | 追求最大安全性,只要阵列组中有一块硬盘可用,数据不受影响。 |
5 | 3 | n-1 | n-1 | 中 | 在控制成本的前提下,追求硬盘的最大容量、速度及安全性,允许有一块硬盘异常,数据不受影响。 |
10 | 4 | n/2 | n/2 | 高 | 综合RAID1和RAID0的优点,追求硬盘的速度和安全性,允许有一半硬盘异常(不可同组),数据不受影响 |
1. RAID 0
RAID 0技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入各个物理硬盘中,数据被分别写入到不同的硬盘设备中,即硬盘A和硬盘B设备会分别保存数据资料,最终实现提升读取、写入速度的效果。
2. RAID 1
把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。
3. RAID 5
RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中,实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据,RAID 5最少由3块硬盘组成,使用的是硬盘切割(Disk Striping)技术。
4. RAID 10
RAID 10技术是RAID 1+RAID 0技术的一个“组合体”RAID 10技术需要至少4块硬盘来组建,其中先分别两两制作成RAID 1磁盘阵列,以保证数据的安全性;然后再对两个RAID 1磁盘阵列实施RAID 0技术,进一步提高硬盘设备的读写速度,在不考虑成本的情况下RAID 10的性能也超过了RAID 5,因此当前成为广泛使用的一种存储技术。
7.1.1 部署磁盘阵列
在虚拟机中添加4块硬盘设备来制作一个RAID 10磁盘阵列,mdadm命令用于创建、调整、监控和管理RAID设备,语法格式为“mdadm参数 硬盘名称”之前的盘删掉,新增四块硬盘
mdadm命令常用参数和作用
参数 | 作用 |
-a | 检测设备名称 |
-n | 指定设备数量 |
-l | 指定RAID级别 |
-C | 创建 |
-v | 显示过程 |
-f | 模拟设备损坏 |
-r | 移除设备 |
-Q | 查看摘要信息 |
-D | 查看详细信息 |
-S | 停止RAID磁盘阵列 |
我在加盘之前,把旧盘给删了,这会导致一个问题,之前在/etc/fstab
上边绑定的盘失效,然后会有一些异常,我们紧急登录后把这些配置删掉,[root@localhost ~]# systemctl reboot
使用mdadm命令创建RAID 10,名称为“/dev/md0”-C参数代表创建一个RAID阵列卡;在后面追加一个设备名称/dev/md0,/dev/md0就是创建后的RAID磁盘阵列的名称;-v参数显示创建的过程,-n 4参数代表使用4块硬盘来部署这个RAID磁盘阵列;而-l 10参数则代表RAID 10方案;最后再加上4块硬盘设备的名称
先查看一下盘名称:
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 10.1G 0 rom /run/media/centos8/CentOS-8-5-2111-x86_64-dvd
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 300M 0 part /boot
├─nvme0n1p2 259:2 0 2G 0 part [SWAP]
└─nvme0n1p3 259:3 0 17.7G 0 part /
nvme0n2 259:4 0 20G 0 disk
nvme0n3 259:5 0 20G 0 disk
nvme0n4 259:6 0 20G 0 disk
nvme0n5 259:7 0 20G 0 disk
发现这四块盘后,我们再进行分配
[root@localhost ~]# mdadm -Cv /dev/md0 -n 4 -l 10 /dev/nvme0n2 /dev/nvme0n3 /dev/nvme0n4 /dev/nvme0n5
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
初始化过程大约需要1分钟左右,期间可以用-D参数进行查看。也可以用-Q参数查看简要信息:
[root@localhost ~]# mdadm -Q /dev/md0
/dev/md0: 39.97GiB raid10 4 devices, 0 spares. Use mdadm --detail for more detail.
80G变成40G,也对应了RAID 10的存储方式,把制作好的RAID磁盘阵列格式化为Ext4格式:
[root@localhost ~]# mkfs.ext4 /dev/md0
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 10477056 4k blocks and 2621440 inodes
Filesystem UUID: ced31587-3113-4b0e-9768-0151f26c0804
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done
创建挂载点,将硬盘设备进行挂载操作:
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 878M 0 878M 0% /dev
tmpfs 896M 0 896M 0% /dev/shm
tmpfs 896M 9.6M 886M 2% /run
tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/nvme0n1p3 18G 7.1G 11G 41% /
/dev/nvme0n1p1 295M 194M 102M 66% /boot
tmpfs 179M 24K 179M 1% /run/user/1000
/dev/sr0 11G 11G 0 100% /run/media/centos8/CentOS-8-5-2111-x86_64-dvd
/dev/md0 40G 49M 38G 1% /RAID10
查看/dev/md0磁盘阵列设备的详细信息,确认RAID级别(Raid Level)、阵列大小(Array Size)和总硬盘数(Total Devices)都是否正确:
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Nov 23 09:58:23 2023
Raid Level : raid10
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Nov 23 10:20:49 2023
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 : 6d6c0abc:bb461271:f1b30a0b:b7d55fe5
Events : 17
Number Major Minor RaidDevice State
0 259 4 0 active sync set-A /dev/nvme0n2
1 259 5 1 active sync set-B /dev/nvme0n3
2 259 6 2 active sync set-A /dev/nvme0n4
3 259 7 3 active sync set-B /dev/nvme0n5
将信息添加到/etc/fstab文件中,这样可以确保在每次重启后RAID磁盘阵列都是有效的
[root@localhost ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
7.1.2 损坏磁盘阵列及修复
确认有一块物理硬盘设备出现损坏而不能再继续正常使用后,应该使用mdadm命令将其移除,然后查看RAID磁盘阵列的状态,可以发现状态已经改变,使用的-f参数是让硬盘模拟损坏的效果。为了能够彻底地将故障盘移除:
[root@localhost ~]# mdadm /dev/md0 -f /dev/nvme0n2
mdadm: set /dev/nvme0n2 faulty in /dev/md0
[root@localhost ~]# mdadm /dev/md0 -r /dev/nvme0n2
mdadm: hot removed /dev/nvme0n2 from /dev/md0
在RAID 10级别的磁盘阵列中,当RAID 1磁盘阵列中存在一个故障盘时并不影响RAID 10磁盘阵列的使用,购买了新的硬盘设备后再使用mdadm命令予以替换即可,更换硬盘后再次使用-a参数进行添加操作,系统默认会自动开始数据的同步工作,在虚拟机中模拟硬盘,所以先重启系统,然后再把新的硬盘添加到RAID磁盘阵列中。
硬盘发生故障,服务器上相应的指示灯也会变成红灯(或者变成一直闪烁的黄灯)
7.1.3 删除磁盘阵列
将所有的磁盘都设置成停用状态:
[root@localhost ~]# umount /RAID
[root@localhost ~]# mdadam -D /dev/md0
Number Major Minor RaidDevice State
- 0 0 0 removed
1 259 5 1 active sync set-B /dev/nvme0n3
2 259 6 2 active sync set-A /dev/nvme0n4
3 259 7 3 active sync set-B /dev/nvme0n5
故障一台之后就不能停用另一台:
[root@localhost ~]# mdadm /dev/md0 -f /dev/nvme0n3
mdadm: set device faulty failed for /dev/nvme0n3: Device or resource busy
这时我们终止RAID即可
[root@localhost ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0
删除相关设备文件
[root@localhost ~]# mdadm -r /dev/md0
mdadm: error opening /dev/md0: No such file or directory
7.1.4 磁盘阵列+备份盘
RAID 10磁盘阵列中最多允许50%的硬盘设备发生故障,但是存在这样一种极端情况,即同一RAID 1磁盘阵列中的硬盘设备若全部损坏,也会导致数据丢失,可以使用RAID备份盘技术来预防这类事故。该技术的核心理念就是准备一块足够大的硬盘,这块硬盘平时处于闲置状态,一旦RAID磁盘阵列中有硬盘出现故障后则会马上自动顶替上去。
部署RAID 5磁盘阵列时,至少需要用到3块硬盘,还需要再加一块备份硬盘(也叫热备盘),所以总计需要在虚拟机中模拟4块硬盘设备
创建一个RAID 5磁盘阵列+备份盘。在下面的命令中,参数-n 3代表创建这个RAID 5磁盘阵列所需的硬盘数,参数-l 5代表RAID的级别,而参数-x 1则代表有一块备份盘。当查看/dev/md0(即RAID 5磁盘阵列的名称)磁盘阵列的时候,就能看到有一块备份盘在等待中
[root@localhost ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/nvme0n2 /dev/nvme0n3 /dev/nvme0n4 /dev/nvme0n5
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: /dev/nvme0n2 appears to be part of a raid array:
level=raid10 devices=4 ctime=Thu Nov 23 09:58:23 2023
mdadm: /dev/nvme0n3 appears to be part of a raid array:
level=raid10 devices=4 ctime=Thu Nov 23 09:58:23 2023
mdadm: /dev/nvme0n4 appears to be part of a raid array:
level=raid10 devices=4 ctime=Thu Nov 23 09:58:23 2023
mdadm: /dev/nvme0n5 appears to be part of a raid array:
level=raid10 devices=4 ctime=Thu Nov 23 09:58:23 2023
mdadm: size set to 20954112K
Continue creating array?
y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Nov 29 11:20:40 2023
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Wed Nov 29 11:21:14 2023
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 0
Spare Devices : 2
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 35% complete
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 2f7781e6:5a9c9b33:a740c87c:c0ab5f33
Events : 6
Number Major Minor RaidDevice State
0 259 4 0 active sync /dev/nvme0n2
1 259 5 1 active sync /dev/nvme0n3
4 259 6 2 spare rebuilding /dev/nvme0n4
3 259 7 - spare /dev/nvme0n5
将部署好的RAID 5磁盘阵列格式化为Ext4文件格式,然后挂载到目录上
[root@localhost ~]# mkfs.ext4 /dev/md0
mke2fs 1.45.6 (20-Mar-2020)
/dev/md0 contains a ext4 file system
last mounted on Thu Nov 23 10:20:18 2023
Proceed anyway? (y,N)
y
Creating filesystem with 10477056 4k blocks and 2621440 inodes
Filesystem UUID: 59761aa9-ba71-4829-9486-15956b9149b2
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
由3块硬盘组成的RAID 5磁盘阵列,其对应的可用空间是n-1,也就是40GB。热备盘的空间不计算进来,处于休眠状态,只有在意外出现时才会开始工作。
[root@localhost ~]# mount -a
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 878M 0 878M 0% /dev
tmpfs 896M 0 896M 0% /dev/shm
tmpfs 896M 9.3M 886M 2% /run
tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/nvme0n1p3 18G 7.1G 11G 41% /
/dev/nvme0n1p1 295M 194M 102M 66% /boot
tmpfs 179M 12K 179M 1% /run/user/42
tmpfs 179M 0 179M 0% /run/user/0
/dev/md0 40G 49M 38G 1% /RAID
把硬盘设备/dev/nvme0n2移出磁盘阵列,然后迅速查看/dev/md0磁盘阵列的状态,就会发现备份盘已经被自动顶替上去并开始了数据同步
[root@localhost ~]# mdadm /dev/md0 -f /dev/nvme0n2
mdadm: set /dev/nvme0n2 faulty in /dev/md0
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Nov 29 11:20:40 2023
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Nov 30 16:09:28 2023
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 16% complete
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 2f7781e6:5a9c9b33:a740c87c:c0ab5f33
Events : 24
Number Major Minor RaidDevice State
3 259 7 0 spare rebuilding /dev/nvme0n5
1 259 5 1 active sync /dev/nvme0n3
4 259 6 2 active sync /dev/nvme0n4
0 259 4 - faulty /dev/nvme0n2
后面想再添加一块热备盘进来,使用-a参数就可以
7.2 LVM逻辑卷管理器
逻辑卷管理器(Logical Volume Manager,LVM)。LVM允许用户对硬盘资源进行动态调整,在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。
举例:小明家里想吃馒头,但是面粉不够了,于是妈妈从隔壁老王家、老李家、老张家分别借来一些面粉,准备蒸馒头吃首先需要把这些面粉(物理卷[Physical Volume,PV])揉成一个大面团(卷组[Volume Group],VG),然后再把这个大面团分割成一个个小馒头(逻辑卷[Logical Volume,LV]),而且每个小馒头的重量必须是每勺面粉(基本单元[Physical Extent,PE])的倍数
卷组(VG)的剩余容量不足,可以随时将新的物理卷(PV)加入到里面,进行不断地扩容。
物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列。卷组建立在物理卷之上,一个卷组能够包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。这就是LVM的核心理念。
7.2.1 部署逻辑卷
常用的LVM部署命令
功能/命令 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
扫描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
显示 | pvdisplay | vgdisplay | lvdisplay |
删除 | pvremove | vgremove | lvremove |
扩展 | vgextend | lvextend | |
缩小 | vgreduce | lvreduce |
将虚拟机还原到初始状态,并重新添加两块新硬盘设备
根据需求把合并后的卷组切割出一个约为150MB的逻辑卷设备,最后把这个逻辑卷设备格式化成Ext4文件系统后挂载使用
第1步:让新添加的两块硬盘设备支持LVM技术。
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 10.1G 0 rom
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 300M 0 part /boot
├─nvme0n1p2 259:2 0 2G 0 part [SWAP]
└─nvme0n1p3 259:3 0 17.7G 0 part /
nvme0n2 259:4 0 20G 0 disk
nvme0n3 259:5 0 20G 0 disk
[root@localhost ~]# pvcreate /dev/nvme0n2 /dev/nvme0n3
Physical volume "/dev/nvme0n2" successfully created.
Physical volume "/dev/nvme0n3" successfully created.
第2步:把两块硬盘设备加入到weihongbin卷组中,然后查看卷组的状态。
[root@localhost ~]# vgcreate weihongbin /dev/nvme0n2 /dev/nvme0n3
Volume group "weihongbin" successfully created
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name weihongbin
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 39.99 GiB
PE Size 4.00 MiB
Total PE 10238
Alloc PE / Size 0 / 0
Free PE / Size 10238 / 39.99 GiB
VG UUID 2Jsrhk-Rl3b-wgJA-YVix-921P-joNQ-DGEpbh
第3步:再切割出一个约为150MB的逻辑卷设备。
在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位,所使用的参数为-L。使用-L 150M生成一个大小为150MB的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB。使用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷
[root@localhost ~]# lvcreate -n vo -l 37 weihongbin
Logical volume "vo" created.
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/weihongbin/vo
LV Name vo
VG Name weihongbin
LV UUID 88vHc4-PTQe-wx2c-Ssi9-DuXe-MIff-Xb1l3e
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-11-30 16:29:03 +0800
LV Status available
# open 0
LV Size 148.00 MiB
Current LE 37
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
第4步:把生成好的逻辑卷进行格式化,然后挂载使用。
[root@localhost ~]# mkfs.ext4 /dev/weihongbin/vo
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 151552 1k blocks and 38000 inodes
Filesystem UUID: 77738f1a-73b5-4e8f-8eac-5886cd9fb375
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]# mkdir /weihongbin
[root@localhost ~]# mount /dev/weihongbin/vo /weihongbin
使用了逻辑卷管理器,则不建议用XFS文件系统,因为XFS文件系统自身就可以使用xfs_growfs命令进行磁盘扩容。
第5步:查看挂载状态,并写入配置文件,使其永久生效。
[root@localhost ~]# echo "/dev/weihongbin/vo /weihongbin ext4 defaults 0 0" >> /etc/fstab
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 878M 0 878M 0% /dev
tmpfs 896M 0 896M 0% /dev/shm
tmpfs 896M 9.3M 886M 2% /run
tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/nvme0n1p3 18G 7.1G 11G 41% /
/dev/nvme0n1p1 295M 194M 102M 66% /boot
tmpfs 179M 12K 179M 1% /run/user/42
tmpfs 179M 0 179M 0% /run/user/0
/dev/mapper/weihongbin-vo 140M 1.6M 128M 2% /weihongbin
7.2.2 扩容逻辑卷
只要卷组中有足够的资源,就可以一直为逻辑卷扩容。扩容前请一定要记得卸载设备和挂载点的关联。
[root@localhost ~]# umount /weihongbin
第1步:把上一个实验中的逻辑卷vo扩展至290MB。
[root@localhost ~]# lvextend -L 290M /dev/weihongbin/vo
Rounding size to boundary between physical extents: 292.00 MiB.
Size of logical volume weihongbin/vo changed from 148.00 MiB (37 extents) to 292.00 MiB (73 extents).
Logical volume weihongbin/vo successfully resized.
第2步:检查硬盘的完整性,确认目录结构、内容和文件内容没有丢失。一般情况下没有报错,均为正常情况。
[root@localhost ~]# e2fsck -f /dev/weihongbin/vo
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/weihongbin/vo: 11/38000 files (0.0% non-contiguous), 10453/151552 blocks
第3步:重置设备在系统中的容量。刚刚是对LV(逻辑卷)设备进行了扩容操作,但系统内核还没有同步到这部分新修改的信息,需要手动进行同步。
[root@localhost ~]# resize2fs /dev/weihongbin/vo
resize2fs 1.45.6 (20-Mar-2020)
Resizing the filesystem on /dev/weihongbin/vo to 299008 (1k) blocks.
The filesystem on /dev/weihongbin/vo is now 299008 (1k) blocks long.
第4步:重新挂载硬盘设备并查看挂载状态。
[root@localhost ~]# mount -a
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 878M 0 878M 0% /dev
tmpfs 896M 0 896M 0% /dev/shm
tmpfs 896M 9.3M 886M 2% /run
tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/nvme0n1p3 18G 7.1G 11G 41% /
/dev/nvme0n1p1 295M 194M 102M 66% /boot
tmpfs 179M 12K 179M 1% /run/user/42
tmpfs 179M 0 179M 0% /run/user/0
/dev/mapper/weihongbin-vo 279M 2.1M 259M 1% /weihongbin
7.2.3 缩小逻辑卷
相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,数据丢失的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。在执行缩容操作前记得先把文件系统卸载掉。
[root@localhost ~]# umount /weihongbin
第1步:检查文件系统的完整性。
[root@localhost ~]# e2fsck -f /dev/weihongbin/vo
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/weihongbin/vo: 11/74000 files (0.0% non-contiguous), 15507/299008 blocks
第2步:通知系统内核将逻辑卷vo的容量减小到120MB。
[root@localhost ~]# resize2fs /dev/weihongbin/vo 120M
resize2fs 1.45.6 (20-Mar-2020)
Resizing the filesystem on /dev/weihongbin/vo to 122880 (1k) blocks.
The filesystem on /dev/weihongbin/vo is now 122880 (1k) blocks long.
第3步:将LV逻辑卷的容量修改为120M。
[root@localhost ~]# lvreduce -L 120M /dev/weihongbin/vo
WARNING: Reducing active logical volume to 120.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce weihongbin/vo? [y/n]:
y
Size of logical volume weihongbin/vo changed from 292.00 MiB (73 extents) to 120.00 MiB (30 extents).
Logical volume weihongbin/vo successfully resized.
第4步:重新挂载文件系统并查看系统状态。
[root@localhost ~]# mount -a
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 878M 0 878M 0% /dev
tmpfs 896M 0 896M 0% /dev/shm
tmpfs 896M 9.3M 886M 2% /run
tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/nvme0n1p3 18G 7.1G 11G 41% /
/dev/nvme0n1p1 295M 194M 102M 66% /boot
tmpfs 179M 12K 179M 1% /run/user/42
tmpfs 179M 0 179M 0% /run/user/0
/dev/mapper/weihongbin-vo 113M 1.6M 103M 2% /weihongbin
实际内存有3%左右的“缩水”,所以是113而不是120
7.2.4 逻辑卷快照
LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。
LVM的快照卷功能有两个特点:快照卷的容量必须等同于逻辑卷的容量;快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。
看看VG(卷组)中的容量是否够用:
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name weihongbin
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 39.99 GiB
PE Size 4.00 MiB
Total PE 10238
Alloc PE / Size 30 / 120.00 MiB
Free PE / Size 10208 / <39.88 GiB
VG UUID 2Jsrhk-Rl3b-wgJA-YVix-921P-joNQ-DGEpbh
卷组中已经使用了120MB的容量,空闲容量还有39.88GB
重定向往逻辑卷设备所挂载的目录中写入一个文件。
[root@localhost ~]# echo "123" > /weihongbin/test.txt
[root@localhost ~]# ll /weihongbin/
total 14
drwx------. 2 root root 12288 Nov 30 16:30 lost+found
-rw-r--r--. 1 root root 4 Nov 30 16:53 test.txt
第1步:使用-s参数生成一个快照卷,使用-L参数指定切割的大小,需要与要做快照的设备容量保持一致。
[root@localhost ~]# lvcreate -L 120M -s -n KUAIZHAO /dev/weihongbin/vo
Logical volume "KUAIZHAO" created.
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/weihongbin/KUAIZHAO
LV Name KUAIZHAO
VG Name weihongbin
LV UUID cYz6Wy-pv9T-W7w8-EX2S-oOpC-GeBq-XW03UE
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-11-30 16:56:56 +0800
LV snapshot status active destination for vo
LV Status available
# open 0
LV Size 120.00 MiB
Current LE 30
COW-table size 120.00 MiB
COW-table LE 30
Allocated to snapshot 0.01%
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:3
第2步:在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再查看快照卷的状态。
[root@localhost ~]# dd if=/dev/zero of=/weihongbin/files count=1 bs=100M
1+0 records in
1+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 1.31263 s, 79.9 MB/s
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/weihongbin/KUAIZHAO
LV Name KUAIZHAO
VG Name weihongbin
LV UUID cYz6Wy-pv9T-W7w8-EX2S-oOpC-GeBq-XW03UE
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-11-30 16:56:56 +0800
LV snapshot status active destination for vo
LV Status available
# open 0
LV Size 120.00 MiB
Current LE 30
COW-table size 120.00 MiB
COW-table LE 30
Allocated to snapshot 83.71%
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:3
第3步:为了校验快照卷的效果,需要对逻辑卷进行快照还原操作。lvconvert命令用于管理逻辑卷的快照,语法格式为“lvconvert [参数]快照卷名称”。使用lvconvert命令能自动恢复逻辑卷的快照,输入--merge参数进行操作,系统会自动分辨设备的类型。
[root@localhost ~]# umount /weihongbin
[root@localhost ~]# lvconvert --merge /dev/weihongbin/KUAIZHAO
Merging of volume weihongbin/KUAIZHAO started.
weihongbin/vo: Merged: 100.00%
第4步:快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的100MB的垃圾文件也被清除了。
[root@localhost ~]# mount -a
[root@localhost ~]# ll /weihongbin/
total 14
drwx------. 2 root root 12288 Nov 30 16:30 lost+found
-rw-r--r--. 1 root root 4 Nov 30 16:53 test.txt
7.2.5 删除逻辑卷
重新部署LVM或者不再需要使用LVM时,则需要执行LVM的删除操作。需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。
第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。
[root@localhost ~]# umount /weihongbin
[root@localhost ~]# vim /etc/fstab
/dev/weihongbin/vo /weihongbin ext4 defaults 0 0
第2步:删除逻辑卷设备,需要输入y来确认操作。删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。删除物理卷设备。(顺序不能错)
[root@localhost ~]# lvremove /dev/weihongbin/vo
Do you really want to remove active logical volume weihongbin/vo? [y/n]:
y
Logical volume "vo" successfully removed.
[root@localhost ~]# vgremove weihongbin
Volume group "weihongbin" successfully removed
[root@localhost ~]# pvremove /dev/nvme0n2 /dev/nvme0n3
Labels on physical volume "/dev/nvme0n2" successfully wiped.
Labels on physical volume "/dev/nvme0n3" successfully wiped.
二、巩固练习
1.RAID技术主要是为了解决什么问题?
答:RAID技术可以解决存储设备的读写速度问题及数据的冗余备份问题。
2.RAID 0和RAID 5哪个更安全?
答:RAID 0没有数据冗余功能,因此RAID 5更安全。
3.假设使用4块硬盘来部署RAID 10方案,外加一块备份盘,最多可以允许几块硬盘同时损坏呢?
答:最多允许5块硬盘设备中的3块设备同时损坏。
4.位于LVM最底层的是物理卷还是卷组?
答:最底层的是物理卷,然后再通过物理卷组成卷组。
5.LVM对逻辑卷的扩容和缩容操作有何异同点呢?
答:扩容和缩容操作都需要先取消逻辑卷与目录的挂载关联;扩容操作是先扩容后检查文件系统完整性,而缩容操作为了保证数据的安全,需要先检查文件系统完整性再缩容。
6.LVM的快照卷能使用几次?
答:只可使用一次,而且使用后即自动删除。
7.LVM的删除顺序是怎么样的?
答:依次移除逻辑卷、卷组和物理卷。
三、跋文
如果想上手操作的同学们可以通过阿里云ecs服务器免费试用参与或低价购买专属于自己的服务器入口如下↓↓↓↓↓