Linux 运维从入门到精通:软件包与磁盘管理实战
Linux 硬盘分区管理
综合案例:文件系统空间不足
情况1:大量的大文件占用空间
准备环境
[root@localhost ~ 09:42:35]# parted /dev/sdb unit MiB print
错误: /dev/sdb: unrecognised disk label
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 102400MiB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
[root@localhost ~ 09:43:17]# parted /dev/sdb mklabel gpt
信息: You may need to update /etc/fstab.
[root@localhost ~ 09:43:41]# parted /dev/sdb unit MiB print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 102400MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
[root@localhost ~ 09:43:51]# parted /dev/sdb unit MiB mkpart data01 1 2049
信息: You may need to update /etc/fstab.
[root@localhost ~ 09:44:50]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 100G 0 disk
└─sdb1 8:17 0 2G 0 part
[root@localhost ~ 09:45:00]# df -h /data01
df: "/data01": 没有那个文件或目录
[root@localhost ~ 09:45:23]# df -h /dev/sdb1
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 2.0G 0 2.0G 0% /dev
[root@localhost ~ 09:45:36]# mkfs.xfs -f /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=524288, 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@localhost ~ 10:02:47]# mkdir /myapp-1
[root@localhost ~ 10:02:55]# mount /dev/sdb1 /myapp-1
[root@localhost ~ 10:03:29]# cp -r /etc/ /myapp-1
#创建一个大文件
[root@localhost ~ 10:03:40]# dd if=/dev/zero of=/myapp-1/etc/bigfile bs=1M count=2000
dd: 写入"/myapp-1/etc/bigfile" 出错: 设备上没有空间
记录了1973+0 的读入
记录了1972+0 的写出
2067988480字节(2.1 GB)已复制,5.31707 秒,389 MB/秒
原因:大文件占用大量空间。
解决方法:找到文件后删除。
[root@localhost ~ 10:04:27]# df -h /myapp-1
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 2.0G 2.0G 588K 100% /myapp-1
# find 查找
[root@localhost ~ 10:04:40]# find /myapp-1/ -size +100M
/myapp-1/etc/bigfile
# 删除大文件
[root@localhost ~ 10:05:27]# rm -f /myapp-1/etc/bigfile
[root@localhost ~ 10:06:06]# df -h /myapp-1
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 2.0G 66M 2.0G 4% /myapp-1
找到文件后,删除即可。
情况2:删除文件后,空间没有释放
准备环境
#创建一个大文件
[root@localhost ~ 10:06:11]# dd if=/dev/zero of=/myapp-1/etc/bigfile bs=1M count=2000
dd: 写入"/myapp-1/etc/bigfile" 出错: 设备上没有空间
记录了1973+0 的读入
记录了1972+0 的写出
2067791872字节(2.1 GB)已复制,0.699246 秒,3.0 GB/秒
#给一个后台监控的程序
[root@localhost ~ 10:06:43]# tail -f /myapp-1/etc/bigfile &
[1] 1369
#尝试删除该文件发现没有作用
[root@localhost ~ 10:07:54]# rm -f /myapp-1/etc/bigfile
[root@localhost ~ 10:08:05]# df -h /myapp-1
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 2.0G 2.0G 780K 100% /myapp-1
原因:被删除的文件,仍然有程序在使用。
解决方法:找到像一个的程序并,终止程序。
#把后台文件放到前台并终止
[root@localhost ~ 10:06:43]# tail -f /myapp-1/etc/bigfile &
[1] 1369
[root@localhost ~ 10:08:15]# fg %1
-bash: fg: 任务已经终止
[1]+ 退出 1 tail -f /myapp-1/etc/bigfile
#发现空间被释放
[root@localhost ~ 10:08:54]# df -h /myapp-1
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 2.0G 66M 2.0G 4% /myapp-1
建议:清理大文件,先使用重定向清空文件内容,再删除文件。
情况3:大量的小文件占用空间
#环境准备
[root@localhost ~ 10:15:28]# parted /dev/sdb unit MiB mkpart data02 ext4 2049 3073
信息: You may need to update /etc/fstab.
[root@localhost ~ 10:23:33]# mkfs.ext4 /dev/sdb2
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@localhost ~ 10:23:56]# mkdir /myapp-2
[root@localhost ~ 10:26:02]# mount /dev/sdb2 /myapp-2
[root@localhost ~ 10:26:30]# df -i /myapp-2
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb2 65536 11 65525 1% /myapp-2
#用小文件填充沾满inode
[root@localhost ~ 10:26:45]# touch /myapp-2/file-{00001..65530}
touch: 无法创建"/myapp-2/file-65526": 设备上没有空间
touch: 无法创建"/myapp-2/file-65527": 设备上没有空间
touch: 无法创建"/myapp-2/file-65528": 设备上没有空间
touch: 无法创建"/myapp-2/file-65529": 设备上没有空间
touch: 无法创建"/myapp-2/file-65530": 设备上没有空间
[root@localhost ~ 10:27:23]# df -h /myapp-2/
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb2 976M 4.5M 905M 1% /myapp-2
原因:文件系统中inode使用完了。
解决方法:删除大量的小文件或者将这些小文件备份到其他地方。
[root@localhost ~ 10:27:39]# df -hi /myapp-2
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb2 64K 64K 0 100% /myapp-2
# 思路1:直接将这些小文件移走或删除
[root@localhost ~ 10:33:01]# rm -f /myapp-2/file-0*
# 思路2:合并大量小文件为单个文件
[root@localhost ~ 10:31:14]# cat /myapp-2/file-{00001..10000} > file-00001
思考:如何彻底擦除硬盘上数据
解答:
- 逻辑破坏:用0填充所有数据,例如
dd if=/dev/zero of=/dev/sdb。 - 物理破坏,例如消磁。
Linux RAID 存储技术
环境准备
虚拟机添加6块20G 硬盘,sdb sdc sdd sde sdf sdg
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
Linux 提供 mdadm 实用程序来创建和管理软件RAID。
管理 RAID0
创建 RAID
[root@localhost ~ 11:22:17]# yum install -y mdadm
# 创建一个包含2个块设备的raid0设备/dev/md0
[root@localhost ~ 11:35:07]# mdadm --creat /dev/md0 --level 0 --raid-devices 2 /dev/sd{b,c}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
查看 RAID
# 查看 raid 概要信息
[root@localhost ~ 11:35:38]# cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdc[1] sdb[0]
41908224 blocks super 1.2 512k chunks
unused devices: <none>
# 查看 raid 设备详细信息
[root@localhost ~ 11:36:02]# mdadm --detail /dev/md0/dev/md0:
Version : 1.2
Creation Time : Thu May 21 11:35:38 2026
Raid Level : raid0
Array Size : 41908224 (39.97 GiB 42.91 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Thu May 21 11:35:38 2026
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K
Consistency Policy : none
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 377da9d2:b5852a3e:d76c3d26:2c9a3794
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@localhost ~ 11:36:24]# lsblk /dev/md0
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md0 9:0 0 40G 0 raid0
[root@localhost ~ 11:36:39]# lsblk /dev/sdb /dev/sdcNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─md0 9:0 0 40G 0 raid0
sdc 8:32 0 20G 0 disk
└─md0 9:0 0 40G 0 raid0
格式化和挂载
[root@localhost ~ 11:36:56]# mkfs.xfs /dev/md0
meta-data=/dev/md0 isize=512 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=10475520, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~ 11:39:17]# mkdir -p /raid/raid0
[root@localhost ~ 11:40:40]# mount /dev/md0 /raid/raid0
[root@localhost ~ 11:41:10]# df -h /raid/raid0
文件系统 容量 已用 可用 已用% 挂载点
/dev/md0 40G 33M 40G 1% /raid/raid0
# 创建数据
[root@localhost ~ 11:41:23]# cp /etc/ho* /raid/raid0[root@localhost ~ 11:41:37]# ls /raid/raid0
host.conf hostname hosts hosts.allow hosts.deny
删除 RAID
# 卸载
[root@localhost ~ 11:41:46]# umount /dev/md0
# stop RAID阵列,将删除阵列
[root@localhost ~ 11:42:01]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
# 清除原先设备上的 md superblock
[root@localhost ~ 11:42:15]# mdadm --zero-superblock /dev/sd{b,c}
补充说明
- raid0 条带不能增加新成员盘。
[root@localhost ~ 11:42:50]# mdadm --add /dev/md0 /dev/sdd
mdadm: error opening /dev/md0: No such file or directory
- raid0 条带不能强制故障成员盘。
[root@localhost ~ 11:48:24]# mdadm --fail /dev/md0 /dev/sdc
mdadm: error opening /dev/md0: No such file or directory
管理 RAID1
创建 RAID
# 创建一个包含2个块设备的raid1设备/dev/md1
[root@localhost ~ 11:48:42]# 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@localhost ~ 13:49:39]# mdadm --detail /dev/md1/dev/md1:
Version : 1.2
Creation Time : Thu May 21 13:49:39 2026
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 : Thu May 21 13:49:52 2026
State : clean, resyncing
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Resync Status : 17% complete
Name : localhost.localdomain:1 (local to host localhost.localdomain)
UUID : 55c4110b:1c075833:4241ad43:62a5140a
Events : 2
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@localhost ~ 13:49:57]# lsblk /dev/md1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md1 9:1 0 20G 0 raid1
[root@localhost ~ 13:50:16]# lsblk /dev/sdb /dev/sdcNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─md1 9:1 0 20G 0 raid1
sdc 8:32 0 20G 0 disk
└─md1 9:1 0 20G 0 raid1
格式化和挂载
等待同步完成:直到同步进度达到100%,然后进行格式化和挂载。
[root@localhost ~ 13:52:33]# mkfs.xfs -f /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@localhost ~ 13:52:42]# mkdir /raid/raid1
[root@localhost ~ 13:53:09]# mount /dev/md1 /raid/raid1
[root@localhost ~ 13:53:21]# df -h /raid/raid1
文件系统 容量 已用 可用 已用% 挂载点
/dev/md1 20G 33M 20G 1% /raid/raid1
# 创建数据
[root@localhost ~ 13:53:32]# cp /etc/ho* /raid/raid1
[root@localhost ~ 13:54:20]# ls /raid/raid1/
host.conf hostname hosts hosts.allow hosts.deny
增加热备盘
[root@localhost ~ 13:55:37]# mdadm --add /dev/md1 /dev/sdd
mdadm: added /dev/sdd
[root@localhost ~ 13:55:57]# 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@localhost ~ 13:57:11]# mdadm --fail /dev/md1 /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md1
# 查看成员状态
[root@localhost ~ 13:57:26]# 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@localhost ~ 13:57:42]# ls /raid/raid1
host.conf hostname hosts hosts.allow hosts.deny
[root@localhost ~ 13:58:16]# cat /raid/raid1/hostname
localhost.localdomain
删除故障磁盘
[root@localhost ~ 13:58:43]# mdadm --remove /dev/md1 /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md1
[root@localhost ~ 13:59:20]# mdadm --detail /dev/md1 |tail -5
Events : 42
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
2 8 48 1 active sync /dev/sdd
删除 RAID
# 卸载
[root@localhost ~ 13:59:48]# umount /dev/md1
# stop RAID 阵列,将删除阵列
[root@localhost ~ 14:00:04]# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
# 清除原先设备上的 md superblock
[root@localhost ~ 14:00:24]# mdadm --zero-superblock /dev/sd{b..d}
补充说明
RAID1的设计初衷是数据冗余和可靠性,而不是为了增加存储容量。因此,即使添加了新的硬盘并进行了扩容操作,由于RAID1的工作方式,其总容量是不会增加的。
管理 RAID5
创建 RAID
# 创建一个包含4个块设备的raid5设备/dev/md5
[root@localhost ~ 14:30:59]# 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@localhost ~ 14:31:12]# mdadm --detail /dev/md5/dev/md5:
Version : 1.2
Creation Time : Thu May 21 14:31:11 2026
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 : Thu May 21 14:31:31 2026
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 : 20% complete
Name : localhost.localdomain:5 (local to host localhost.localdomain)
UUID : 712c3c89:bc030f07:d71d7789:aa44f3b3
Events : 4
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@localhost ~ 14:31:33]# lsblk /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md5 9:5 0 60G 0 raid5
[root@localhost ~ 14:36:16]# lsblk /dev/sd{b..e}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─md5 9:5 0 60G 0 raid5
sdc 8:32 0 20G 0 disk
└─md5 9:5 0 60G 0 raid5
sdd 8:48 0 20G 0 disk
└─md5 9:5 0 60G 0 raid5
sde 8:64 0 20G 0 disk
└─md5 9:5 0 60G 0 raid5
格式化和挂载
注意:格式化前,等待 raid 构建完成。
[root@localhost ~ 14:36:20]# 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@localhost ~ 14:36:31]# mkdir /raid/raid5
[root@localhost ~ 14:36:35]# mount /dev/md5 /raid/raid5
[root@localhost ~ 14:36:38]# df -h /raid/raid5/
文件系统 容量 已用 可用 已用% 挂载点
/dev/md5 60G 33M 60G 1% /raid/raid5
# 创建数据
[root@localhost ~ 14:36:41]# cp /etc/ho* /raid/raid5
[root@localhost ~ 14:36:47]# ls /raid/raid5/
host.conf hostname hosts hosts.allow hosts.deny
增加热备盘
# RAID5 阵列增加一个块热备盘
[root@localhost ~ 14:36:50]# mdadm --add /dev/md5 /dev/sdf
mdadm: added /dev/sdf
[root@localhost ~ 14:36:57]# 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@localhost ~ 14:37:03]# mdadm --fail /dev/md5 /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md5
# 查看成员状态
[root@localhost ~ 14:37:08]# 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@localhost ~ 14:37:13]# ls /raid/raid5/
host.conf hostname hosts hosts.allow hosts.deny
[root@localhost ~ 14:37:18]# cat /raid/raid5/hostname
localhost.localdomain
删除故障磁盘
[root@localhost ~ 14:37:22]# mdadm --remove /dev/md5 /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md5
[root@localhost ~ 14:37:26]# 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@localhost ~ 14:37:33]# mdadm --add /dev/md5 /dev/sdb /dev/sdg
mdadm: added /dev/sdb
mdadm: added /dev/sdg
[root@localhost ~ 14:37:38]# 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@localhost ~ 14:38:08]# mdadm --grow /dev/md5 --raid-devices 5
# 等待重组完成
[root@localhost ~ 14:38:51]# mdadm --detail /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Thu May 21 14:31:11 2026
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 : Thu May 21 14:38:59 2026
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 : 24% complete
Delta Devices : 1, (4->5)
Name : localhost.localdomain:5 (local to host localhost.localdomain)
UUID : 712c3c89:bc030f07:d71d7789:aa44f3b3
Events : 77
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@localhost ~ 14:42:35]# lsblk /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md5 9:5 0 80G 0 raid5 /raid/raid5
# 扩展文件系统
[root@localhost ~ 14:42:44]# xfs_growfs /raid/raid5
meta-data=/dev/md5 isize=512 agcount=16, agsize=982144 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=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 bsize=4096 blocks=7680, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 15714304 to 20954112
[root@localhost ~ 14:43:13]# df -h /raid/raid5/
文件系统 容量 已用 可用 已用% 挂载点
/dev/md5 80G 34M 80G 1% /raid/raid5
删除 RAID
# 卸载
[root@localhost ~ 14:43:42]# umount /dev/md5
# stop RAID 阵列,将删除阵列
[root@localhost ~ 14:43:48]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5
# 清除原先设备上的 md superblock
[root@localhost ~ 14:44:02]# mdadm --zero-superblock /dev/sd{b..g}
重构 RAID
# stop之后、清除superblock之前,如果想构建原先的md5设备,使用以下命令,数据不会丢失
[root@centos7 ~]# mdadm --assemble /dev/md5 /dev/sd{b..g}
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@localhost ~ 15:09:04]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
# 此次创建多个PV
[root@localhost ~ 15:09:12]# pvcreate /dev/sd{c..d}
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
# 查看PV列表
[root@localhost ~ 15:09:32]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <199.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@localhost ~ 15:09:35]# 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 Dsgw3H-i0Is-7J0U-1tff-T8Du-imVX-KQISpo
创建卷组
# 创建包涵单个PV的VG
[root@localhost ~ 15:09:53]# vgcreate webapp /dev/sdb
Volume group "webapp" successfully created
# 创建包涵多个PV的VG
[root@localhost ~ 15:12:10]# vgcreate dbapp /dev/sd{c,d}
Volume group "dbapp" successfully created
[root@localhost ~ 15:12:17]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <199.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@localhost ~ 15:12:22]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 3 0 wz--n- <199.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@localhost ~ 15:12:40]# 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 Size 4.00 MiB
# 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 v8l2ZG-oCrH-5fwR-jF5b-aMre-Bkpi-lbZ2Am
创建逻辑卷
# 在卷组webapp中创建一个逻辑卷:名称为webapp01,大小为5G。
[root@localhost ~ 15:13:06]# lvcreate -n webapp01 -L 5G webapp
Logical volume "webapp01" created.
# 在卷组dbapp中创建一个跨硬盘逻辑卷:名称为data01,大小为25G。
[root@localhost ~ 15:13:50]# lvcreate -n data01 -L 25G dbapp
Logical volume "data01" created.
# 查看LV列表
[root@localhost ~ 15:14:21]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home centos -wi-ao---- <145.12g
root centos -wi-ao---- 50.00g
swap centos -wi-ao---- <3.88g
data01 dbapp -wi-a----- 25.00g
webapp01 webapp -wi-a----- 5.00g
逻辑卷设备名支持以下三种格式:
- /dev/vname/lvame
- /dev/mapper/vname-lvame
- /dev/dm-N
[root@localhost ~ 15:14:27]# ls -l /dev/dbapp/data01 /dev/mapper/dbapp-data01
lrwxrwxrwx 1 root root 7 5月 21 15:14 /dev/dbapp/data01 -> ../dm-4
lrwxrwxrwx 1 root root 7 5月 21 15:14 /dev/mapper/dbapp-data01 -> ../dm-4
# 查看单个LV详细信息
[root@localhost ~ 15:16:13]# lvdisplay /dev/dbapp/data01
--- Logical volume ---
LV Path /dev/dbapp/data01
LV Name data01
VG Name dbapp
LV UUID 6xXHQx-1tPZ-iiTY-1aMb-53En-XZ20-oTOKxN
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2026-05-21 15:14:21 +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:4
# 可以看到:物理卷/dev/sdc空间已使用完,物理卷/dev/sdd空间已使用5G
[root@localhost ~ 15:16:41]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <199.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@localhost ~ 15:16:47]# lsblk /dev/sd{b..d}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─webapp-webapp01 253:3 0 5G 0 lvm
sdc 8:32 0 20G 0 disk
└─dbapp-data01 253:4 0 25G 0 lvm
sdd 8:48 0 20G 0 disk
└─dbapp-data01 253:4 0 25G 0 lvm
创建文件系统
[root@localhost ~ 15:17:00]# 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=0r
[root@centos7 ~]# mount /dev/webapp/webapp01 /usr/share/nginx/html
# 基于lvm的文件系统持久化挂载,需要修改/etc/fstab文件。
清理
# 卸载文件系统
[root@localhost ~ 15:52:07]# umount /dev/webapp/webapp01
# 删除LV
[root@localhost ~ 15:52:16]# 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@localhost ~ 15:53:07]# vgremove webapp dbapp
Volume group "webapp" successfully removed
Volume group "dbapp" successfully removed
# 删除PV
[root@localhost ~ 15:53:15]# 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.
扩展和缩减卷组
环境准备
# 创建卷组
[root@localhost ~ 15:53:35]# vgcreate webapp /dev/sdb
Physical volume "/dev/sdb" successfully created.
Volume group "webapp" successfully created
# 创建卷组的时候,如果指定的块设备不是物理卷,则会先将块设备创建为物理卷。
# 创建逻辑卷
[root@localhost ~ 16:18:05]# lvcreate -n webapp01 -L 10G webapp
WARNING: xfs signature detected on /dev/webapp/webapp01 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/webapp/webapp01.
Logical volume "webapp01" created.
扩展卷组
如果卷组空间不足,可以通过添加新的物理卷到卷组中,以扩展卷组容量。
[root@localhost ~ 16:18:58]# vgextend webapp /dev/sd{c,d}
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
Volume group "webapp" successfully extended
缩减卷组
如果卷组空间中有多余的物理卷或者物理卷容量小需要更换,则可以将物理卷从卷组中剔除。
删除物理卷前确保物理卷不在使用中。
# 查看物理卷使用状态
[root@localhost ~ 16:19:28]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <199.00g 4.00m
/dev/sdb webapp lvm2 a-- <20.00g <10.00g#sdb在使用
/dev/sdc webapp lvm2 a-- <20.00g <20.00g
/dev/sdd webapp lvm2 a-- <20.00g <20.00g
# 将物理卷/dev/sdb从卷组webapp中剔除,则会报错
[root@localhost ~ 16:19:34]# vgreduce webapp /dev/sdb
Physical volume "/dev/sdb" still in use
# 解决方法将改物理组移动到卷组中特定物理卷
[root@localhost ~ 16:20:00]# pvmove /dev/sdb /dev/sdd
/dev/sdb: Moved: 0.23%
/dev/sdb: Moved: 100.00%
# 查看物理卷使用状态
[root@localhost ~ 16:24:27]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <199.00g 4.00m
/dev/sdb webapp lvm2 a-- <20.00g <20.00g# 发现sdb不在使用
/dev/sdc webapp lvm2 a-- <20.00g <20.00g
/dev/sdd webapp lvm2 a-- <20.00g <10.00g# 发现sdd在使用
# 再次剔除,成功
[root@localhost ~ 16:24:54]# vgreduce webapp /dev/sdb
Removed "/dev/sdb" from volume group "webapp"
[root@localhost ~ 16:25:23]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <199.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 <10.00g
扩展和缩减逻辑卷
扩展逻辑卷
如果逻辑卷空间不足,在卷组空间充足的情况下,也可以扩展逻辑卷空间。
# 逻辑卷增加2G空间
[root@localhost ~ 16:25:30]# 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@localhost ~ 16:25:59]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-a----- 12.00g
缩减逻辑卷
如果逻辑卷空间充足,希望将多余的空间缩减出来它用,也可以缩减逻辑卷空间。
[root@localhost ~ 16:26:23]# 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@localhost ~ 16:27:44]# 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文件系统只支持扩展,不支持缩减。
环境准备:格式化文件系统,并创建数据
bash [root@centos7 ~]# mkfs.xfs /dev/webapp/webapp01 [root@centos7 ~]# mkdir /usr/share/nginx/html [root@centos7 ~]# mount /dev/webapp/webapp01 /usr/share/nginx/html [root@centos7 ~]# cp /etc/host* /usr/share/nginx/html [root@centos7 ~]# ls /usr/share/nginx/html host.conf hostname hosts hosts.allow hosts.deny
# 第一步:扩展逻辑卷
[root@localhost ~ 16:31:51]# 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@localhost ~ 16:32:14]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-ao---- 15.00g
# 第二步:扩展文件系统
[root@localhost ~ 16:32:59]# xfs_growfs /usr/share/nginx/html
[root@localhost ~ 16:33:30]# df -h /usr/share/nginx/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 15G 33M 15G 1% /usr/share/nginx/html
[root@localhost ~ 16:33:33]# ls /usr/share/nginx/html
host.conf hostname hosts hosts.allow hosts.deny
# 块设备和文件系统一并扩展
[root@localhost ~ 16:33:59]# lvextend -rL 20G /dev/webapp/webapp01
[root@localhost ~ 16:34:30]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-ao---- 20.00g
[root@localhost ~ 16:35:08]# df -h /usr/share/nginx/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 20G 33M 20G 1% /usr/share/nginx/html
扩展 EXT4 文件系统
EXT4文件系统即支持扩展,也支持缩减。
环境准备:格式化文件系统,并创建数据
[root@localhost ~ 16:42:12]# 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@localhost ~ 16:42:16]# mount /dev/webapp/webapp01 /usr/share/nginx/html [root@localhost ~ 16:43:03]# df -h /usr/share/nginx/html 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 20G 45M 19G 1% /usr/share/nginx/html [root@localhost ~ 16:43:20]# cp /etc/host* /usr/share/nginx/html [root@localhost ~ 16:44:01]# ls /usr/share/nginx/html host.conf hosts hosts.deny hostname hosts.allow lost+found #环境准备
# 第一步:扩展逻辑卷
[root@localhost ~ 16:44:13]# 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@localhost ~ 16:44:36]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-ao---- 25.00g
# 第二步:扩展文件系统
[root@localhost ~ 16:45:11]# resize2fs /dev/webapp/webapp01
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/webapp/webapp01 is mounted on /usr/share/nginx/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@localhost ~ 16:45:51]# df -h /usr/share/nginx/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 25G 44M 24G 1% /usr/share/nginx/html
[root@localhost ~ 16:46:28]# ls /usr/share/nginx/html
host.conf hosts hosts.deny
hostname hosts.allow lost+found
# 块设备和文件系统一并扩展
[root@localhost ~ 16:46:48]# lvextend -rL 30G /dev/webapp/webapp01
[root@localhost ~ 16:49:17]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-ao---- 30.00g
[root@localhost ~ 16:49:51]# df -h /usr/share/nginx/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 30G 44M 28G 1% /usr/share/nginx/html
缩减 EXT4 文件系统
缩减EXT4文件系统注意事项:
- 不支持在线缩减,必须卸载后缩减。
- 缩减后的容量,不能小于当前使用的容量。
ext4 减容流程:
- 卸载文件系统
- e2fsck 文件系统
- 缩减文件系统
- 缩减 lv
- 挂载测试
具体操作如下:
# 第一步:卸载文件系统
[root@centos7 ~]# umount /usr/share/nginx/html
# 第二步:检测文件系统
[root@localhost ~ 16:54:21]# 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@localhost ~ 16:54:51]# 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@localhost ~ 16:55:21]# 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@localhost ~ 16:59:46]# mount /dev/webapp/webapp01 /usr/share/nginx/html
[root@localhost ~ 17:00:24]# df -h /usr/share/nginx/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 9.8G 37M 9.2G 1% /usr/share/nginx/html
[root@localhost ~ 17:00:42]# ls /usr/share/nginx/html
host.conf hosts hosts.deny
hostname hosts.allow lost+found
补充说明: 如果文件系统是构建在磁盘分区上,扩展文件系统容量和缩减文件系统容量操作相同。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)