1. RAID(独立冗余磁盘阵列)
出于成本和技术方面的考虑,需要针对不同的需求在数据可靠性及读写性能上做出权衡,制定出满足各自需求的不同方案。目前已有的 RAID 磁盘阵列的方案至少有十几种,而刘下表所列出的 RAID 0、RAID 1、RAID 5 与 RAID 10 这 4 种最常见。这 4 种方案的对比如表所示,其中 n 代表硬盘总数。
1.1 RAID 0
RAID 0 技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入各个物理硬盘中。这样一来,在最理想的状态下,硬盘设备的读写性能会提升数倍,但是若任意一块硬盘发生故障,将导致整个系统的数据都受到破坏。通俗来说,RAID 0 技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力。如图所示,数据被分别写入到不同的硬盘设备中,即硬盘 A 和硬盘 B 设备会分别保存数据资料,最终实现提升读取、写入速度的效果。
1.2 RAID 1
尽管 RAID 0 技术提升了硬盘设备的读写速度,但它是将数据依次写入到各个物理硬盘中。也就是说,它的数据是分开存放的,其中任何一块硬盘发生故障都会损坏整个系统的数据。因此,如果生产环境对硬盘设备的读写速度没有要求,而是希望增加数据的安全性时,就需要用到 RAID 1 技术了。
在图所示的 RAID 1 技术示意图中可以看到,它是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。
考虑到在进行写入操作时因硬盘切换带来的开销,因此 RAID 1 的速度会比 RAID 0 有微弱地降低。但在读取数据的时候,操作系统可以分别从两块硬盘中读取信息,因此理论读取速度的峰值可以是硬盘数量的倍数。另外,平时只要保证有一块硬盘稳定运行,数据就不会出现损坏的情况,可靠性较高。
RAID 1 技术虽然十分注重数据的安全性,但是因为是在多块硬盘设备中写入了相同的数据,因此硬盘设备的利用率得以下降。从理论上来说,上图所示的硬盘空间的真实可用率只有 50%,由 3 块硬盘设备组成的 RAID 1 磁盘阵列的可用率只有 33%左右;以此类推。而且,由于需要把数据同时写入到两块以上的硬盘设备,这无疑也在一定程度上增大了系统计算功能的负载。
那么,有没有一种 RAID 方案既考虑到了硬盘设备的读写速度和数据安全性,还兼顾了成本问题呢?实际上,单从数据安全和成本问题上来讲,就不可能在保持原有硬盘设备的利用率且还不增加新设备的情况下,能大幅提升数据的安全性。下面将要讲解的 RAID 5 技术虽然在理论上兼顾了三者(读写速度、数据安全性、成本),但实际上更像是对这三者的“相互妥协”。
1.3 RAID 5
如下图所示,RAID5 技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID 5 磁盘阵列中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上。这样的好处是,其中任何一设备损坏后不至于出现致命缺陷。图中 Parity 部分存放的就是数据的奇偶校验信息。换句话说,就是 RAID 5 技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID 这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性
RAID 5 最少由 3 块硬盘组成,使用的是硬盘切割(Disk Striping)技术。相较于 RAID 1级别,好处就在于保存的是奇偶校验信息而不是一模一样的文件内容,所以当重复写入某个文件时,RAID 5 级别的磁盘阵列组只需要对应一个奇偶校验信息就可以,效率更高,存储成本也会随之降低。
1.4 RAID 10
RAID 5 技术是出于硬盘设备的成本问题对读写速度和数据的安全性能有了一定的妥协,但是大部分企业更在乎的是数据本身的价值而非硬盘价格,因此在生产环境中主要使用 RAID 10 技术。
顾名思义,RAID 10 技术是 RAID 1+RAID 0 技术的一个“组合体”。如图所示,RAID 10 技术需要至少 4 块硬盘来组建,其中先分别两两制作成 RAID 1 磁盘阵列,以保证数据的安全性;然后再对两个 RAID 1 磁盘阵列实施 RAID 0 技术,进一步提高硬盘设备的读写速度。这样从理论上来讲,只要坏的不是同一阵列中的所有硬盘,那么最多可以损坏 50%的硬盘设备而不丢失数据。由于 RAID 10 技术继承了 RAID 0 的高读写速度和 RAID 1 的数据安全性,在不考虑成本的情况下 RAID 10 的性能也超过了 RAID 5,因此当前成为广泛使用的一种存储技术。
注:由于 RAID 10 是由 RAID 1 和 RAID 0 组成的,因此正确的叫法是“RAID 一零”,而不是“RAID 十”。
仔细查看图可以发现,RAID 10 是先对信息进行分割,然后再两两一组制作镜像。也就是先将 RAID 1 作为最低级别的组合,然后再使用 RAID 0 技术将 RAID 1 磁盘阵列组合到一起,将它们视为“一整块”硬盘。而 RAID 01 则相反,它是先将硬盘分为两组,然后使用 RAID 0 作为最低级别的组合,再将这两组 RAID 0 硬盘通过 RAID 1 技术组合到一起。
RAID 10 技术和 RAID 01 技术的区别非常明显。在 RAID 10 中,任何一块硬盘损坏都不会影响到数据安全性,其余硬盘均会正常运作。但在 RAID 01 中,只要有任何一块硬盘损坏,最低级别的 RAID 0 磁盘阵列马上会停止运作,这可能造成严重隐患。所以 RAID 10 远比 RAID 01 常见,很多主板甚至不支持 RAID 01。
1.5 部署磁盘阵列
在具备了硬盘设备管理基础之后,再来部署 RAID 和 LVM 就变得十分轻松了。首先,需要在虚拟机中添加 4 块硬盘设备来制作一个 RAID 10 磁盘阵列,如图所示。这里不再详述添加硬盘的步骤,大家自己操作就行。记得硬盘要用 SCSI 或 SATA 接口的类型,大小默认 20GB 就可以。 需要注意的是,一定要记得在关闭系统之后,再在虚拟机中添加硬盘设备,否则可能会因为计算机架构的不同而导致虚拟机系统无法识别新添加的硬盘设备。
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 19.5G 0 part ├─rhel00-swap 253:0 0 2G 0 lvm [SWAP]└─rhel00-root 253:1 0 17.5G 0 lvm /
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 500M 0 part
└─sdb2 8:18 0 19.5G 0 part ├─rhel-swap 253:2 0 2G 0 lvm └─rhel-root 253:3 0 17.5G 0 lvm
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 2G 0 part
└─sdc2 8:34 0 5G 0 part
sdd 8:48 0 20G 0 disk
sde 8:64 0 20G 0 disk
sdf 8:80 0 20G 0 disk
sr0 11:0 1 1024M 0 rom
使用lsblk命令查看当前块的状态,可以用sdc、sdd、sde、sdf作为RAID的模块。
当前,生产环境中用到的服务器一般都配备 RAID 阵列卡,尽管服务器的价格越来越便宜,但是我们没有必要为了做一个实验而去单独购买一台服务器,而是可以学会使用 mdadm命令在 Linux 系统中创建和管理软件 RAID 磁盘阵列,而且它涉及的理论知识和操作过程与生产环境中的完全一致。
mdadm 命令用于创建、调整、监控和管理 RAID 设备,英文全称为“multiple devices admin”。
语法格式:mdadm 参数 硬盘名称
mdadm 命令中的常用参数及作用如表所示。 接下来,使用 mdadm 命令创建 RAID 10,名称为“/dev/md0”。
此时,就需要使用 mdadm 中的参数了。其中,-C 参数代表创建一个 RAID 阵列卡;-v参数显示创建的过程,同时在后面追加一个设备名称/dev/md0,这样/dev/md0 就是创建后的RAID 磁盘阵列的名称;-n 4 参数代表使用 4 块硬盘来部署这个 RAID 磁盘阵列;而-l 10 参数则代表 RAID 10 方案;最后再加上 4 块硬盘设备的名称就搞定了。
[root@localhost ~]# mdadm -Cv /dev/md0 -n 4 -l 10 /dev/sdc /dev/sdd /dev/sde /dev/sdf
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: /dev/sdc appears to be part of a raid array:level=raid0 devices=0 ctime=Thu Jan 1 08:00:00 1970
mdadm: partition table exists on /dev/sdc but will be lost ormeaningless after creating array
mdadm: size set to 20954624K
Continue creating array? y
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.
注:这里的可用空间只有39.97GB ,而不是80G 。原因是RAID 10 技术的原理。它通过两两一组硬盘组成的 RAID 1 磁盘阵列保证了数据的可靠性,其中每一份数据都会被保存两次,因此导致硬盘存在 50%的使用率和 50%的冗余率。这样一来,80GB 的硬盘容量也就只有一半了。
等两三分钟后,把制作好的 RAID 磁盘阵列格式化为 Ext4 格式:
[root@localhost ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477312 blocks
523865 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
随后,创建挂载点,将硬盘设备进行挂载操作:
[root@localhost ~]# mkdir /RAID
[root@localhost ~]# mount /dev/md0 /RAID
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel00-root 18G 2.9G 15G 17% /
devtmpfs 985M 0 985M 0% /dev
tmpfs 994M 136K 994M 1% /dev/shm
tmpfs 994M 8.9M 986M 1% /run
tmpfs 994M 0 994M 0% /sys/fs/cgroup
/dev/sda1 497M 119M 379M 24% /boot
/dev/md0 40G 49M 38G 1% /RAID
再来查看/dev/md0 磁盘阵列设备的详细信息,确认 RAID 级别(Raid Level)、阵列大小(Array Size)和总硬盘数(Total Devices)都是否正确:
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:Version : 1.2Creation Time : Fri Nov 15 10:55:16 2024Raid Level : raid10Array Size : 41909248 (39.97 GiB 42.92 GB)Used Dev Size : 20954624 (19.98 GiB 21.46 GB)Raid Devices : 4Total Devices : 4Persistence : Superblock is persistentUpdate Time : Fri Nov 15 11:09:53 2024State : clean Active Devices : 4
Working Devices : 4Failed Devices : 0Spare Devices : 0Layout : near=2Chunk Size : 512KName : localhost.localdomain:0 (local to host localhost.localdomain)UUID : 0de6ea7f:c853cc41:98b07488:49bc0c2fEvents : 17Number Major Minor RaidDevice State0 8 32 0 active sync /dev/sdc1 8 48 1 active sync /dev/sdd2 8 64 2 active sync /dev/sde3 8 80 3 active sync /dev/sdf
如果想让创建好的 RAID 磁盘阵列能够一直提供服务,不会因每次的重启操作而取消,那么一定要记得将信息添加到/etc/fstab 文件中,这样可以确保在每次重启后 RAID 磁盘阵列都是有效的。
[root@localhost ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Nov 15 10:39:48 2024
#
# 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
#
/dev/mapper/rhel00-root / xfs defaults 1 1
UUID=5ec78fc3-f211-4e00-8f6f-dee7eee45c1f /boot xfs defaults 1 2
/dev/mapper/rhel00-swap swap swap defaults 0 0
/dev/md0 /RAID ext4 defaults 0 0
1.6 损坏磁盘阵列及修复
下面讲解一下 RAID 磁盘阵列损坏后的处理方法:在确认有一块物理硬盘设备出现损坏而不能再继续正常使用后,应该使用 mdadm 命令将其移除,然后查看 RAID 磁盘阵列的状态,可以发现状态已经改变:
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md0
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:Version : 1.2Creation Time : Fri Nov 15 10:55:16 2024Raid Level : raid10Array Size : 41909248 (39.97 GiB 42.92 GB)Used Dev Size : 20954624 (19.98 GiB 21.46 GB)Raid Devices : 4Total Devices : 4Persistence : Superblock is persistentUpdate Time : Fri Nov 15 11:17:16 2024State : clean, degraded Active Devices : 3
Working Devices : 3Failed Devices : 1Spare Devices : 0Layout : near=2Chunk Size : 512KName : localhost.localdomain:0 (local to host localhost.localdomain)UUID : 0de6ea7f:c853cc41:98b07488:49bc0c2fEvents : 19Number Major Minor RaidDevice State0 0 0 0 removed1 8 48 1 active sync /dev/sdd2 8 64 2 active sync /dev/sde3 8 80 3 active sync /dev/sdf0 8 32 - faulty /dev/sdc
出现提示框:
刚刚使用的-f 参数是让硬盘模拟损坏的效果。为了能够彻底地将故障盘移除,还要再执行一步操作:
[root@localhost ~]# mdadm /dev/md0 -r /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md0
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:Version : 1.2Creation Time : Fri Nov 15 10:55:16 2024Raid Level : raid10Array Size : 41909248 (39.97 GiB 42.92 GB)Used Dev Size : 20954624 (19.98 GiB 21.46 GB)Raid Devices : 4Total Devices : 3Persistence : Superblock is persistentUpdate Time : Fri Nov 15 11:21:25 2024State : clean, degraded Active Devices : 3
Working Devices : 3Failed Devices : 0Spare Devices : 0Layout : near=2Chunk Size : 512KName : localhost.localdomain:0 (local to host localhost.localdomain)UUID : 0de6ea7f:c853cc41:98b07488:49bc0c2fEvents : 22Number Major Minor RaidDevice State0 0 0 0 removed1 8 48 1 active sync /dev/sdd2 8 64 2 active sync /dev/sde3 8 80 3 active sync /dev/sdf
在 RAID 10 级别的磁盘阵列中,当 RAID 1 磁盘阵列中存在一个故障盘时并不影响 RAID 10 磁盘阵列的使用。当购买了新的硬盘设备后再使用 mdadm 命令予以替换即可,在此期间可以在/RAID 目录中正常地创建或删除文件。由于我们是在虚拟机中模拟硬盘,所以先重启系统,然后再把新的硬盘添加到 RAID 磁盘阵列中。
更换硬盘后再次使用-a 参数进行添加操作,系统默认会自动开始数据的同步工作。使用-D 参数即可看到整个过程和进度(用百分比表示):
[root@localhost ~]# mdadm /dev/md0 -a /dev/sdc
mdadm: added /dev/sdc
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:Version : 1.2Creation Time : Fri Nov 15 10:55:16 2024Raid Level : raid10Array Size : 41909248 (39.97 GiB 42.92 GB)Used Dev Size : 20954624 (19.98 GiB 21.46 GB)Raid Devices : 4Total Devices : 4Persistence : Superblock is persistentUpdate Time : Fri Nov 15 11:26:07 2024State : clean, degraded, recovering Active Devices : 3
Working Devices : 4Failed Devices : 0Spare Devices : 1Layout : near=2Chunk Size : 512KRebuild Status : 15% completeName : localhost.localdomain:0 (local to host localhost.localdomain)UUID : 0de6ea7f:c853cc41:98b07488:49bc0c2fEvents : 32Number Major Minor RaidDevice State4 8 32 0 spare rebuilding /dev/sdc1 8 48 1 active sync /dev/sdd2 8 64 2 active sync /dev/sde3 8 80 3 active sync /dev/sdf
注:实际使用中,一旦硬盘发生故障,服务器上相应的指示灯也会变成红灯(或者变成一直闪烁的黄灯)
1.7 磁盘阵列+备份盘
RAID 10 磁盘阵列中最多允许 50%的硬盘设备发生故障,但是存在这样一种极端情况,即同一 RAID 1 磁盘阵列中的硬盘设备若全部损坏,也会导致数据丢失。换句话说,在 RAID 10磁盘阵列中,如果 RAID 1 中的某一块硬盘出现了故障,而我们正在前往修复的路上,恰巧该RAID 1 磁盘阵列中的另一块硬盘设备也出现故障,那么数据就被彻底丢失了。
在这样的情况下,该怎么办呢?其实,完全可以使用 RAID 备份盘技术来预防这类事故。
该技术的核心理念就是准备一块足够大的硬盘,这块硬盘平时处于闲置状态,一旦 RAID 磁盘阵列中有硬盘出现故障后则会马上自动顶替上去。
这个实验我添加了4个SCSI磁盘,用于部署RAID 5 磁盘阵列。部署 RAID 5 磁盘阵列时,至少需要用到 3 块硬盘,还需要再加一块备份硬盘(也叫热备盘),所以总计需要在虚拟机中模拟 4 块硬盘设备。(这里选用sdb、sdc、sdd、sde)
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 19.5G 0 part ├─rhel00-swap 253:0 0 2G 0 lvm [SWAP]└─rhel00-root 253:1 0 17.5G 0 lvm /
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sdd 8:48 0 20G 0 disk
sde 8:64 0 20G 0 disk
├─sde1 8:65 0 500M 0 part
└─sde2 8:66 0 19.5G 0 part ├─rhel-swap 253:2 0 2G 0 lvm └─rhel-root 253:3 0 17.5G 0 lvm
sdf 8:80 0 20G 0 disk
├─sdf1 8:81 0 2G 0 part
└─sdf2 8:82 0 5G 0 part
sdg 8:96 0 20G 0 disk
└─md0 9:0 0 40G 0 raid10 /RAID
sdh 8:112 0 20G 0 disk
└─md0 9:0 0 40G 0 raid10 /RAID
sdi 8:128 0 20G 0 disk
└─md0 9:0 0 40G 0 raid10 /RAID
sr0 11:0 1 3.5G 0 rom /run/media/root/RHEL-7.0 Server.x86_64
[
现在创建一个 RAID 5 磁盘阵列+备份盘。在下面的命令中,参数-n 3 代表创建这个 RAID 5 磁盘阵列所需的硬盘数,参数-l 5 代表 RAID 的级别,而参数-x 1 则代表有一块备份盘。当查看/dev/md1(即 RAID 5 磁盘阵列的名称)磁盘阵列的时候,就能看到有一块备份盘在等待中了。
[root@localhost ~]# mdadm -Cv /dev/md1 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sdf
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: /dev/sdf appears to be part of a raid array:level=raid10 devices=4 ctime=Fri Nov 15 10:55:16 2024
mdadm: partition table exists on /dev/sdf but will be lost ormeaningless after creating array
mdadm: size set to 20954624K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:Version : 1.2Creation Time : Fri Nov 15 13:45:52 2024Raid Level : raid5Array Size : 41909248 (39.97 GiB 42.92 GB)Used Dev Size : 20954624 (19.98 GiB 21.46 GB)Raid Devices : 3Total Devices : 4Persistence : Superblock is persistentUpdate Time : Fri Nov 15 13:46:19 2024State : clean, degraded, recovering Active Devices : 2
Working Devices : 4Failed Devices : 0Spare Devices : 2Layout : left-symmetricChunk Size : 512KRebuild Status : 26% completeName : localhost.localdomain:1 (local to host localhost.localdomain)UUID : 724435bc:3a5c33b1:b6cef1d8:5f093f9cEvents : 5Number Major Minor RaidDevice State0 8 16 0 active sync /dev/sdb1 8 32 1 active sync /dev/sdc4 8 48 2 spare rebuilding /dev/sdd3 8 80 - spare /dev/sdf
现在将部署好的 RAID 5 磁盘阵列格式化为 Ext4 文件格式,然后挂载到目录上,之后就能够使用了:
[root@localhost ~]# mkfs.ext4 /dev/md1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477312 blocks
523865 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]# echo "/dev/md1 /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
/dev/mapper/rhel00-root 18G 2.9G 15G 17% /
devtmpfs 985M 0 985M 0% /dev
tmpfs 994M 140K 994M 1% /dev/shm
tmpfs 994M 8.9M 986M 1% /run
tmpfs 994M 0 994M 0% /sys/fs/cgroup
/dev/sda1 497M 119M 379M 24% /boot
/dev/md1 40G 49M 38G 1% /RAID
/dev/sr0 3.5G 3.5G 0 100% /run/media/root/RHEL-7.0 Server.x86_64
最后是见证奇迹的时刻!我们再次把硬盘设备/dev/sdb 移出磁盘阵列,然后迅速查看/dev/md0 磁盘阵列的状态,就会发现备份盘已经被自动顶替上去并开始了数据同步。RAID 中的这种备份盘技术非常实用,可以在保证 RAID 磁盘阵列数据安全性的基础上进一步提高数据可靠性。
[root@localhost ~]# mdadm /dev/md1 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md1
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:Version : 1.2Creation Time : Fri Nov 15 13:45:52 2024Raid Level : raid5Array Size : 41909248 (39.97 GiB 42.92 GB)Used Dev Size : 20954624 (19.98 GiB 21.46 GB)Raid Devices : 3Total Devices : 4Persistence : Superblock is persistentUpdate Time : Fri Nov 15 14:04:26 2024State : clean, degraded, recovering Active Devices : 2
Working Devices : 3Failed Devices : 1Spare Devices : 1Layout : left-symmetricChunk Size : 512KRebuild Status : 12% completeName : localhost.localdomain:1 (local to host localhost.localdomain)UUID : 724435bc:3a5c33b1:b6cef1d8:5f093f9cEvents : 23Number Major Minor RaidDevice State3 8 80 0 spare rebuilding /dev/sdf1 8 32 1 active sync /dev/sdc4 8 48 2 active sync /dev/sdd0 8 16 - faulty /dev/sdb
1.8 删除磁盘阵列
(1)需要将所有的磁盘都设置成停用状态:
[root@localhost ~]# umount /RAID
[root@localhost ~]# mdadm /dev/md1 -f /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md1
[root@localhost ~]# mdadm /dev/md1 -f /dev/sdd
mdadm: set /dev/sdd faulty in /dev/md1
[root@localhost ~]# mdadm /dev/md1 -f /dev/sdf
mdadm: set /dev/sdf faulty in /dev/md1
(2)然后再逐一移除出去:
[root@localhost ~]# mdadm /dev/md1 -r /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md1
[root@localhost ~]# mdadm /dev/md1 -r /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md1
[root@localhost ~]# mdadm /dev/md1 -r /dev/sdd
mdadm: hot removed /dev/sdd from /dev/md1
[root@localhost ~]# mdadm /dev/md1 -r /dev/sdf
mdadm: hot removed /dev/sdf from /dev/md1
如果着急,也可以用“mdadm /dev/md0 -f /dev/sdb -r /dev/sdb”这一条命令搞定。但是,在早期版本的服务器中,这条命令中的-f 和-r 不能一起使用,因此保守起见,还是一步步地操作吧。
(3)将所有的硬盘都移除后,再来查看磁盘阵列组的状态:
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:Version : 1.2Creation Time : Fri Nov 15 13:45:52 2024Raid Level : raid5Array Size : 41909248 (39.97 GiB 42.92 GB)Used Dev Size : 20954624 (19.98 GiB 21.46 GB)Raid Devices : 3Total Devices : 0Persistence : Superblock is persistentUpdate Time : Fri Nov 15 14:11:36 2024State : clean, FAILED Active Devices : 0
Working Devices : 0Failed Devices : 0Spare Devices : 0Layout : left-symmetricChunk Size : 512KNumber Major Minor RaidDevice State0 0 0 0 removed1 0 0 1 removed2 0 0 2 removed
(4)下面继续停用整个 RAID 磁盘阵列,咱们的工作就彻底完成了:
[root@localhost ~]# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
[root@localhost ~]# ls /dev/md1
ls: cannot access /dev/md1: No such file or directory
注:在有一些老版本的服务器中,在使用--stop 参数后依然会保留设备文件。这很明显是没有处理
干净,这时再执行一下“mdadm --remove /dev/md0”命令即可。
2. LVM(逻辑卷管理器)
前面学习的硬盘设备管理技术虽然能够有效地提高硬盘设备的读写速度以及数据的安全性,但是在硬盘分好区或者部署为 RAID 磁盘阵列之后,再想修改硬盘分区大小就不容易了。换句话说,当用户想要随着实际需求的变化调整硬盘分区的大小时,会受到硬盘“灵活性”的限制。这时就需要用到另外一项非常普及的硬盘设备资源管理技术了—逻辑卷管理器(Logical Volume Manager,LVM)。LVM 允许用户对硬盘资源进行动态调整。
LVM 是 Linux 系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而 LVM 技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。LVM 的技术架构如图所示。
为了帮助大家理解,我们来看一个吃货的例子。比如小明家里想吃馒头,但是面粉不够了,于是妈妈从隔壁老王家、老李家、老张家分别借来一些面粉,准备蒸馒头吃。首先需要把这些面粉(物理卷[Physical Volume,PV])揉成一个大面团(卷组[Volume Group],VG),然后再把这个大面团分割成一个个小馒头(逻辑卷[Logical Volume,LV]),而且每个小馒头的重量必须是每勺面粉(基本单元[Physical Extent,PE])的倍数。
在日常的使用中,如果卷组(VG)的剩余容量不足,可以随时将新的物理卷(PV)加入到里面,进行不断地扩容。由于担心同学们还是不理解,这里准备了一张逻辑卷管理器的使用流程示意图:
物理卷处于 LVM 中的最底层,可以将其理解为物理硬盘、硬盘分区或者 RAID 磁盘阵列。卷组建立在物理卷之上,一个卷组能够包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。这就是 LVM 的核心理念。
2.1 部署逻辑卷
部署时,需要逐个配置物理卷、卷组和逻辑卷,常用的部署命令如表所示:
先将上一节中新建的硬盘全部删除,方法是先关闭系统,然后在移除硬盘,然后重新添加硬盘,类型选择SATA,然后重新开机。
在虚拟机中添加两块新硬盘设备的目的,是为了更好地演示 LVM 理念中用户无须关心底层物理硬盘设备的特性。我们先对这两块新硬盘进行创建物理卷的操作,可以将该操作简单理解成让硬盘设备支持 LVM 技术,或者理解成是把硬盘设备加入到 LVM 技术可用的硬件资源池中,然后对这两块硬盘进行卷组合并,卷组的名称允许由用户自定义。接下来,根据需求把合并后的卷组切割出一个约为 150MB 的逻辑卷设备,最后把这个逻辑卷设备格式化成Ext4 文件系统后挂载使用。下文将对每一个步骤做一些简单的描述。
第一步:让新添加的两块硬盘设备支持 LVM 技术。(添加前先查看一下block)
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 19.5G 0 part ├─rhel-root 253:0 0 17.5G 0 lvm /└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sr0 11:0 1 3.5G 0 rom /run/media/root/RHEL-7.0 Server.x86_64
[root@localhost ~]# pvcreate /dev/sdb /dev/sdcPhysical volume "/dev/sdb" successfully createdPhysical volume "/dev/sdc" successfully created
第二步:把两块硬盘设备加入到 storage 卷组中,然后查看卷组的状态。
[root@localhost ~]# vgcreate storage /dev/sdb /dev/sdcVolume group "storage" successfully created
[root@localhost ~]# vgdisplay --- Volume group ---VG Name storageSystem ID Format lvm2Metadata Areas 2Metadata Sequence No 1VG Access read/writeVG Status resizableMAX LV 0Cur LV 0Open LV 0Max PV 0Cur PV 2Act PV 2VG Size 39.99 GiBPE Size 4.00 MiBTotal PE 10238Alloc PE / Size 0 / 0 Free PE / Size 10238 / 39.99 GiBVG UUID ETvKC0-3uII-Max2-JKvm-iDmh-SF40-OnFAGo
...
第三步:切割出一个约为 150MB 的逻辑卷设备。
这里需要注意切割单位的问题。在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位,所使用的参数为-L。例如,使用-L 150M 生成一个大小为 150MB 的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为 4MB。例如,使用-l 37 可以生成一个大小为 37×4MB=148MB 的逻辑卷。
[root@localhost ~]# lvcreate -n vo -l 37 storageLogical volume "vo" created
[root@localhost ~]# lvdisplay --- Logical volume ---LV Path /dev/storage/voLV Name voVG Name storageLV UUID URPqJl-irTu-FoX4-LlWB-2BFO-vTec-PYEut3LV Write Access read/writeLV Creation host, time localhost.localdomain, 2024-11-15 15:43:13 +0800LV Status available# open 0LV Size 148.00 MiBCurrent LE 37Segments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:2
...
第四步:把生成好的逻辑卷进行格式化,然后挂载使用。
Linux 系统会把 LVM 中的逻辑卷设备存放在/dev 设备目录中(实际上就是个快捷方式),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)。
[root@localhost ~]# mkfs.ext4 /dev/storage/vo
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
38000 inodes, 151552 blocks
7577 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=33816576
19 block groups
8192 blocks per group, 8192 fragments per group
2000 inodes per group
Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done [root@localhost ~]# mkdir /linuxprobe
[root@localhost ~]# mount /dev/storage/vo /linuxprobe
如果使用了逻辑卷管理器,则不建议用 XFS 文件系统,因为 XFS 文件系统自身就可以使用 xfs_growfs 命令进行磁盘扩容。这虽然不比 LVM 灵活,但起码也够用。在实测阶段我们发现,在有一些服务器上,XFS 与 LVM 的兼容性并不好。
第五步:查看挂载状态,并写入配置文件,使其永久生效。
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 2.9G 15G 17% /
devtmpfs 985M 0 985M 0% /dev
tmpfs 994M 140K 994M 1% /dev/shm
tmpfs 994M 8.8M 986M 1% /run
tmpfs 994M 0 994M 0% /sys/fs/cgroup
/dev/sda1 497M 119M 379M 24% /boot
/dev/sr0 3.5G 3.5G 0 100% /run/media/root/RHEL-7.0 Server.x86_64
/dev/mapper/storage-vo 140M 1.6M 128M 2% /linuxprobe
[root@localhost ~]# echo "/dev/storage/vo /linuxprobe ext4 defaults 0 0" >> /etc/fstab
[root@localhost ~]# cat /etc/fstab #
# /etc/fstab
# Created by anaconda on Fri Nov 15 15:07:39 2024
#
# 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
#
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=5fb4027c-458a-4746-ae60-3dbc178295c1 /boot xfs defaults 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/storage/vo /linuxprobe ext4 defaults 0 0
注:我们写的是 148MB,怎么这里只有140MB?这是因为硬件厂商的制造标准是1GB=1,000MB、1MB=1,000KB、1KB=1,000B,而计算机系统的算法是 1GB=1,024MB、1MB=1,024KB、1KB=1,024B,因此有 3%左右的“缩水”是正常情况。
2.2 扩容逻辑卷
在前面的实验中,卷组是由两块硬盘设备共同组成的。用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。扩容前请一定要记得卸载设备和挂载点的关联。
[root@localhost ~]# umount /linuxprobe
第一步:把上一个实验中的逻辑卷 vo 扩展至 290MB。
[root@localhost ~]# lvextend -L 290M /dev/storage/vo Rounding size to boundary between physical extents: 292.00 MiBExtending logical volume vo to 292.00 MiBLogical volume vo successfully resized
第二步:检查硬盘的完整性,确认目录结构、内容和文件内容没有丢失。一般情况下没有报错,均为正常情况。
[root@localhost ~]# e2fsck -f /dev/storage/vo
e2fsck 1.42.9 (28-Dec-2013)
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/storage/vo: 11/38000 files (0.0% non-contiguous), 10453/151552 blocks
第三步:重置设备在系统中的容量。刚刚是对 LV(逻辑卷)设备进行了扩容操作,但系
统内核还没有同步到这部分新修改的信息,需要手动进行同步。
[root@localhost ~]# resize2fs /dev/storage/vo
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/vo to 299008 (1k) blocks.
The filesystem on /dev/storage/vo is now 299008 blocks long.
第四步:重新挂载硬盘设备并查看挂载状态。
[root@localhost ~]# mount -a
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 2.9G 15G 17% /
devtmpfs 985M 0 985M 0% /dev
tmpfs 994M 140K 994M 1% /dev/shm
tmpfs 994M 8.8M 986M 1% /run
tmpfs 994M 0 994M 0% /sys/fs/cgroup
/dev/sda1 497M 119M 379M 24% /boot
/dev/sr0 3.5G 3.5G 0 100% /run/media/root/RHEL-7.0 Server.x86_64
/dev/mapper/storage-vo 279M 2.1M 259M 1% /linuxprobe
2.3 缩小逻辑卷
相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,数据丢失的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。另外,Linux 系统规定,在对 LVM 逻辑卷进行缩容操作之前,要先检查文件系统的完整性(当然这也是为了保证数据的安全)。在执行缩容操作前记得先把文件系统卸载掉。
[root@localhost ~]# umount /linuxprobe
第一步:检查文件系统的完整性。
[root@localhost ~]# e2fsck -f /dev/storage/vo
e2fsck 1.42.9 (28-Dec-2013)
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/storage/vo: 11/74000 files (0.0% non-contiguous), 15507/299008 blocks
第二步:通知系统内核将逻辑卷 vo 的容量减小到 120MB。
[root@localhost ~]# resize2fs /dev/storage/vo 120M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/vo to 122880 (1k) blocks.
The filesystem on /dev/storage/vo is now 122880 blocks long.
第三步:将 LV(逻辑卷)的容量修改为 120MB。
[root@localhost ~]# lvreduce -L 120M /dev/storage/vo WARNING: Reducing active logical volume to 120.00 MiBTHIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vo? [y/n]: yReducing logical volume vo to 120.00 MiBLogical volume vo successfully resized
缩容的步骤跟扩容的步骤不一样。缩容操作为什么是先通知系统内核设备的容量要改变成 120MB,然后再正式进行缩容操作呢?举个例子,小强是一名初中生,开学后看到班里有位同学纹了身,他感觉很酷,自己也想纹但又怕家里责骂,于是他回家后就说:“妈妈,我纹身了。”如果妈妈的反应很平和,那么他就可以放心大胆地去纹身了。如果妈妈强烈不同意,他马上就可以哈哈一笑,说:“逗着玩呢。”这样也就不会挨打了。
缩容操作也是同样的道理,先通知系统内核自己想缩小逻辑卷,如果在执行 resize2fs 命令后系统没有报错,再正式操作。
第四步:重新挂载文件系统并查看系统状态。
[root@localhost ~]# mount -a
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 2.9G 15G 17% /
devtmpfs 985M 0 985M 0% /dev
tmpfs 994M 140K 994M 1% /dev/shm
tmpfs 994M 8.8M 986M 1% /run
tmpfs 994M 0 994M 0% /sys/fs/cgroup
/dev/sda1 497M 119M 379M 24% /boot
/dev/sr0 3.5G 3.5G 0 100% /run/media/root/RHEL-7.0 Server.x86_64
/dev/mapper/storage-vo 113M 1.6M 103M 2% /linuxprobe
2.4 逻辑卷快照
LVM 还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,对
某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷
进行覆盖还原。LVM 的快照卷功能有两个特点:
➢ 快照卷的容量必须等同于逻辑卷的容量;
➢ 快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。
在正式操作前,先看看 VG(卷组)中的容量是否够用:
[root@localhost ~]# vgdisplay --- Volume group ---VG Name storageSystem ID Format lvm2Metadata Areas 2Metadata Sequence No 4VG Access read/writeVG Status resizableMAX LV 0Cur LV 1Open LV 1Max PV 0Cur PV 2Act PV 2VG Size 39.99 GiBPE Size 4.00 MiBTotal PE 10238Alloc PE / Size 30 / 120.00 MiBFree PE / Size 10208 / 39.88 GiBVG UUID ETvKC0-3uII-Max2-JKvm-iDmh-SF40-OnFAGo
...
通过卷组的输出信息可以清晰看到,卷组中已经使用了 120MB 的容量,空闲容量还有39.88GB。接下来用重定向往逻辑卷设备所挂载的目录中写入一个文件。
[root@localhost ~]# echo "Welcome to linuxprobe.com" > /linuxprobe/readme.txt
[root@localhost ~]# ls -l /linuxprobe
total 14
drwx------. 2 root root 12288 Nov 15 15:47 lost+found
-rw-r--r--. 1 root root 26 Nov 15 16:54 readme.txt
第一步:使用-s 参数生成一个快照卷,使用-L 参数指定切割的大小,需要与要做快照的设备容量保持一致。另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作,稍后数据也会还原到这个相应的设备上。
[root@localhost ~]# lvcreate -L 120M -s -n SNAP /dev/storage/voLogical volume "SNAP" created
[root@localhost ~]# lvdisplay--- Logical volume ---LV Path /dev/storage/SNAPLV Name SNAPVG Name storageLV UUID oLxKM0-7s0T-RPFh-Ghtf-MOmL-PUTg-9pcrhCLV Write Access read/writeLV Creation host, time localhost.localdomain, 2024-11-15 16:56:25 +0800LV snapshot status active destination for voLV Status available# open 0LV Size 120.00 MiBCurrent LE 30COW-table size 120.00 MiBCOW-table LE 30Allocated to snapshot 0.01%Snapshot chunk size 4.00 KiBSegments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:3
...
第二步:在逻辑卷所挂载的目录中创建一个 100MB 的垃圾文件,然后再查看快照卷的状态。可以发现存储空间的占用量上升了。
[root@localhost ~]# dd if=/dev/zero of=/linuxprobe/files count=1 bs=100M
1+0 records in
1+0 records out
104857600 bytes (105 MB) copied, 1.53452 s, 68.3 MB/s
[root@localhost ~]# lvdisplay --- Logical volume ---LV Path /dev/storage/SNAPLV Name SNAPVG Name storageLV UUID oLxKM0-7s0T-RPFh-Ghtf-MOmL-PUTg-9pcrhCLV Write Access read/writeLV Creation host, time localhost.localdomain, 2024-11-15 16:56:25 +0800LV snapshot status active destination for voLV Status available# open 0LV Size 120.00 MiBCurrent LE 30COW-table size 120.00 MiBCOW-table LE 30Allocated to snapshot 83.71%Snapshot chunk size 4.00 KiBSegments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:3...
第三步:为了校验快照卷的效果,需要对逻辑卷进行快照还原操作。在此之前记得先卸载掉逻辑卷设备与目录的挂载。
lvconvert 命令用于管理逻辑卷的快照,语法格式为“lvconvert [参数]快照卷名称”。
使用 lvconvert 命令能自动回复逻辑卷的快照,在早期的 RHEL/CentOS 5 版本中要写全格式:“--mergesnapshot”,而从 RHEL 6 到 RHEL 8,已经允许用户只输入--merge 参数进行操作了,系统会自动分辨设备的类型。
[root@localhost ~]# umount /linuxprobe
[root@localhost ~]# lvconvert --merge /dev/storage/SNAP Merging of volume SNAP started.vo: Merged: 16.3%vo: Merged: 100.0%Merge of snapshot into logical volume vo has finished.Logical volume "SNAP" successfully removed
第四步:快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的 100MB 的垃圾文件也被清除了。
[root@localhost ~]# mount -a
[root@localhost ~]# cd /linuxprobe/
[root@localhost linuxprobe]# ls
lost+found readme.txt
[root@localhost linuxprobe]# cat readme.txt
Welcome to linuxprobe.com
2.5 删除逻辑卷
当生产环境中想要重新部署 LVM 或者不再需要使用 LVM 时,则需要执行 LVM 的删除操作。为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒
第一步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。
[root@localhost ~]# umount /linuxprobe
[root@localhost ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Nov 15 15:07:39 2024
#
# 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
#
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=5fb4027c-458a-4746-ae60-3dbc178295c1 /boot xfs defaults 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
第二步:删除逻辑卷设备,需要输入 y 来确认操作。
[root@localhost ~]# lvremove /dev/storage/vo
Do you really want to remove active logical volume vo? [y/n]: yLogical volume "vo" successfully removed
第三步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。
[root@localhost ~]# vgremove storage Volume group "storage" successfully removed
第四步:删除物理卷设备。
[root@localhost ~]# pvremove /dev/sdb /dev/sdcLabels on physical volume "/dev/sdb" successfully wipedLabels on physical volume "/dev/sdc" successfully wiped
在上述操作执行完毕之后,再执行 lvdisplay、vgdisplay、pvdisplay 命令来查看 LVM 的信息时就不会再看到相关信息了(前提是上述步骤的操作是正确的)。