文章目录
7. Linux RAID 存储技术
参考:来源1
环境准备
虚拟机添加6块硬盘,sdb sdc sdd sde sdf sdg
RAID 技术历史
1988 年美国加州大学伯克利分校的 D. A. Patterson 教授等人首次在论文 “A Case of Redundant Array of Inexpensive Disks” 中提出了 RAID 概念 ,即廉价磁盘冗余阵列( Redundant Array of Inexpensive Disks )。由于当时大容量磁盘比较昂贵, RAID 的基本思想是将多个容量较小、相对廉价的磁盘进行有机组合,从而以较低的成本获得与昂贵大容量磁盘相当的容量、性能、可靠性。随着磁盘成本和价格的不断降低, RAID 可以使用大部分的磁盘, “廉价” 已经毫无意义。因此, RAID 咨询委员会( RAID Advisory Board, RAB )决定用 “ 独立 ” 替代 “ 廉价 ” ,于时 RAID 变成了独立磁盘冗余阵列( Redundant Array of Independent Disks )。但这仅仅是名称的变化,实质内容没有改变。
RAID 实现方式
从实现角度看, RAID 主要分为:
- 软 RAID:所有功能均有操作系统和 CPU 来完成,没有独立的 RAID 控制 / 处理芯片和 I/O 处理芯片,效率最低。
- 硬 RAID :配备了专门的 RAID 控制 / 处理芯片和 I/O 处理芯片以及阵列缓冲,不占用 CPU 资源,成本很高。
- 软硬混合 RAID:具备 RAID 控制 / 处理芯片,但缺乏 I/O 处理芯片,需要 CPU 和驱动程序来完成,性能和成本在软 RAID 和硬 RAID 之间。
RAID 级别
RAID 主要利用数据条带、镜像和数据校验技术来获取高性能、可靠性、容错能力和扩展性,根据运用或组合运用这三种技术的策略和架构,可以把 RAID 分为不同的等级,以满足不同数据应用的需求。 D. A. Patterson 等的论文中定义了 RAID1 ~ RAID5 原始 RAID 等级, 1988 年以来又扩展了 RAID0 和 RAID6 。
近年来,存储厂商不断推出诸如 RAID7 、 RAID10/01 、 RAID50 、 RAID53 、 RAID100 等 RAID 等级,但这些并无统一的标准。目前业界公认的标准是 RAID0 ~ RAID5 ,而在实际应用领域中使用最多的 RAID 等级是 RAID0 、 RAID1 、 RAID4 、 RAID5 、 RAID6 和 RAID10。
RAID 每一个等级代表一种实现方法和技术,等级之间并无高低之分。在实际应用中,应当根据用户的数据应用特点,综合考虑可用性、性能和成本来选择合适的 RAID 等级,以及具体的实现方式。
下面我们来详细介绍一下RAID的各个级别。
RAID 0
原理
RAID 0使用数据条带化(striping)的方式将数据分散存储在多个磁盘驱动器上,而不进行冗余备份。数据被分成固定大小的块,并依次存储在每个磁盘上。例如,如果有两个驱动器(驱动器A和驱动器B),一块数据的第一个部分存储在驱动器A上,第二个部分存储在驱动器B上,以此类推。这种条带化的方式可以同时从多个驱动器读取或写入数据,从而提高系统的性能。
适用场景
RAID 0适用于需要高性能而不关心数据冗余的场景。以下是几种适合使用RAID 0的场景:
- 视频编辑和处理:在视频编辑中,需要快速读取和写入大量数据。RAID 0可以通过并行读写操作提高数据传输速度,加快视频编辑和处理的速度。
- 大型数据库应用:对于需要频繁访问和查询数据库的应用程序,RAID 0可以提供更快的数据访问速度,加快数据库操作的响应时间。
- 实时流媒体:对于需要实时传输和处理大量数据的流媒体应用,RAID 0可以提供足够的带宽和吞吐量,确保流媒体内容的平滑播放。
优点
RAID 0具有以下优点:
- 高性能:通过数据条带化和并行读写操作,RAID 0可以提供更快的数据传输速度和更高的系统性能。
- 成本效益:相对于其他RAID级别(如RAID 1或RAID 5),RAID 0不需要额外的磁盘用于冗余备份,因此在成本上更具竞争力。
缺点
RAID 0也存在一些缺点:
- 缺乏冗余:由于RAID 0不提供数据冗余,如果任何一个驱动器发生故障,所有数据都可能丢失。因此,RAID 0不适合存储关键数据。
- 可靠性降低:由于没有冗余备份,RAID 0的可靠性相对较低。如果任何一个驱动器发生故障,整个阵列的可用性将受到影响。
RAID 1
原理
RAID 1使用数据镜像(mirroring)的方式将数据完全复制到两个或多个磁盘驱动器上。当写入数据时,数据同时写入所有驱动器。这样,每个驱动器都具有相同的数据副本,从而实现数据的冗余备份。如果其中一个驱动器发生故障,系统可以继续从剩余的驱动器中读取数据,确保数据的可用性和完整性。
适用场景
RAID 1适用于对数据冗余和高可用性要求较高的场景。以下是几种适合使用RAID 1的场景:
- 关键数据存储:对于关键数据的存储,如企业的财务数据、客户信息等,RAID 1可以提供数据冗余备份,以防止数据丢失。
- 数据库服务器:对于需要高可用性和容错性的数据库服务器,RAID 1可以确保数据的持久性和可用性,即使一个驱动器发生故障,也可以从其他驱动器中读取数据。
- 文件服务器:对于共享文件的服务器,RAID 1可以提供冗余备份,确保文件的可靠性和高可用性。
优点
RAID 1具有以下优点:
- 数据冗余备份:RAID 1通过数据镜像将数据完全复制到多个驱动器上,提供冗余备份,保护数据免受驱动器故障的影响。
- 高可用性:由于数据的冗余备份,即使一个驱动器发生故障,系统仍然可以从其他驱动器中读取数据,保证数据的可用性和连续性。
- 读取性能提升:RAID 1可以通过并行读取数据的方式提升读取性能,从而加快数据访问速度。
缺点
RAID 1也存在一些缺点:
- 成本增加:由于需要额外的磁盘用于数据冗余备份,RAID 1的成本相对较高。需要考虑额外的硬件成本。
- 写入性能略低:由于数据需要同时写入多个驱动器,相对于单个驱动器的写入性能,RAID 1的写入性能可能略低。
RAID 5
原理
RAID 5使用数据条带化(striping)的方式将数据分散存储在多个磁盘驱动器上,并通过分布式奇偶校验实现数据的冗余备份。数据和奇偶校验信息被组织成数据块,其中奇偶校验信息被分布式存储在不同的驱动器上。当写入数据时,奇偶校验信息也会被更新。如果其中一个驱动器发生故障,系统可以通过重新计算奇偶校验信息来恢复丢失的数据。这种方式可以同时提供性能增强和数据冗余。
适用场景
RAID 5适用于需要性能增强和数据冗余的场景。以下是几种适合使用RAID 5的场景:
- 文件服务器:对于文件服务器,RAID 5可以提供高性能的数据访问和数据冗余备份,确保文件的安全性和可用性。
- 数据库服务器:对于需要高性能和数据冗余的数据库服务器,RAID 5可以提供快速的数据读取和写入,同时保护数据免受驱动器故障的影响。
- 小型企业环境:对于小型企业,RAID 5提供了经济实惠的解决方案,同时提供了性能和数据冗余的好处。
优点
RAID 5具有以下优点:
- 性能增强:通过数据条带化和并行读写操作,RAID 5可以提供较高的数据传输速度和系统性能。
- 数据冗余备份:通过分布式奇偶校验,RAID 5可以提供数据的冗余备份,保护数据免受驱动器故障的影响。
- 成本效益:相对于其他RAID级别(如RAID 1),RAID 5只需要额外一个驱动器用于奇偶校验信息,从而在成本上更具竞争力。
缺点
RAID 5也存在一些缺点:
- 写入性能受限:由于写入数据时需要重新计算奇偶校验信息,相对于读取操作,RAID 5的写入性能较低。
- 驱动器故障期间的数据完整性:如果一个驱动器发生故障,系统在恢复数据时需要进行计算,这可能导致数据访问速度较慢,并且在此期间可能会有数据完整性的风险。
RAID 6
原理
RAID 6使用数据条带化(striping)的方式将数据分散存储在多个磁盘驱动器上,并通过分布式奇偶校验和双重奇偶校验实现数据的冗余备份。数据和奇偶校验信息被组织成数据块,其中奇偶校验信息被分布式存储在不同的驱动器上,并通过双重奇偶校验提供更高的数据冗余性。当写入数据时,奇偶校验信息也会被更新。如果其中两个驱动器发生故障,系统可以通过重新计算奇偶校验信息来恢复丢失的数据。这种方式可以同时提供性能增强和更高级别的数据冗余。
适用场景
RAID 6适用于需要更高级别的数据冗余和性能增强的场景。以下是几种适合使用RAID 6的场景:
- 大容量存储系统:对于需要大容量存储和数据冗余备份的系统,如大型文件服务器或存档系统,RAID 6可以提供更高级别的数据冗余性。
- 长时间运行的应用程序:对于需要长时间运行的关键应用程序,如数据库服务器,RAID 6可以提供更高级别的数据冗余和故障容忍性。
- 虚拟化环境:在虚拟化环境中,需要高性能和更高级别的数据冗余来支持多个虚拟机的运行。RAID 6可以满足这些要求。
优点
RAID 6具有以下优点:
- 更高级别的数据冗余:通过分布式奇偶校验和双重奇偶校验,RAID 6可以提供更高级别的数据冗余性,即使同时发生两个驱动器故障,仍能恢复丢失的数据。
- 性能增强:通过数据条带化和并行读写操作,RAID 6可以提供较高的数据传输速度和系统性能。
缺点
RAID 6也存在一些缺点:
- 写入性能略低:由于数据需要同时写入多个驱动器,并进行双重奇偶校验计算,相对于读取操作,RAID 6的写入性能较低。
- 较高的成本:由于需要额外的磁盘用于奇偶校验信息和更复杂的计算,RAID 6的成本相对较高。需要考虑额外的硬件成本。
RAID 10
原理
RAID 10使用条带化(striping)的方式将数据分散存储在多个磁盘驱动器上,并通过镜像(mirroring)实现数据的冗余备份。数据被分成固定大小的块,并依次存储在不同的驱动器上,类似于RAID 0。然而,每个数据块都会被完全复制到另一个驱动器上,实现数据的冗余备份,类似于RAID 1。这样,RAID 10在提供性能增强的同时,也提供了数据的冗余保护。
适用场景
RAID 10适用于需要高性能和数据冗余的场景。以下是几种适合使用RAID 10的场景:
- 数据库服务器:对于需要高可用性和性能的数据库服务器,RAID 10可以提供快速的数据读取和写入,同时保护数据免受驱动器故障的影响。
- 虚拟化环境:在虚拟化环境中,需要高性能和数据冗余来支持多个虚拟机的运行。RAID 10可以满足这些要求,提供性能增强和数据保护。
- 关键业务应用:对于关键业务应用,如金融交易系统或在线电子商务平台,RAID 10可以提供高可用性和快速的数据访问,确保业务的连续性和稳定性。
优点
RAID 10具有以下优点:
- 高性能:通过数据条带化和并行读写操作,RAID 10可以提供较高的数据传输速度和系统性能。
- 数据冗余备份:通过数据镜像将数据完全复制到另一个驱动器上,RAID 10提供了数据的冗余备份,保护数据免受驱动器故障的影响。
- 较高的可靠性:由于RAID 10采用镜像的方式进行数据冗余备份,即使一个驱动器发生故障,仍然可以从其他驱动器中读取数据,确保数据的可用性和连续性。
- 快速的故障恢复:在RAID 10中,如果一个驱动器发生故障,系统可以直接从镜像驱动器中恢复数据,而无需进行复杂的计算,从而加快故障恢复的速度。
缺点
RAID 10也存在一些缺点:
- 较高的成本:相对于其他RAID级别,RAID 10需要更多的驱动器用于数据镜像,从而增加了硬件成本。
- 低效的空间利用:由于RAID 10的数据镜像特性,有效的存储容量只等于所有驱动器中一半的容量,因此空间利用率较低。
RAID 50
原理
RAID 50使用条带化(striping)的方式将数据分散存储在多个RAID 5组中,并通过RAID 0的条带化方式对这些RAID 5组进行条带化。每个RAID 5组由多个磁盘驱动器组成,并使用分布式奇偶校验来提供数据冗余备份。RAID 0则通过将数据划分为固定大小的块,并将这些块依次存储在多个驱动器上,提供了更高的性能。这样,RAID 50既提供了数据冗余备份,又提供了性能增强。
适用场景
RAID 50适用于需要高性能和更高级别的数据冗余的场景。以下是几种适合使用RAID 50的场景:
- 大规模数据存储:对于需要大规模数据存储和数据冗余备份的系统,如视频编辑、数据分析或大型数据库,RAID 50可以提供高性能和较高级别的数据冗余性。
- 图形渲染和动画制作:在图形渲染和动画制作领域,需要高性能的存储系统来处理大型文件和复杂的渲染任务。RAID 50可以满足这些要求,提供快速的数据读取和写入速度。
- 虚拟化环境:在虚拟化环境中,需要高性能和更高级别的数据冗余来支持多个虚拟机的运行。RAID 50可以满足这些要求,提供性能增强和数据保护。
优点
RAID 50具有以下优点:
- 高性能:通过数据条带化和并行读写操作,RAID 50可以提供较高的数据传输速度和系统性能。
- 更高级别的数据冗余:由于采用了多个RAID 5组的方式,RAID 50提供了更高级别的数据冗余备份,即使同时发生多个驱动器故障,仍能恢复丢失的数据。
缺点
RAID 50也存在一些缺点:
- 较高的成本:由于需要更多的驱动器用于数据条带化和数据冗余备份,RAID 50的硬件成本相对较高。
- 配置和管理复杂性:由于涉及多个RAID 5组和驱动器,RAID 50的配置和管理相对复杂,需要更多的注意和维护。
RAID 60
原理
RAID 60采用条带化(striping)的方式将数据分散存储在多个RAID 6组中,并通过RAID 0的条带化方式对这些RAID 6组进行条带化。每个RAID 6组由多个磁盘驱动器组成,并使用分布式奇偶校验来提供数据的冗余备份。RAID 0则通过将数据划分为固定大小的块,并将这些块依次存储在多个驱动器上,提供了更高的性能。这样,RAID 60既提供了更高级别的数据冗余备份,又提供了性能增强。
适用场景
RAID 60适用于需要更高级别的数据冗余和更高性能的场景。以下是几种适合使用RAID 60的场景:
- 大型数据库系统:对于大型数据库系统,需要高可用性、高性能和更高级别的数据冗余来确保数据的完整性和可靠性。RAID 60可以提供这些要求。
- 大规模数据分析:在大规模数据分析领域,需要高性能的存储系统来处理大量数据的读取和写入。RAID 60可以满足这些要求,提供较高的数据传输速度和系统性能。
- 视频流****媒体处理:对于视频流媒体处理应用,需要快速的数据读取和写入,以确保流畅的视频播放和高质量的媒体处理。RAID 60可以满足这些要求。
优点
RAID 60具有以下优点:
- 更高级别的数据冗余:由于采用了多个RAID 6组的方式,RAID 60提供了更高级别的数据冗余备份,即使同时发生多个驱动器故障,仍能恢复丢失的数据。
- 高性能:通过数据条带化和并行读写操作,RAID 60可以提供较高的数据传输速度和系统性能。
缺点
RAID 60也存在一些缺点:
- 较高的成本:由于需要更多的驱动器用于数据条带化和数据冗余备份,RAID 60的硬件成本相对较高。
- 配置和管理复杂性:由于涉及多个RAID 6组和驱动器,RAID 60的配置和管理相对复杂,需要更多的注意和维护。
RAID 级别总结
RAID级别 | 最小磁盘数 | 容错能力 | 磁盘空间开销 | 读取速度 | 写入速度 | 硬件成本 |
---|---|---|---|---|---|---|
RAID 0 | 2 | 无 | 0% | 高 | 高 | 低 |
RAID 1 | 2 | 单个磁盘 | 50% | 高 | 低 | 中 |
RAID 5 | 3 | 单个磁盘 | 1 / N | 中 | 低 | 中 |
RAID 6 | 4 | 两个磁盘 | 2 / N | 中 | 低 | 高 |
RAID 10 | 4 | 多个磁盘 | 50% | 高 | 中 | 高 |
RAID 50 | 6 | 单个磁盘 | 1 / N | 高 | 中 | 高 |
RAID 60 | 8 | 多个磁盘 | 50% | 高 | 中 | 高 |
管理软 RAID
RHEL 提供多磁盘和设备管理 (mdadm) 程序实用程序来创建和管理软件RAID。
磁盘分区技术:大容量划分为小容量。
raid:小容量变大容量,确保数据的冗余性。
raid1 作为系统盘,raid5或者6作为数据盘。
lvm:小变大,大变小,还可以灵活地缩放空间,支持快照,支持raid功能。
管理 RAID0
创建 RAID
# 创建一个包含2个块设备的raid0设备/dev/md0
[root@server ~ 09:57:07]# mdadm -C /dev/md0 --level raid0 -n 2 /dev/sd{b,c}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
检查挂载 → `mount | grep sdb`
wipefs 是一个 Linux 命令行工具,用于擦除(清除)存储设备上的 文件系统签名、分区表 或 RAID 标识,使其不再被系统识别为有效存储结构。(若出现sdb繁忙情况)
查看 RAID
# 查看 raid 概要信息
[root@server ~ 09:57:10]# cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdc[1] sdb[0]
41908224 blocks super 1.2 512k chunks
unused devices: <none>
# 查看 raid 设备详细信息
[root@server ~ 09:57:59]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Mon Aug 4 09:57:10 2025
Raid Level : raid0
Array Size : 41908224 (39.97 GiB 42.91 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Mon Aug 4 09:57:10 2025
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K
Consistency Policy : none
Name : server.zzh.cloud:0 (local to host server.zzh.cloud)
UUID : b3727d41:9936b612:7de6cd6f:be589fdf
Events : 0
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
需要关注的属性:
- Raid Level : raid0
- State : clean
- Chunk Size : 512K
- 设备清单
[root@server ~ 09:58:08]# lsblk /dev/md0
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md0 9:0 0 40G 0 raid0
格式化和挂载
[root@centos7 ~]# mkfs.xfs /dev/md0
[root@centos7 ~]# mkdir /data/raid0
[root@centos7 ~]# mount /dev/md0 /data/raid0
[root@centos7 ~]# df -h /data/raid0
Filesystem Size Used Avail Use% Mounted on
/dev/md0 40G 319M 40G 1% /data/raid0
# 创建数据
[root@centos7 ~]# cp /etc/ho* /data/raid0
[root@centos7 ~]# ls /data/raid0/
host.conf hostname hosts
删除 RAID
# 卸载
[root@server ~ 10:10:14]# umount /dev/md0
# stop RAID阵列,将删除阵列
[root@server ~ 10:10:58]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
# 清除原先设备上的 md superblock
[root@server ~ 10:11:15]# mdadm --zero-superblock /dev/sd{b,c}
补充说明
-
raid0 条带不能增加新成员盘。
[root@centos7 ~]# mdadm /dev/md0 --add /dev/sdd mdadm: add new device failed for /dev/sdd as 2: Invalid argument
-
raid0 条带不能强制故障成员盘。
[root@centos7 ~]# mdadm /dev/md0 --fail /dev/sdc mdadm: Cannot remove /dev/sdc from /dev/md0, array will be failed.
管理 RAID1
创建 RAID
# 创建一个包含2个块设备的raid1设备/dev/md1
[root@server ~ 10:11:25]# mdadm --create /dev/md1 --level 1 --raid-devices 2 /dev/sd{b,c}mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
查看 RAID
[root@server ~ 10:11:55]# mdadm --detail /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Mon Aug 4 10:11:55 2025
Raid Level : raid1
Array Size : 20954112 (19.98 GiB 21.46 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Mon Aug 4 10:12:08 2025
State : clean, resyncing
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Resync Status : 8% complete
Name : server.zzh.cloud:1 (local to host server.zzh.cloud)
UUID : a004765b:2be248b7:d0bbc155:ef93eb8c
Events : 1
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
需要关注的属性:
- Raid Level : raid1
- State : clean, resyncing,正在同步。
- Consistency Policy : resync
- Resync Status : 33% complete,同步进度。
- 设备清单
[root@server ~ 10:12:12]# lsblk /dev/md1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md1 9:1 0 20G 0 raid1
格式化和挂载
等待同步完成:直到同步进度达到100%,然后进行格式化和挂载。
[root@server ~ 10:12:23]# mkfs.xfs /dev/md1
meta-data=/dev/md1 isize=512 agcount=4, agsize=1309632 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5238528, 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@server ~ 10:17:05]# mkdir /data/raid1
[root@server ~ 10:17:14]# mount /dev/md1 /data/raid1
[root@server ~ 10:17:21]# df -h /data/raid1
文件系统 容量 已用 可用 已用% 挂载点
/dev/md1 20G 33M 20G 1% /data/raid1
# 创建数据
[root@server ~ 10:17:25]# cp /etc/ho* /data/raid1
[root@server ~ 10:17:34]# ls /data/raid1/
host.conf hostname hosts hosts.allow hosts.deny
增加热备盘
[root@server ~ 10:17:38]# mdadm /dev/md1 --add /dev/sdd
mdadm: added /dev/sdd
[root@server ~ 10:17:58]# mdadm --detail /dev/md1 |tail -5
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 - spare /dev/sdd
# /dev/sdd的状态为spare(备用)
模拟故障
# 强制成员盘故障
[root@server ~ 10:18:02]# mdadm /dev/md1 --fail /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md1
# 查看成员状态
[root@server ~ 10:18:07]# mdadm --detail /dev/md1 |tail -5
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
2 8 48 1 spare rebuilding /dev/sdd
1 8 32 - faulty /dev/sdc
# /dev/sdd立刻顶替故障磁盘,并进行同步
# 数据依然正常访问
[root@server ~ 10:18:12]# ls /data/raid1/
host.conf hostname hosts hosts.allow hosts.deny
[root@server ~ 10:18:17]# cat /data/raid1/hostname
server.zzh.cloud
删除故障磁盘
[root@server ~ 10:18:22]# mdadm /dev/md1 --remove /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md1
[root@server ~ 10:18:30]# mdadm --detail /dev/md1 |tail -5
Events : 27
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
2 8 48 1 spare rebuilding /dev/sdd
删除 RAID
# 卸载
[root@server ~ 10:18:37]# umount /dev/md1
# stop RAID 阵列,将删除阵列
[root@server ~ 10:18:45]# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
# 清除原先设备上的 md superblock
[root@server ~ 10:18:50]# mdadm --zero-superblock /dev/sd{b..d}
补充说明
RAID1的设计初衷是数据冗余和可靠性,而不是为了增加存储容量。因此,即使添加了新的硬盘并进行了扩容操作,由于RAID1的工作方式,其总容量是不会增加的。
管理 RAID5
创建 RAID
# 创建一个包含4个块设备的raid5设备/dev/md2
[root@server ~ 10:26:57]# mdadm --create /dev/md5 --level 5 --raid-devices 4 /dev/sd{b..e}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
查看 RAID
[root@server ~ 10:35:59]# mdadm --detail /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Mon Aug 4 10:35:14 2025
Raid Level : raid5
Array Size : 62862336 (59.95 GiB 64.37 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Mon Aug 4 10:40:25 2025
State : clean, degraded, recovering
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 82% complete
Name : server.zzh.cloud:5 (local to host server.zzh.cloud)
UUID : a3840785:03c880ea:c4b6b108:17847b81
Events : 14
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
4 8 64 3 spare rebuilding /dev/sde
需要关注的属性:
- Raid Level : raid5
- State : clean, resyncing,正在同步。
- Consistency Policy : resync
- Resync Status : 17% complete,同步进度。
- 设备清单
[root@server ~ 10:41:40]# lsblk /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md5 9:5 0 60G 0 raid5
格式化和挂载
注意:格式化前,等待 raid 构建完成。
[root@server ~ 10:42:51]# mkfs.xfs -f /dev/md5
meta-data=/dev/md5 isize=512 agcount=16, agsize=982144 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=15714304, imaxpct=25
= sunit=128 swidth=384 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=7680, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@server ~ 10:43:27]# mkdir /data/raid5
[root@server ~ 10:44:00]# mount /dev/md5 /data/raid5
[root@server ~ 10:44:13]# df -h /data/raid5/
文件系统 容量 已用 可用 已用% 挂载点
/dev/md5 60G 33M 60G 1% /data/raid5
# 创建数据
[root@server ~ 10:47:32]# cp /etc/ho* /data/raid5
[root@server ~ 10:49:04]# ls /data/raid5/
host.conf hostname hosts hosts.allow hosts.deny
增加热备盘
# RAID5 阵列增加一个块热备盘
[root@server ~ 10:44:25]# mdadm /dev/md5 --add /dev/sdf
mdadm: added /dev/sdf
[root@server ~ 10:45:24]# mdadm --detail /dev/md5 |tail -7
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
4 8 64 3 active sync /dev/sde
5 8 80 - spare /dev/sdf
模拟故障
# 模拟磁盘故障,手动标记/dev/sdb为fail
[root@server ~ 10:49:49]# mdadm /dev/md5 --fail /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md5
# 查看成员状态
[root@server ~ 10:50:01]# mdadm --detail /dev/md5 |tail -7
Number Major Minor RaidDevice State
5 8 80 0 spare rebuilding /dev/sdf
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
4 8 64 3 active sync /dev/sde
0 8 16 - faulty /dev/sdb
# /dev/sdf立刻顶替故障磁盘,并进行同步
# 数据依然正常访问
[root@server ~ 10:50:06]# ls /data/raid5/
host.conf hostname hosts hosts.allow hosts.deny
[root@server ~ 10:50:15]# cat /data/raid5/hostname
server.zzh.cloud
删除故障磁盘
[root@server ~ 10:50:20]# mdadm /dev/md5 --remove /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md5
[root@server ~ 10:52:08]# mdadm --detail /dev/md5 |tail -5
Number Major Minor RaidDevice State
5 8 80 0 spare rebuilding /dev/sdf
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
4 8 64 3 active sync /dev/sde
扩容 RAID
对于raid5,只能扩容,不能减容。
注意:阵列只有在正常状态下,才能扩容,降级及重构时不允许扩容。
[root@server ~ 10:52:15]# mdadm /dev/md5 --add /dev/sdb /dev/sdg
mdadm: added /dev/sdb
mdadm: added /dev/sdg
[root@server ~ 10:52:27]# mdadm --detail /dev/md5 |tail -8
Number Major Minor RaidDevice State
5 8 80 0 spare rebuilding /dev/sdf
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
4 8 64 3 active sync /dev/sde
6 8 16 - spare /dev/sdb
7 8 96 - spare /dev/sdg
# 设置成员数量为5,-G是grow(扩展)
[root@server ~ 10:52:33]# mdadm -G /dev/md5 --raid-devices 5
# 等待重组完成
[root@server ~ 10:52:41]# mdadm --detail /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Mon Aug 4 10:35:14 2025
Raid Level : raid5
Array Size : 62862336 (59.95 GiB 64.37 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 5
Total Devices : 6
Persistence : Superblock is persistent
Update Time : Mon Aug 4 10:52:46 2025
State : clean, degraded, reshaping
Active Devices : 4
Working Devices : 6
Failed Devices : 0
Spare Devices : 2
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Reshape Status : 1% complete
Delta Devices : 1, (4->5)
Name : server.zzh.cloud:5 (local to host server.zzh.cloud)
UUID : a3840785:03c880ea:c4b6b108:17847b81
Events : 89
Number Major Minor RaidDevice State
5 8 80 0 spare rebuilding /dev/sdf
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
4 8 64 3 active sync /dev/sde
7 8 96 4 active sync /dev/sdg
6 8 16 - spare /dev/sdb
# 确认 raid 容量:增加了20G
[root@centos7 ~]# lsblk /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md5 9:5 0 80G 0 raid5 /data/raid5
# 扩展文件系统
[root@centos7 ~]# xfs_growfs /data/raid5
[root@centos7 ~]# df -h /data/raid5/
Filesystem Size Used Avail Use% Mounted on
/dev/md5 80G 604M 80G 1% /data/raid5
删除 RAID
# 卸载
[root@centos7 ~]# umount /dev/md5
# stop RAID 阵列,将删除阵列
[root@centos7 ~]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5
# 清除原先设备上的 md superblock
[root@centos7 ~]# mdadm --zero-superblock /dev/sd{b..g}
总结:
存储准备过程:
1.准备分区
2.格式化(文件系统)
3.挂载(必要的时候要写入/etc/fstab)
清理(反向):
1.卸载(必要的时候要清理/etc/fstab)
2.直接删除分区、逻辑卷(请里vg和pv)
8. Linux 逻辑卷管理
环境准备
虚拟机添加3块20G硬盘,sdb sdc sdd
[root@centos7 ~]# lsblk /dev/sd{b..d}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sdd 8:48 0 20G 0 disk
逻辑卷基本管理
硬盘分区管理方案缺点
- 硬盘分区空间必须使用连续空间,所以硬盘分区扩容很麻烦,特别是要扩容的分区后没有空间。
- 使用硬盘分区创建的文件系统不同跨多个硬盘,受单个硬盘容量限制。
- 如果硬盘损坏,则文件系统中数据也会丢失。
逻辑卷管理硬盘方案优点
- 使用逻辑卷可以更加灵活地扩展和缩减文件系统空间。
- 使用逻辑卷创建的文件系统可以跨多个硬盘,适合创建超大容量文件系统。
- 使用逻辑卷可以创建镜像卷,保证数据的冗余性。即使单个硬盘损坏,文件系统中数据也会丢失。
- 使用逻辑卷还可以创建快照,保留某一时刻数据,就像虚拟机快照一样。
逻辑卷基本概念
LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM将若干个磁盘或者磁盘分区连接为一个整块的卷组,形成一个存储池。管理员可以在卷组上任意创建逻辑卷,并进一步在逻辑卷上创建文件系统。
- 物理卷(PV, Physical Volume),是LVM的基本存储逻辑块,通过块设备创建。块设备是指磁盘、磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID)。与基本的物理存储介质(如分区、磁盘等)相比,物理卷包含有和LVM相关的管理参数。
- 卷组(VG, Volume Group),是一个逻辑的存储空间,由一个或多个物理卷组成。
- 逻辑卷(LV, Logical Volume),是从卷组中创建出来的一个逻辑空间。如果把一个卷组类比为一个逻辑硬盘,那么逻辑卷则可以类比为一个硬盘分区,所以也可以在逻辑卷之上创建文件系统。
简单地说:卷组由多个物理卷组成,可以在卷组中创建多个逻辑卷,对逻辑卷创建文件系统给用户使用。
LVM管理基本流程:
- 创建物理卷
- 创建卷组
- 创建逻辑卷
创建物理卷
# 创建单个PV
[root@server ~ 11:00:15]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
# 此次创建多个PV
[root@server ~ 11:18:23]# pvcreate /dev/sd{c,d}
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
# 查看PV列表
[root@server ~ 11:18:48]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 52.00g 4.00m
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc lvm2 --- 20.00g 20.00g
/dev/sdd lvm2 --- 20.00g 20.00g
# 查看单个PV详细信息
[root@server ~ 11:18:53]# pvdisplay /dev/sdb
"/dev/sdb" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 20.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID ma8FvB-kCZl-BaL5-bsGy-CZ8V-9CkW-lCwTd0
创建卷组
# 创建包涵单个PV的VG
[root@server ~ 11:19:13]# vgcreate webapp /dev/sdb
Volume group "webapp" successfully created
# 创建包涵多个PV的VG
[root@server ~ 11:19:42]# vgcreate dbapp /dev/sd{c,d}
Volume group "dbapp" successfully created
[root@server ~ 11:20:10]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 52.00g 4.00m
/dev/sdb webapp lvm2 a-- <20.00g <20.00g
/dev/sdc dbapp lvm2 a-- <20.00g <20.00g
/dev/sdd dbapp lvm2 a-- <20.00g <20.00g
# 查看VG列表
[root@server ~ 11:20:15]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- 52.00g 4.00m
dbapp 2 0 0 wz--n- 39.99g 39.99g
webapp 1 0 0 wz--n- <20.00g <20.00g
# 查看单个VG详细信息
[root@server ~ 11:20:35]# vgdisplay dbapp
--- Volume group ---
VG Name dbapp
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,Physical Extend,是PV的最小存储单元。
# 在创建VG时,可通过-s选项设置。
PE Size 4.00 MiB
Total PE 10238
Alloc PE / Size 0 / 0
Free PE / Size 10238 / 39.99 GiB
VG UUID 0VShBc-x1fW-XMkx-tJAj-8Zy8-uGwQ-ge9TYm
创建逻辑卷
# 在卷组webapp中创建一个逻辑卷:名称为webapp01,大小为5G。
[root@server ~ 11:22:47]# lvcreate -n webapp01 -L 5G webapp
Logical volume "webapp01" created.
# 在卷组dbapp中创建一个跨硬盘逻辑卷:名称为data01,大小为25G。
[root@server ~ 11:22:56]# lvcreate -n data01 -L 25G dbapp
Logical volume "data01" created.
# 查看LV列表
[root@server ~ 11:23:31]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 50.00g
swap centos -wi-ao---- 2.00g
data01 dbapp -wi-a----- 25.00g
webapp01 webapp -wi-a----- 5.00g
逻辑卷设备名由如下三种格式:
- /dev/vname/lvame
- /dev/mapper/vname-lvame
- /dev/dm-N
[root@server ~ 11:23:37]# ls -l /dev/dbapp/data01 /dev/mapper/dbapp-data01
lrwxrwxrwx 1 root root 7 8月 4 11:23 /dev/dbapp/data01 -> ../dm-3
lrwxrwxrwx 1 root root 7 8月 4 11:23 /dev/mapper/dbapp-data01 -> ../dm-3
# 查看单个LV详细信息
[root@server ~ 11:24:36]# lvdisplay /dev/dbapp/data01
--- Logical volume ---
LV Path /dev/dbapp/data01
LV Name data01
VG Name dbapp
LV UUID Uf02nb-nfKj-MVFl-01dG-T8xS-iwfZ-0D3nzU
LV Write Access read/write
LV Creation host, time server.zzh.cloud, 2025-08-04 11:23:31 +0800
LV Status available
# open 0
LV Size 25.00 GiB
# LE,Logical Extend,是LV的最小存储单元。
# 通常一个LE对应于一个PE。
Current LE 6400
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
# 可以看到:物理卷/dev/sdc空间已使用完,物理卷/dev/sdd空间已使用5G
[root@server ~ 11:24:50]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 52.00g 4.00m
/dev/sdb webapp lvm2 a-- <20.00g <15.00g
/dev/sdc dbapp lvm2 a-- <20.00g 0
/dev/sdd dbapp lvm2 a-- <20.00g 14.99g
# 可以看到逻辑卷/dev/dbapp/data01空间横跨2个硬盘
[root@server ~ 11:25:10]# lsblk /dev/sd{b..d}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─webapp-webapp01 253:2 0 5G 0 lvm
sdc 8:32 0 20G 0 disk
└─dbapp-data01 253:3 0 25G 0 lvm
sdd 8:48 0 20G 0 disk
└─dbapp-data01 253:3 0 25G 0 lvm
创建文件系统
[root@server ~ 11:25:48]# mkfs.xfs /dev/webapp/webapp01
meta-data=/dev/webapp/webapp01 isize=512 agcount=4, agsize=327680 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=1310720, 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@server ~ 11:26:26]# mount /dev/webapp/webapp01 /var/www/html
# 基于lvm的文件系统持久化挂载,需要修改/etc/fstab文件。
清理
# 卸载文件系统
[root@server ~ 11:26:54]# umount /dev/webapp/webapp01
# 删除LV
[root@server ~ 11:27:03]# lvremove /dev/webapp/webapp01 /dev/dbapp/data01
Do you really want to remove active logical volume webapp/webapp01? [y/n]: y
Logical volume "webapp01" successfully removed
Do you really want to remove active logical volume dbapp/data01? [y/n]: y
Logical volume "data01" successfully removed
# 删除VG
[root@server ~ 11:27:14]# vgremove webapp dbapp
Volume group "webapp" successfully removed
Volume group "dbapp" successfully removed
# 删除PV
[root@server ~ 11:27:20]# pvremove /dev/sd{b..d}
Labels on physical volume "/dev/sdb" successfully wiped.
Labels on physical volume "/dev/sdc" successfully wiped.
Labels on physical volume "/dev/sdd" successfully wiped.
使用lv存储过程:
1.准备硬盘
2.创建pv
3.创建vg
4.创建lv
5.格式化逻辑卷(文件系统)
6.挂载(必要的时候要写入/etc/fstab)
清理:
1.卸载(必要的时候要清理/etc/fstab)
2.直接删除分区、逻辑卷(请里vg和pv)
扩展和缩减卷组
环境准备
# 创建卷组
[root@server ~ 11:30:38]# vgcreate webapp /dev/sdb
Physical volume "/dev/sdb" successfully created.
Volume group "webapp" successfully created
# 创建卷组的时候,如果指定的块设备不是物理卷,则会先将块设备创建为物理卷。
# 创建逻辑卷
[root@server ~ 13:37:08]# lvcreate -n webapp01 -L 10G webapp
Logical volume "webapp01" created.
扩展卷组
如果卷组空间不足,可以通过添加新的物理卷到卷组中,以扩展卷组容量。
[root@server ~ 13:37:42]# vgextend webapp /dev/sd{c,d}
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
Volume group "webapp" successfully extended
缩减卷组
如果卷组空间中有多余的物理卷或者物理卷容量小需要更换,则可以将物理卷从卷组中剔除。
删除物理卷前确保物理卷不在使用中。
# 查看物理卷使用状态
[root@server ~ 13:38:06]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 52.00g 4.00m
/dev/sdb webapp lvm2 a-- <20.00g <10.00g
/dev/sdc webapp lvm2 a-- <20.00g <20.00g
/dev/sdd webapp lvm2 a-- <20.00g <20.00g
# 将物理卷/dev/sdb从卷组webapp中剔除,则会报错
[root@server ~ 13:38:12]# vgreduce webapp /dev/sdb
Physical volume "/dev/sdb" still in use
# 解决方法:将物理卷/dev/sdb中数据移动到卷组中其他物理卷
[root@server ~ 13:38:39]# pvmove /dev/sdb
# 或者移动到卷组中特定物理卷
[root@centos7 ~]# pvmove /dev/sdb /dev/sdd
/dev/sdb: Moved: 0.20%
/dev/sdb: Moved: 74.30%
/dev/sdb: Moved: 100.00%
# 查看物理卷使用状态
[root@server ~ 13:40:07]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 52.00g 4.00m
/dev/sdb webapp lvm2 a-- <20.00g <20.00g
/dev/sdc webapp lvm2 a-- <20.00g <10.00g
/dev/sdd webapp lvm2 a-- <20.00g <20.00g
# 再次剔除,成功
[root@server ~ 13:40:32]# vgreduce webapp /dev/sdb
Removed "/dev/sdb" from volume group "webapp"
[root@server ~ 13:40:45]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 52.00g 4.00m
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc webapp lvm2 a-- <20.00g <10.00g
/dev/sdd webapp lvm2 a-- <20.00g <20.00g
扩展和缩减逻辑卷
扩展逻辑卷
如果逻辑卷空间不足,在卷组空间充足的情况下,也可以扩展逻辑卷空间。
# 逻辑卷增加2G空间
[root@server ~ 13:44:16]# lvextend -L +2G /dev/webapp/webapp01
Size of logical volume webapp/webapp01 changed from 10.00 GiB (2560 extents) to 12.00 GiB (3072 extents).
Logical volume webapp/webapp01 successfully resized.
[root@server ~ 13:47:40]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-a----- 12.00g
缩减逻辑卷
如果逻辑卷空间充足,希望将多余的空间缩减出来它用,也可以缩减逻辑卷空间。
[root@server ~ 13:47:58]# lvreduce -L -2G /dev/webapp/webapp01
WARNING: Reducing active logical volume to 10.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce webapp/webapp01? [y/n]: y
Size of logical volume webapp/webapp01 changed from 12.00 GiB (3072 extents) to 10.00 GiB (2560 extents).
Logical volume webapp/webapp01 successfully resized.
[root@server ~ 13:48:25]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-a----- 10.00g
扩展和缩减文件系统
扩展 XFS 文件系统
XFS文件系统只支持扩展,不支持缩减。
环境准备:格式化文件系统,并创建数据
[root@server ~ 13:48:42]# mkfs.xfs /dev/webapp/webapp01 meta-data=/dev/webapp/webapp01 isize=512 agcount=4, agsize=655360 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=2621440, 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@server ~ 13:57:45]# mkdir /var/www/html [root@server ~ 13:58:01]# mount /dev/webapp/webapp01 /var/www/html [root@server ~ 13:58:36]# cp /etc/host* /var/www/html [root@server ~ 13:58:53]# ls /var/www/html host.conf hostname hosts hosts.allow hosts.deny
# 第一步:扩展逻辑卷
[root@server ~ 13:59:02]# lvextend -L 15G /dev/webapp/webapp01
Size of logical volume webapp/webapp01 changed from 10.00 GiB (2560 extents) to 15.00 GiB (3840 extents).
Logical volume webapp/webapp01 successfully resized.
[root@server ~ 13:59:25]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-ao---- 15.00g
# 第二步:扩展文件系统
[root@server ~ 13:59:40]# xfs_growfs /var/www/html
meta-data=/dev/mapper/webapp-webapp01 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal 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 2621440 to 3932160
[root@server ~ 13:59:58]# df -h /var/www/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 15G 33M 15G 1% /var/www/html
[root@server ~ 14:00:16]# ls /var/www/html
host.conf hostname hosts hosts.allow hosts.deny
# (第二种)块设备和文件系统一并扩展
#( -r 选项(自动调整文件系统)
(支持的文件系统:
ext2/ext3/ext4
xfs(需已挂载)
btrfs 等主流文件系统。))
[root@server ~ 14:01:18]# lvextend -rL 20G /dev/webapp/webapp01
Size of logical volume webapp/webapp01 changed from 15.00 GiB (3840 extents) to 20.00 GiB (5120 extents).
Logical volume webapp/webapp01 successfully resized.
meta-data=/dev/mapper/webapp-webapp01 isize=512 agcount=6, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=3932160, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal 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 3932160 to 5242880
[root@server ~ 14:01:39]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-ao---- 20.00g
[root@server ~ 14:01:48]# df -h /var/www/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 20G 33M 20G 1% /var/www/html
扩展 EXT4 文件系统
EXT4文件系统即支持扩展,也支持缩减。
环境准备:格式化文件系统,并创建数据
[root@server ~ 14:02:29]# umount /var/www/html [root@server ~ 14:03:11]# mkfs.ext4 /dev/webapp/webapp01 mke2fs 1.42.9 (28-Dec-2013) 文件系统标签= OS type: Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 1310720 inodes, 5242880 blocks 262144 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=2153775104 160 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 Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (32768 blocks): 完成 Writing superblocks and filesystem accounting information: 完成 [root@server ~ 14:03:36]# mount /dev/webapp/webapp01 /var/www/html [root@server ~ 14:04:07]# df -h /var/www/html 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 20G 45M 19G 1% /var/www/html [root@server ~ 14:04:17]# cp /etc/host* /var/www/html [root@server ~ 14:04:46]# ls /var/www/html host.conf hostname hosts hosts.allow hosts.deny lost+found
# 第一步:扩展逻辑卷
[root@server ~ 14:04:56]# lvextend -L 25G /dev/webapp/webapp01
Size of logical volume webapp/webapp01 changed from 20.00 GiB (5120 extents) to 25.00 GiB (6400 extents).
Logical volume webapp/webapp01 successfully resized.
[root@server ~ 14:05:21]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-ao---- 25.00g
# 第二步:扩展文件系统
[root@server ~ 14:05:40]# resize2fs /dev/webapp/webapp01
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/webapp/webapp01 is mounted on /var/www/html; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 4
The filesystem on /dev/webapp/webapp01 is now 6553600 blocks long.
[root@server ~ 14:05:56]# df -h /var/www/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 25G 44M 24G 1% /var/www/html
[root@server ~ 14:07:17]# ls /var/www/html
host.conf hostname hosts hosts.allow hosts.deny lost+found
# 块设备和文件系统一并扩展
[root@server ~ 14:07:37]# lvextend -rL 30G /dev/webapp/webapp01
Size of logical volume webapp/webapp01 changed from 25.00 GiB (6400 extents) to 30.00 GiB (7680 extents).
Logical volume webapp/webapp01 successfully resized.
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/webapp-webapp01 is mounted on /var/www/html; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 4
The filesystem on /dev/mapper/webapp-webapp01 is now 7864320 blocks long.
[root@server ~ 14:08:06]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-ao---- 30.00g
[root@server ~ 14:08:18]# df -h /var/www/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 30G 44M 28G 1% /var/www/html
缩减 EXT4 文件系统
缩减EXT4文件系统注意事项:
- 不支持在线缩减,必须卸载后缩减。
- 缩减后的容量,不能小于当前使用的容量。
ext4 减容流程:
- 卸载文件系统
- e2fsck 文件系统
- 缩减文件系统
- 缩减lv
- 挂载测试
具体操作如下:
# 第一步:卸载文件系统
[root@server ~ 14:10:34]# umount /var/www/html
# 第二步:检测文件系统
[root@server ~ 14:18:40]# e2fsck -f /dev/webapp/webapp01
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/webapp/webapp01: 16/1966080 files (0.0% non-contiguous), 167447/7864320 blocks
# 第三步:缩减文件系统
[root@server ~ 14:19:00]# resize2fs /dev/webapp/webapp01 10G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/webapp/webapp01 to 2621440 (4k) blocks.
The filesystem on /dev/webapp/webapp01 is now 2621440 blocks long.
# 第四步:缩减逻辑卷
[root@server ~ 14:19:49]# lvreduce -L 10G /dev/webapp/webapp01
WARNING: Reducing active logical volume to 10.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce webapp/webapp01? [y/n]: y
Size of logical volume webapp/webapp01 changed from 30.00 GiB (7680 extents) to 10.00 GiB (2560 extents).
Logical volume webapp/webapp01 successfully resized.
# 第五步:挂载文件系统验证
[root@server ~ 14:20:39]# mount /dev/webapp/webapp01 /var/www/html
[root@server ~ 14:21:02]# df -h /var/www/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 9.8G 37M 9.2G 1% /var/www/html
[root@server ~ 14:21:16]# ls /var/www/html
host.conf hostname hosts hosts.allow hosts.deny lost+found
补充说明: 如果文件系统是构建在磁盘分区上,扩展文件系统容量和缩减文件系统容量操作相同。
逻辑卷快照
我们可以使用快照记录了lv中数据,后续可以用来恢复数据。
# 创建快照:快照的容量不能小于lv容量
[root@server ~ 14:45:01]# lvcreate -s -n webapp01-snap1 -L 10G /dev/webapp/webapp01
Logical volume "webapp01-snap1" created.
# 卸载原始卷,挂载快照
[root@server ~ 14:45:39]# umount /dev/webapp/webapp01
[root@server ~ 14:45:53]# mount /dev/webapp/webapp01-snap01 /webapp/webapp01/
# 查看数据
[root@server ~ 14:46:22]# ls /webapp/webapp01/
host.conf hostname hosts lost+found
# 创建新数据
[root@server ~ 14:46:46]# echo hello world > /webapp/webapp01/hello.txt
[root@server ~ 14:47:02]# cat /webapp/webapp01/hello.txt
hello world
创建raid1 逻辑卷
创建raid1 逻辑卷
# 清理
299 umount /mnt
300 umount /var/www/html
301 lvremove /dev/webapp/webapp01*
# 创建raid1逻辑卷
[root@server ~ 14:47:57]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 52.00g 4.00m
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc webapp lvm2 a-- <20.00g <20.00g
/dev/sdd webapp lvm2 a-- <20.00g <20.00g
[root@server ~ 14:48:04]# lvcreate --type raid1 -n webapp01 -L 15G webapp
WARNING: ext4 signature detected on /dev/webapp/webapp01_rmeta_0 at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/webapp/webapp01_rmeta_0.
Logical volume "webapp01" created.
[root@server ~ 14:49:01]# mkfs.xfs /dev/webapp/webapp01
meta-data=/dev/webapp/webapp01 isize=512 agcount=4, agsize=983040 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=3932160, 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@server ~ 14:49:24]# mount /dev/webapp/webapp01 /var/www/html
[root@server ~ 14:49:52]# cp /etc/ho* /var/www/html/
[root@server ~ 14:50:13]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 52.00g 4.00m
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc webapp lvm2 a-- <20.00g 4.99g
/dev/sdd webapp lvm2 a-- <20.00g 4.99g
[root@server ~ 14:54:10]# wipefs -a /dev/sdd
wipefs: error: /dev/sdd: probing initialization failed: 设备或资源忙
# 强制擦除 #模拟故障
[root@server ~ 14:54:17]# dd if=/dev/zero of=/dev/sdd bs=1M count=256
记录了256+0 的读入
记录了256+0 的写出
268435456字节(268 MB)已复制,0.898536 秒,299 MB/秒
[root@server ~ 14:55:28]# pvs
WARNING: Device for PV YFPQWN-MQ0j-CxMX-ljkz-EFVB-HJwM-RyVw7U not found or rejected by a filter.
Couldn't find device with uuid YFPQWN-MQ0j-CxMX-ljkz-EFVB-HJwM-RyVw7U.
WARNING: Couldn't find all devices for LV webapp/webapp01_rimage_1 while checking used and assumed devices.
WARNING: Couldn't find all devices for LV webapp/webapp01_rmeta_1 while checking used and assumed devices.
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 52.00g 4.00m
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc webapp lvm2 a-- <20.00g 4.99g
[unknown] webapp lvm2 a-m <20.00g 4.99g
# 此时文件系统仍可以正常访问
[root@server ~ 14:55:34]# ls /var/www/html
[root@server ~ 14:55:53]# umount /var/www/html
[root@server ~ 14:56:01]# mount /dev/webapp/webapp01 /var/www/html
[root@server ~ 14:56:24]# ls /var/www/html
host.conf hostname hosts hosts.allow hosts.deny
# 修复raid
[root@server ~ 14:56:33]# vgreduce --removemissing webapp --force
WARNING: Device for PV YFPQWN-MQ0j-CxMX-ljkz-EFVB-HJwM-RyVw7U not found or rejected by a filter.
Couldn't find device with uuid YFPQWN-MQ0j-CxMX-ljkz-EFVB-HJwM-RyVw7U.
WARNING: Couldn't find all devices for LV webapp/webapp01_rimage_1 while checking used and assumed devices.
WARNING: Couldn't find all devices for LV webapp/webapp01_rmeta_1 while checking used and assumed devices.
Wrote out consistent volume group webapp.
[root@server ~ 15:09:21]# vgextend webapp /dev/sdd
Physical volume "/dev/sdd" successfully created.
Volume group "webapp" successfully extended
[root@server ~ 15:10:00]# lvconvert --repair webapp/webapp01
WARNING: Not using lvmetad because of repair.
Attempt to replace failed RAID images (requires full device resync)? [y/n]: y
WARNING: Disabling lvmetad cache for repair command.
Faulty devices in webapp/webapp01 successfully replaced.
[root@server ~ 15:10:21]# pvs|grep webapp
WARNING: Not using lvmetad because a repair command was run.
/dev/sdc webapp lvm2 a-- <20.00g 4.99g
/dev/sdd webapp lvm2 a-- <20.00g 4.99g
案例:如何彻底擦除硬盘上数据
解答:
- 逻辑破坏:用0填充所有数据,例如
dd if=/dev/zero of=/dev/sdb
。 - 物理破坏,例如消磁。
9. Linux 交换空间管理
计算机存储器的层次结构
计算机存储器速度越快,成本较高。 为了获得好的性能/价格比,计算机中各种存储器组成一个层状的塔式结构,取长补短,协调工作。
-
CPU 寄存器,是 CPU 内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果以及一些 CPU 运行需要的信息。
-
CPU 高速缓存,也就是CPU Cache,是一种容量小、速度快的高缓冲存储器,由SRAM组成,直接制作在CPU芯片内,速度几乎与CPU一样快。在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器。其容量远小于内存,但速度却可以接近处理器的频率。
-
主存储器(Main memory),简称主存或内存,其作用是存放指令和数据,并能由中央处理器(CPU)直接随机存取。主存储器速度比CPU高速缓存慢,但存储容器却大的多。
主存储器的速度一般用存取时间衡量,即每次与CPU间数据处理耗费的时间,以纳秒(ns)为单位。大多数SDRAM内存芯片的存取时间为5、6、7、8或10ns。
主存储器的带宽计算公式:带宽=频率*位宽/8。
例如:DDR4 内存频率是3600 MHz,在64位系统(双通道位宽为128,以此类推),1B=8bit,
-
单通道 DDR4-3600:3600MHz * 64bit / 8=28800MB/S
-
双通道 DDR4-3600:3600MHz * 64bit * 2 / 8=57600MB/S
-
-
辅助存储器,速度慢的多,优点是容量大,可持久化存储。
计算机存储器的工作原理
- CPU运行程序时,先从寄存器中读取数据。如果在寄存器中可以找到数据,则直接从寄存器中读取。如果在寄存器中找不到数据,则从CPU Cache中读取数据,并将数据缓存在CPU Cache中。
- 如果在CPU cache中可以找到数据,则直接从CPU Cache中读取。如果在CPU cache中找不到数据,则从主存储器(内存)中读取数据,将数据缓存在主存储器中。
- 如果在内存中可以找到数据,则直接从内存中读取。如果在内存中找不到数据,则从辅助存储器中读取数据,例如机械磁盘、光盘、U盘等,并将数据缓存在内存中。
物理内存
计算机系统将内存划分为固定大小的块,称为 page,标准 page 大小为 4 KiB。进程并不直接对物理内存寻址,每个进程具有虚拟地址空间virtual address space。当进程请求内存时,MMU 将进程获得的虚拟地址(VA,Virtual Address )映射到物理地址(PA,Physical Address )。
MMU是Memory Management Unit的缩写,即内存管理单元,它是CPU中用来管理虚拟存储器、物理存储器的控制线路,负责将虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权。
**思考:**为什么CPU不直接访问物理地址?
- 虚拟内存的容量是物理内存和交换空间的总和,而虚拟地址负责映射到物理内存地址和交换空间地址。
- 进程使用内存的过程中,希望内存是连续的。如果进程直接访问物理地址,则内核很难保证进程获得的物理地址空间是连续的,因为进程存在着运行和退出,就会出现内存碎片化。进程的虚拟地址在虚拟内存中是连续的,达到了内存连续的目的,而 MMU 会将进程的虚拟地址映射到物理地址。
Swap 空间
Swap,意思是“交换”、“实物交易”。Linux Swap(交换)空间是受Linux内核内存子系统控制的磁盘区域。
- 功能1:当内存使用量超过定义的限制时,内核寻找已分配给进程但空闲的内存页,将该空闲的内存页写入到交换空间,并向其他进程重新分配RAM页面。
- 功能2:如果某个程序需要访问磁盘上的页面,则内核会找到另一个空闲的内存页, 将其写入到磁盘,然后从交换区重新调用所需的页面。
- 功能3:如果某个程序需要访问数据,访问的数据存放在交换空间,则该程序直接从交换空间读取数据,而不需要从磁盘原始位置读取,进而提高速度。
简单地说,Linux Swap 空间就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行,和Windows的虚拟内存(pagefile.sys)的作用是一样的。
**交换空间只是临时的解决办法。**虽然交换空间能够作为"虚拟"内存使用,但由于交换区位于磁盘上,它的速度比物理内存慢的多,因此如果需要更快的速度的话,最好的办法仍然是加大物理内存。
查看内存
# 默认单位是KiB,使用-m选项,以MiB为单位
[root@server ~ 15:10:55]# free
total used free shared buff/cache available
Mem: 3060052 262240 2555232 10064 242580 2618056
Swap: 2097148 0 2097148
输出说明:
-
Mem:
-
total:物理内存空间大小。
-
used:使用的内存 (total - free - buffers - cache)。
-
free:未使用的内存空间大小(真正的空闲,未被任何程序占用)。
-
shared:多个进程共享的内存空间大小。
-
cached:从磁盘读取的数据占用的内存空间大小,待以后使用(数据没有被修改)。
-
buffers:被更改但未写回磁盘的数据占用的内存空间大小。
-
-
Swap:
-
total:交换空间大小。
-
used:使用的交换空间大小。
-
free:未使用交换空间大小。
-
Swap 空间大小
管理员应根据系统的内存工作负载来调整交换空间大小。 应用供应商有时会提供这方面的建议。根据物理内存总量,下表提供了一些指导。
物理内存(RAM) | 交换空间 | 允许HIBERNATE时的交换空间 |
---|---|---|
2GiB或以下 | 两倍的RAM | 三倍的RAM |
2GiB和8GiB之间 | 同等的RAM | 两倍的RAM |
8GiB和64GiB之间 | 至少4GiB | 1.5倍的RAM |
64GiB以上 | 至少4GiB | 不建议Hibernate |
笔记本电脑和台式机的Hibernate功能会在关闭系统电源之前使用交换空间来保存RAM内容。重新打开系统时, 内核将从交换空间恢复RAM内容,无需完全启动。 对于这些系统而言,交换空间需要超过RAM量。
创建交换空间
# 使用parted创建所需大小的分区并将其文件系统类型设置为linux-swap
[root@server ~ 15:41:30]# parted /dev/sdb mklabel gpt
信息: You may need to update /etc/fstab.
[root@server ~ 15:44:06]# parted /dev/sdb unit MiB mkpart data01 linux-swap 1 2049
信息: You may need to update /etc/fstab.
[root@server ~ 15:44:22]# parted /dev/sdb unit MiB print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1.00MiB 2049MiB 2048MiB data01
# 格式化swap空间
[root@server ~ 15:44:30]# mkswap /dev/sdb1
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=8e2234f4-e7cd-4b2d-b526-233c24bd0f81
激活 swap 空间
# 激活swap空间
[root@centos7 ~]# swapon /dev/sdb1
# 查看swap设备列表
[root@centos7 ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 4063228 0 -2
/dev/sdb1 partition 2097148 0 -3
默认情况下,多个交换空间具有相同的优先级时,系统会按顺序使用交换空间,即内核先使用第一个已激活交换空间,直至其空间已满,然后开始使用第二个交换空间。在激活交换分区的时候,可以为每个交换空间定义一个优先级,从而强制按该顺序使用交换空间。
swapon 命令使用-p选项指定优先级,优先级介于-1和32767之间,值越大优先级越高。
示例:
[root@server ~ 15:45:26]# swapon -p 4 /dev/sdb1
取消 swap 空间激活
[root@centos7 ~]# swapoff /dev/sdb1
[root@server ~ 15:46:26]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 2097148 0 -2
持久化激活 swap 空间
修改/etc/fstab文件,添加如下类似记录:
# 此处UUID可用blkid命令查找(此处看sdb1)
UUID=8e2234f4-e7cd-4b2d-b526-233c24bd0f81 swap swap pri=4 0 0
使用命令swapon -a
激活/etc/fstab中所有交换设备。
使用命令swapoff -a
取消/etc/fstab中所有交换设备激活。
[root@server ~ 15:55:56]# swapon -a
[root@server ~ 15:56:08]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 2097148 0 -2
/dev/sdb1 partition 2097148 0 4
[root@server ~ 15:56:14]# swapoff -a
[root@server ~ 15:59:12]# swapon -s
#nit MiB print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1.00MiB 2049MiB 2048MiB data01
格式化swap空间
[root@server ~ 15:44:30]# mkswap /dev/sdb1
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=8e2234f4-e7cd-4b2d-b526-233c24bd0f81
#### 激活 swap 空间
```bash
# 激活swap空间
[root@centos7 ~]# swapon /dev/sdb1
# 查看swap设备列表
[root@centos7 ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 4063228 0 -2
/dev/sdb1 partition 2097148 0 -3
默认情况下,多个交换空间具有相同的优先级时,系统会按顺序使用交换空间,即内核先使用第一个已激活交换空间,直至其空间已满,然后开始使用第二个交换空间。在激活交换分区的时候,可以为每个交换空间定义一个优先级,从而强制按该顺序使用交换空间。
swapon 命令使用-p选项指定优先级,优先级介于-1和32767之间,值越大优先级越高。
示例:
[root@server ~ 15:45:26]# swapon -p 4 /dev/sdb1
取消 swap 空间激活
[root@centos7 ~]# swapoff /dev/sdb1
[root@server ~ 15:46:26]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 2097148 0 -2
持久化激活 swap 空间
修改/etc/fstab文件,添加如下类似记录:
# 此处UUID可用blkid命令查找(此处看sdb1)
UUID=8e2234f4-e7cd-4b2d-b526-233c24bd0f81 swap swap pri=4 0 0
[外链图片转存中…(img-KgEHFxvX-1754299035050)]
使用命令swapon -a
激活/etc/fstab中所有交换设备。
使用命令swapoff -a
取消/etc/fstab中所有交换设备激活。
[root@server ~ 15:55:56]# swapon -a
[root@server ~ 15:56:08]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 2097148 0 -2
/dev/sdb1 partition 2097148 0 4
[root@server ~ 15:56:14]# swapoff -a
[root@server ~ 15:59:12]# swapon -s