Linux 硬盘分区管理

综合案例:文件系统空间不足

准备环境

[root@server ~ 09:44:38]# parted /dev/sdb mklabel gpt
[root@server ~ 09:44:48]# parted /dev/sdb unit MiB mkpart data01 xfs 1 2049
[root@server ~ 09:44:52]# mkfs.xfs -f /dev/sdb1
[root@server ~ 09:44:56]# mkdir /myapp-1
[root@server ~ 09:45:00]# mount /dev/sdb1 /myapp-1
[root@server ~ 09:45:04]# cp -r /etc/ /myapp-1/

情况1:大量的大文件占用空间

# 创建一个大文件
[root@server ~ 09:45:24]# dd if=/dev/zero of=/myapp-1/etc/bigfile bs=1M count=2000

原因:大文件占用大量空间。

解决方法:找到文件后删除。

[root@server ~ 09:57:27]# df -h /myapp-1/
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb1       2.0G  2.0G  720K  100% /myapp-1

# 方法1:find 查找
[root@server ~ 09:46:26]# find /myapp-1/ -size +100M
/myapp-1/etc/bigfile

# 方法2:du 查找
[root@server ~ 09:57:36]# du -s /myapp-1/* |sort -n |tail -2
2051952	/myapp-1/etc
[root@server ~ 09:58:25]# du -s /myapp-1/etc/* |sort -n |tail -2
19452	/myapp-1/etc/selinux
2019392	/myapp-1/etc/bigfile
[root@server ~ 09:58:51]# du -s /myapp-1/etc/bigfile/* |sort -n |tail -2
du: 无法访问"/myapp-1/etc/bigfile/*": 不是目录

# 删除大文件
[root@server ~ 09:59:17]# rm -f /myapp-1/etc/bigfile

[root@server ~ 09:59:34]# df -h /myapp-1/
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb1       2.0G   66M  2.0G    4% /myapp-1

找到文件后,删除即可。

情况2:删除文件后,空间没有释放

准备环境

#创建一个大文件
[root@server ~ 09:45:24]# dd if=/dev/zero of=/myapp-1/etc/bigfile bs=1M count=2000
[root@server ~ 09:45:41]# df -h /myapp-1/
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb1       2.0G  2.0G  336K  100% /myapp-1
[root@server ~ 09:45:45]# tail -f /myapp-1/etc/bigfile &
[1] 1279

# 删除文件后,空间没有释放
[root@server ~ 09:47:36]# rm -rf /myapp-1/etc/bigfile
[root@server ~ 09:47:58]# df -h /myapp-1/
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb1     2.0G  2.0G  336K  100% /myapp-1

原因:被删除的文件,仍然有程序在使用。

解决方法:找到像一个的程序并,终止程序。

#查看那个进程正在使用
[root@server ~ 09:49:34]# lsof |grep delete |grep /myapp-1
tail      1279         root    3r      REG               8,17 2068250624        781 /myapp-1/etc/bigfile (deleted)
#终止该进程
[root@server ~ 09:51:23]# kill 1279
#再次查看
[root@server ~ 09:51:33]# df -h /myapp-1
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb1       2.0G   66M  2.0G    4% /myapp-1

建议:清理大文件,先使用重定向清空文件内容,再删除文件。

情况3:大量的小文件占用空间

准备环境

[root@server ~ 09:59:44]# parted /dev/sdb unit MiB mkpart data02 ext4 2049 3073
[root@server ~ 10:06:43]# mkfs.ext4 /dev/sdb2
[root@server ~ 10:06:59]# mkdir /myapp-2
[root@server ~ 10:07:18]# mount /dev/sdb2 /myapp-2
#查看磁盘文件数量(inode)
[root@server ~ 10:07:34]# df -i /myapp-2
文件系统       Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb2      65536      11   65525       1% /myapp-2

#常见大量小文件
[root@server ~ 10:07:51]# 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@server ~ 10:13:10]# df -i /myapp-2
文件系统       Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb2      65536   65536       0     100% /myapp-2
#查看磁盘存储空间
[root@centos7 ~] df -h /myapp-2/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2       974M  1.8M  905M   1% /myapp-2
#发现磁盘空间还有但是inode节点用完

原因:文件系统中inode使用完了。

解决方法:删除大量的小文件或者将这些小文件备份到其他地方。

[root@server ~ 10:13:30]# df -hi /myapp-2
文件系统       Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb2        64K     64K       0     100% /myapp-2

# 思路1:直接将这些小文件移走或删除
[root@server ~ 10:15:26]# rm -rf /myapp-2/file-*
[root@server ~ 10:16:07]# df -hi /myapp-2
文件系统       Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb2        64K     55K    9.8K      85% /myapp-2

# 思路2:合并大量小文件为单个文件
[root@server ~ 10:16:11]# cat /myapp-2/file-{00001..10000} > file-00001

如何彻底擦除硬盘上数据

  1. 逻辑破坏:用0填充所有数据,例如 dd if=/dev/zero of=/dev/sdb
  2. 物理破坏,例如消磁。

如何备份硬盘数据

示例:从/dev/sdb读取放到/backup/sdb.image中

备份:dd if=/dev/sdb of=/backup/sdb.image

还原:dd if=/backup/sdb.image 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 0

原理

RAID 0使用数据条带化(striping)的方式将数据分散存储在多个磁盘驱动器上,而不进行冗余备份。数据被分成固定大小的块,并依次存储在每个磁盘上。例如,如果有两个驱动器(驱动器A和驱动器B),一块数据的第一个部分存储在驱动器A上,第二个部分存储在驱动器B上,以此类推。这种条带化的方式可以同时从多个驱动器读取或写入数据,从而提高系统的性能。

在这里插入图片描述

适用场景

RAID 0适用于需要高性能而不关心数据冗余的场景。以下是几种适合使用RAID 0的场景:

  1. 视频编辑和处理:在视频编辑中,需要快速读取和写入大量数据。RAID 0可以通过并行读写操作提高数据传输速度,加快视频编辑和处理的速度。
  2. 大型数据库应用:对于需要频繁访问和查询数据库的应用程序,RAID 0可以提供更快的数据访问速度,加快数据库操作的响应时间。
  3. 实时流媒体:对于需要实时传输和处理大量数据的流媒体应用,RAID 0可以提供足够的带宽和吞吐量,确保流媒体内容的平滑播放。
优点

RAID 0具有以下优点:

  1. 高性能:通过数据条带化和并行读写操作,RAID 0可以提供更快的数据传输速度和更高的系统性能。
  2. 成本效益:相对于其他RAID级别(如RAID 1或RAID 5),RAID 0不需要额外的磁盘用于冗余备份,因此在成本上更具竞争力。
缺点

RAID 0也存在一些缺点:

  1. 缺乏冗余:由于RAID 0不提供数据冗余,如果任何一个驱动器发生故障,所有数据都可能丢失。因此,RAID 0不适合存储关键数据。
  2. 可靠性降低:由于没有冗余备份,RAID 0的可靠性相对较低。如果任何一个驱动器发生故障,整个阵列的可用性将受到影响。

RAID 1

原理

RAID 1使用数据镜像(mirroring)的方式将数据完全复制到两个或多个磁盘驱动器上。当写入数据时,数据同时写入所有驱动器。这样,每个驱动器都具有相同的数据副本,从而实现数据的冗余备份。如果其中一个驱动器发生故障,系统可以继续从剩余的驱动器中读取数据,确保数据的可用性和完整性。

在这里插入图片描述

适用场景

RAID 1适用于对数据冗余和高可用性要求较高的场景。以下是几种适合使用RAID 1的场景:

  1. 关键数据存储:对于关键数据的存储,如企业的财务数据、客户信息等,RAID 1可以提供数据冗余备份,以防止数据丢失。
  2. 数据库服务器:对于需要高可用性和容错性的数据库服务器,RAID 1可以确保数据的持久性和可用性,即使一个驱动器发生故障,也可以从其他驱动器中读取数据。
  3. 文件服务器:对于共享文件的服务器,RAID 1可以提供冗余备份,确保文件的可靠性和高可用性。
优点

RAID 1具有以下优点:

  1. 数据冗余备份:RAID 1通过数据镜像将数据完全复制到多个驱动器上,提供冗余备份,保护数据免受驱动器故障的影响。
  2. 高可用性:由于数据的冗余备份,即使一个驱动器发生故障,系统仍然可以从其他驱动器中读取数据,保证数据的可用性和连续性。
  3. 读取性能提升:RAID 1可以通过并行读取数据的方式提升读取性能,从而加快数据访问速度。
缺点

RAID 1也存在一些缺点:

  1. 成本增加:由于需要额外的磁盘用于数据冗余备份,RAID 1的成本相对较高。需要考虑额外的硬件成本。
  2. 写入性能略低:由于数据需要同时写入多个驱动器,相对于单个驱动器的写入性能,RAID 1的写入性能可能略低。

RAID 5

原理

RAID 5使用数据条带化(striping)的方式将数据分散存储在多个磁盘驱动器上,并通过分布式奇偶校验实现数据的冗余备份。数据和奇偶校验信息被组织成数据块,其中奇偶校验信息被分布式存储在不同的驱动器上。当写入数据时,奇偶校验信息也会被更新。如果其中一个驱动器发生故障,系统可以通过重新计算奇偶校验信息来恢复丢失的数据。这种方式可以同时提供性能增强和数据冗余。

在这里插入图片描述

适用场景

RAID 5适用于需要性能增强和数据冗余的场景。以下是几种适合使用RAID 5的场景:

  1. 文件服务器:对于文件服务器,RAID 5可以提供高性能的数据访问和数据冗余备份,确保文件的安全性和可用性。
  2. 数据库服务器:对于需要高性能和数据冗余的数据库服务器,RAID 5可以提供快速的数据读取和写入,同时保护数据免受驱动器故障的影响。
  3. 小型企业环境:对于小型企业,RAID 5提供了经济实惠的解决方案,同时提供了性能和数据冗余的好处。
优点

RAID 5具有以下优点:

  1. 性能增强:通过数据条带化和并行读写操作,RAID 5可以提供较高的数据传输速度和系统性能。
  2. 数据冗余备份:通过分布式奇偶校验,RAID 5可以提供数据的冗余备份,保护数据免受驱动器故障的影响。
  3. 成本效益:相对于其他RAID级别(如RAID 1),RAID 5只需要额外一个驱动器用于奇偶校验信息,从而在成本上更具竞争力。
缺点

RAID 5也存在一些缺点:

  1. 写入性能受限:由于写入数据时需要重新计算奇偶校验信息,相对于读取操作,RAID 5的写入性能较低。
  2. 驱动器故障期间的数据完整性:如果一个驱动器发生故障,系统在恢复数据时需要进行计算,这可能导致数据访问速度较慢,并且在此期间可能会有数据完整性的风险。

RAID 10

原理

RAID 10使用条带化(striping)的方式将数据分散存储在多个磁盘驱动器上,并通过镜像(mirroring)实现数据的冗余备份。数据被分成固定大小的块,并依次存储在不同的驱动器上,类似于RAID 0。然而,每个数据块都会被完全复制到另一个驱动器上,实现数据的冗余备份,类似于RAID 1。这样,RAID 10在提供性能增强的同时,也提供了数据的冗余保护。

在这里插入图片描述

适用场景

RAID 10适用于需要高性能和数据冗余的场景。以下是几种适合使用RAID 10的场景:

  1. 数据库服务器:对于需要高可用性和性能的数据库服务器,RAID 10可以提供快速的数据读取和写入,同时保护数据免受驱动器故障的影响。
  2. 虚拟化环境:在虚拟化环境中,需要高性能和数据冗余来支持多个虚拟机的运行。RAID 10可以满足这些要求,提供性能增强和数据保护。
  3. 关键业务应用:对于关键业务应用,如金融交易系统或在线电子商务平台,RAID 10可以提供高可用性和快速的数据访问,确保业务的连续性和稳定性。
优点

RAID 10具有以下优点:

  1. 高性能:通过数据条带化和并行读写操作,RAID 10可以提供较高的数据传输速度和系统性能。
  2. 数据冗余备份:通过数据镜像将数据完全复制到另一个驱动器上,RAID 10提供了数据的冗余备份,保护数据免受驱动器故障的影响。
  3. 较高的可靠性:由于RAID 10采用镜像的方式进行数据冗余备份,即使一个驱动器发生故障,仍然可以从其他驱动器中读取数据,确保数据的可用性和连续性。
  4. 快速的故障恢复:在RAID 10中,如果一个驱动器发生故障,系统可以直接从镜像驱动器中恢复数据,而无需进行复杂的计算,从而加快故障恢复的速度。
缺点

RAID 10也存在一些缺点:

  1. 较高的成本:相对于其他RAID级别,RAID 10需要更多的驱动器用于数据镜像,从而增加了硬件成本。
  2. 低效的空间利用:由于RAID 10的数据镜像特性,有效的存储容量只等于所有驱动器中一半的容量,因此空间利用率较低。

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@server ~ 10:52:47]# yum install -y mdadm

# 创建一个包含4个块设备的raid0设备/dev/md0
[root@server ~ 11:22:20]# mdadm --create /dev/md0 --level=0 --raid-devices=4 /dev/sd{b..e}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
查看 RAID
# 查看 raid 概要信息
[root@server ~ 10:52:48]# cat /proc/mdstat 

#查看磁盘状态
[root@server ~ 11:26:38]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda               8:0    0   200G  0 disk  
├─sda1            8:1    0     1G  0 part  /boot
└─sda2            8:2    0   199G  0 part  
  ├─centos-root 253:0    0    50G  0 lvm   /
  ├─centos-swap 253:1    0   3.9G  0 lvm   [SWAP]
  └─centos-home 253:2    0 145.1G  0 lvm   /home
sdb               8:16   0    20G  0 disk  
└─md0             9:0    0    80G  0 raid0 
sdc               8:32   0    20G  0 disk  
└─md0             9:0    0    80G  0 raid0 
sdd               8:48   0    20G  0 disk  
└─md0             9:0    0    80G  0 raid0 
sde               8:64   0    20G  0 disk  
└─md0             9:0    0    80G  0 raid0 
sdf               8:80   0    20G  0 disk  
sdg               8:96   0    20G  0 disk  
sr0              11:0    1   4.4G  0 rom 
# 查看 raid 设备详细信息(--detail或者-D)
[root@server ~ 11:27:56]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Thu May 21 11:26:38 2026
        Raid Level : raid0
        Array Size : 83816448 (79.93 GiB 85.83 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Thu May 21 11:26:38 2026
             State : clean 
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : none

              Name : server.ggg.cloud:0  (local to host server.ggg.cloud)
              UUID : 8c7a3e4c:b58d7634:b0392649:3baefecc
            Events : 0

    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
       3       8       64        3      active sync   /dev/sde
       
       
       
#不修改磁盘,扫描并列出磁盘上所有已存在的文件系统 / 分区 / RAID 等标识
[root@server ~ 11:28:06]# wipefs /dev/sd{b..e}
offset               type
----------------------------------------------------------------
0x1000               linux_raid_member   [raid]
                     LABEL: server.ggg.cloud:0
                     UUID:  8c7a3e4c-b58d-7634-b039-26493baefecc

offset               type
----------------------------------------------------------------
0x1000               linux_raid_member   [raid]
                     LABEL: server.ggg.cloud:0
                     UUID:  8c7a3e4c-b58d-7634-b039-26493baefecc

offset               type
----------------------------------------------------------------
0x1000               linux_raid_member   [raid]
                     LABEL: server.ggg.cloud:0
                     UUID:  8c7a3e4c-b58d-7634-b039-26493baefecc

offset               type
----------------------------------------------------------------
0x1000               linux_raid_member   [raid]
                     LABEL: server.ggg.cloud:0
                     UUID:  8c7a3e4c-b58d-7634-b039-26493baefecc

需要关注的属性

  • Raid Level : raid0
  • State : clean
  • Chunk Size : 512K
  • 设备清单
[root@server ~ 11:43:55]# lsblk /dev/md0
NAME MAJ:MIN RM SIZE RO TYPE  MOUNTPOINT
md0    9:0    0  80G  0 raid0
格式化和挂载
[root@server ~ 11:29:10]# mkfs.xfs /dev/md0
[root@server ~ 11:29:28]# mkdir -p /raid/raid0
[root@server ~ 11:29:43]# mount /dev/md0 /raid/raid0

[root@server ~ 11:30:02]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda               8:0    0   200G  0 disk  
├─sda1            8:1    0     1G  0 part  /boot
└─sda2            8:2    0   199G  0 part  
  ├─centos-root 253:0    0    50G  0 lvm   /
  ├─centos-swap 253:1    0   3.9G  0 lvm   [SWAP]
  └─centos-home 253:2    0 145.1G  0 lvm   /home
sdb               8:16   0    20G  0 disk  
└─md0             9:0    0    80G  0 raid0 /raid/raid0
sdc               8:32   0    20G  0 disk  
└─md0             9:0    0    80G  0 raid0 /raid/raid0
sdd               8:48   0    20G  0 disk  
└─md0             9:0    0    80G  0 raid0 /raid/raid0
sde               8:64   0    20G  0 disk  
└─md0             9:0    0    80G  0 raid0 /raid/raid0
sdf               8:80   0    20G  0 disk  
sdg               8:96   0    20G  0 disk  
sr0              11:0    1   4.4G  0 rom
[root@server ~ 11:30:15]# df -h /raid/raid0
文件系统        容量  已用  可用 已用% 挂载点
/dev/md0         80G   33M   80G    1% /raid/raid0

# 创建数据
[root@server ~ 11:32:53]# cp /etc/ho* /raid/raid0
[root@server ~ 11:33:12]# ls /raid/raid0
host.conf  hostname  hosts  hosts.allow  hosts.deny
删除 RAID
# 卸载
root@server ~ 11:33:18]# umount /dev/md0

# stop RAID阵列,将删除阵列
[root@server ~ 11:33:41]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
#删除后查看
[root@server ~ 11:34:00]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   200G  0 disk 
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0   199G  0 part 
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 145.1G  0 lvm  /home
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 
sdf               8:80   0    20G  0 disk 
sdg               8:96   0    20G  0 disk 
sr0              11:0    1   4.4G  0 rom 

# 清除原先设备上的 md superblock(也可以用wipefs -a /dev/sd{b..e})
[root@server ~ 11:34:49]# mdadm --zero-superblock /dev/sd{b..e}
补充说明
  • raid0 条带不能增加新成员盘。

    [root@server ~ 11:49:33]# mdadm --add /dev/md0 /dev/sdd
    mdadm: add new device failed for /dev/sdd as 2: Invalid argument
    
  • raid0 条带不能强制故障成员盘。

    [root@server ~ 12:18:52]# mdadm --fail /dev/md0 /dev/sdc
    mdadm: Cannot remove /dev/sdc from /dev/md0, array will be failed.
    

管理 RAID1

创建 RAID
# 创建一个包含2个块设备的raid1设备/dev/md1
[root@server ~ 12:20:00]# 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 ~ 13:48:50]# mdadm --detail /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Thu May 21 13:48:50 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:03 2026
             State : clean, resyncing 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

     Resync Status : 15% complete

              Name : server.ggg.cloud:1  (local to host server.ggg.cloud)
              UUID : 74864281:5bffdf75:1dcf7163:e8aa1aa4
            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@server ~ 13:49:06]# lsblk /dev/md1
NAME MAJ:MIN RM SIZE RO TYPE  MOUNTPOINT
md1    9:1    0  20G  0 raid1 

[root@server ~ 13:49:20]# lsblk /dev/sdb /dev/sdc
NAME  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@server ~ 13:49:35]# mkfs.xfs /dev/md1
[root@server ~ 13:49:56]# mkdir /raid/raid1
[root@server ~ 13:50:05]# mount /dev/md1 /raid/raid1
[root@server ~ 13:50:19]# df -h /raid/raid1
文件系统        容量  已用  可用 已用% 挂载点
/dev/md1         20G   33M   20G    1% /raid/raid1

# 创建数据
[root@server ~ 13:50:32]# cp /etc/ho* /raid/raid1
[root@server ~ 13:50:54]# ls /raid/raid1
host.conf  hostname  hosts  hosts.allow  hosts.deny
增加热备盘
#将sdd当做热备盘
[root@server ~ 13:51:26]# mdadm --add /dev/md1 /dev/sdd
mdadm: added /dev/sdd

[root@server ~ 13:51:32]# 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 ~ 13:52:03]# mdadm --fail /dev/md1 /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md1

# 查看成员状态
[root@server ~ 13:52:36]# 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 ~ 13:53:23]# ls /raid/raid1
host.conf  hostname  hosts  hosts.allow  hosts.deny
[root@server ~ 13:55:01]# cat /raid/raid1/hostname
server.ggg.cloud
删除故障磁盘
[root@server ~ 13:57:19]# mdadm --remove /dev/md1 /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md1

[root@server ~ 13:57:47]# mdadm --detail /dev/md1 |tail -5
            Events : 46

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       2       8       48        1      active sync   /dev/sdd
删除 RAID
# 卸载
[root@centos7 ~]# umount /dev/md1

# stop RAID 阵列,将删除阵列
[root@server ~ 13:58:40]# mdadm --stop /dev/md1
mdadm: stopped /dev/md1

# 清除原先设备上的 md superblock
[root@server ~ 13:58:59]# mdadm --zero-superblock /dev/sd{b..d}
补充说明

RAID1的设计初衷是数据冗余和可靠性,‌而不是为了增加存储容量。‌因此,‌即使添加了新的硬盘并进行了扩容操作,‌由于RAID1的工作方式,‌其总容量是不会增加的。

管理 RAID5

创建 RAID
# 创建一个包含4个块设备的raid5设备/dev/md5
[root@server ~ 14:02:36]# mdadm --create /dev/md5 --level 5 --raid-device=4 /dev/sd{b..e}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
查看 RAID
[root@server ~ 14:03:44]# mdadm --detail /dev/md5
/dev/md5:
           Version : 1.2
     Creation Time : Thu May 21 14:02:58 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:03:44 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 : 48% complete

              Name : server.ggg.cloud:5  (local to host server.ggg.cloud)
              UUID : a332c80c:1030bdbb:dfe0b2ce:e14e7898
            Events : 8

    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

需要关注的属性

  • Raid Level : raid5
  • State : clean, resyncing,正在同步。
  • Consistency Policy : resync
  • Resync Status : 17% complete,同步进度。
  • 设备清单
[root@server ~ 14:05:01]# lsblk /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE  MOUNTPOINT
md5    9:5    0  60G  0 raid5

[root@server ~ 14:05:22]# 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@server ~ 14:06:09]# mkfs.xfs -f /dev/md5
[root@server ~ 14:06:13]# mkdir /raid/raid5
[root@server ~ 14:06:22]# mount /dev/md5 /raid/raid5
[root@server ~ 14:06:36]# df -h /raid/raid5
文件系统        容量  已用  可用 已用% 挂载点
/dev/md5         60G   33M   60G    1% /raid/raid5

# 创建数据
[root@server ~ 14:06:49]# cp /etc/ho* /raid/raid5
[root@server ~ 14:07:53]# ls  /raid/raid5
host.conf  hostname  hosts  hosts.allow  hosts.deny
增加热备盘
# RAID5 阵列增加一个块热备盘
[root@centos7 ~]# mdadm --add /dev/md5 /dev/sdf
mdadm: added /dev/sdf

[root@server ~ 14:17:30]# mdadm --detail /dev/md5|tail -15
        Chunk Size : 512K

Consistency Policy : resync

              Name : server.ggg.cloud:5  (local to host server.ggg.cloud)
              UUID : a332c80c:1030bdbb:dfe0b2ce:e14e7898
            Events : 19

    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@centos7 ~]# mdadm --fail /dev/md5 /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md5

# 查看成员状态
[root@server ~ 14:18: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@server ~ 14:18:14]# ls /raid/raid5
host.conf  hostname  hosts  hosts.allow  hosts.deny
删除故障磁盘
[root@server ~ 14:18:29]# mdadm --remove /dev/md5 /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md5

[root@server ~ 14:19:37]# mdadm -D /dev/md5 |tail -7
            Events : 35

    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 ~ 14:19:40]# mdadm --add /dev/md5 /dev/sd{b,g}
mdadm: added /dev/sdb
mdadm: added /dev/sdg
[root@server ~ 14:20:29]# mdadm -D /dev/md5 |tail -8
    Number   Major   Minor   RaidDevice State
       5       8       80        0      active sync   /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


#扩容前md5状态
[root@server ~ 14:20:34]# lsblk /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE  MOUNTPOINT
md5    9:5    0  60G  0 raid5 /raid/raid5
[root@server ~ 14:23:09]# df -h /raid/raid5
文件系统        容量  已用  可用 已用% 挂载点
/dev/md5         60G   33M   60G    1% /raid/raid5
# 设置成员数量为5,-G是grow(扩展)
[root@server ~ 14:20:56]# mdadm --grow /dev/md5 --raid-devices=5

# 等待重组完成
[root@server ~ 14:21:48]# mdadm -D /dev/md5
......
Consistency Policy : resync

    Reshape Status : 7% complete
     Delta Devices : 1, (4->5)

              Name : server.ggg.cloud:5  (local to host server.ggg.cloud)
              UUID : a332c80c:1030bdbb:dfe0b2ce:e14e7898
            Events : 69

    Number   Major   Minor   RaidDevice State
       5       8       80        0      active sync   /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@server ~ 14:23:43]# lsblk /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE  MOUNTPOINT
md5    9:5    0  80G  0 raid5 /raid/raid5

# 扩展文件系统
[root@server ~ 14:23:48]# 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@server ~ 14:24:09]# df -h /raid/raid5/
文件系统        容量  已用  可用 已用% 挂载点
/dev/md5         80G   34M   80G    1% /raid/raid5
删除 RAID
# 卸载
[root@server ~ 14:24:29]# umount /dev/md5

# stop RAID 阵列,将删除阵列
[root@server ~ 14:24:46]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5

# 清除原先设备上的 md superblock
[root@server ~ 14:24:55]# mdadm --zero-superblock /dev/sd{b..g}
[root@server ~ 14:25:30]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   200G  0 disk 
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0   199G  0 part 
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 145.1G  0 lvm  /home
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 
sdf               8:80   0    20G  0 disk 
sdg               8:96   0    20G  0 disk 
sr0              11:0    1   4.4G  0 rom 
重构 RAID
# stop之后、清除superblock之前,如果想构建原先的md5设备,使用以下命令,数据不会丢失
[root@server ~ 14:25:40]# 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将若干个磁盘或者磁盘分区连接为一个整块的卷组,形成一个存储池。管理员可以在卷组上任意创建逻辑卷,并进一步在逻辑卷上创建文件系统。

image-20221226104759787
  • 物理卷(PV, Physical Volume),是LVM的基本存储逻辑块,通过块设备创建。块设备是指磁盘、磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID)。与基本的物理存储介质(如分区、磁盘等)相比,物理卷包含有和LVM相关的管理参数。
  • 卷组(VG, Volume Group),是一个逻辑的存储空间,由一个或多个物理卷组成。
  • 逻辑卷(LV, Logical Volume),是从卷组中创建出来的一个逻辑空间。如果把一个卷组类比为一个逻辑硬盘,那么逻辑卷则可以类比为一个硬盘分区,所以也可以在逻辑卷之上创建文件系统。

简单地说:卷组由多个物理卷组成,可以在卷组中创建多个逻辑卷,对逻辑卷创建文件系统给用户使用。

LVM管理基本流程:

  1. 创建物理卷
  2. 创建卷组
  3. 创建逻辑卷
image-20221226141838663

创建物理卷

# 创建三个PV
[root@server ~ 14:56:45]# pvcreate /dev/sdb /dev/sdc /dev/sdd
  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.
  Physical volume "/dev/sdd" successfully created.

  
# 查看PV列表
[root@server ~ 14:57:03]# 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@server ~ 14:57:19]# 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               oR3TR4-octq-Lsg4-uZIH-Tcot-g3Kn-ADG3DX

创建卷组

# 创建包涵单个PV的VG
[root@server ~ 14:57:28]# vgcreate webapp /dev/sdb
  Volume group "webapp" successfully created

# 创建包涵多个PV的VG
[root@server ~ 15:08:49]# vgcreate dbapp /dev/sd{c,d}
  Volume group "dbapp" successfully created

[root@server ~ 15:09:11]# 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@server ~ 15:09:14]# 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@server ~ 15:09:19]# 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               xwFXkx-YHYC-xPPS-F9Ph-b6L8-aLsC-Rbf1yc

创建逻辑卷

# 在卷组webapp中创建一个逻辑卷:名称为webapp01,大小为5G。
[root@server ~ 15:09:33]# lvcreate -n webapp01 -L 5G webapp
  Logical volume "webapp01" created.

# 在卷组dbapp中创建一个跨硬盘逻辑卷:名称为data01,大小为25G。
[root@server ~ 15:10:39]# lvcreate -n data01 -L 25G dbapp
  Logical volume "data01" created.

# 查看LV列表
[root@server ~ 15:11:37]# 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@server ~ 15:11:41]# ls -l /dev/dbapp/data01 /dev/mapper/dbapp-data01 -l
lrwxrwxrwx 1 root root 7 521 15:11 /dev/dbapp/data01 -> ../dm-4
lrwxrwxrwx 1 root root 7 521 15:11 /dev/mapper/dbapp-data01 -> ../dm-4
# 查看单个LV详细信息
[root@server ~ 15:12:30]# lvdisplay /dev/dbapp/data01 
  --- Logical volume ---
  LV Path                /dev/dbapp/data01
  LV Name                data01
  VG Name                dbapp
  LV UUID                cJelin-33ZJ-dxSo-HIjT-2vn2-iqJR-dx8GCi
  LV Write Access        read/write
  LV Creation host, time server.ggg.cloud, 2026-05-21 15:11:37 +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@server ~ 15:12:43]# 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@server ~ 15:13:37]# 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@server ~ 15:13:42]# mkfs.xfs /dev/webapp/webapp01
[root@server ~ 15:17:21]# mount /dev/webapp/webapp01 /usr/share/nginx/html
[root@server ~ 15:18:14]# df -h /dev/webapp/webapp01
文件系统                     容量  已用  可用 已用% 挂载点
/dev/mapper/webapp-webapp01  5.0G   33M  5.0G    1% /usr/share/nginx/html
[root@server ~ 15:19:58]# echo hh > /usr/share/nginx/html/index.html
[root@server ~ 15:21:10]# systemctl enable nginx.service --now
[root@server ~ 15:21:16]# systemctl restart nginx.service 
[root@server ~ 15:21:26]# curl http://localhost
hh
# 基于lvm的文件系统持久化挂载,需要修改/etc/fstab文件。

清理

# 卸载文件系统
[root@centos7 ~]# umount /dev/webapp/webapp01

# 删除LV
[root@centos7 ~]# 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 ~ 15:52:50]# 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
[root@server ~ 15:52:53]# vgremove webapp dbapp
  Volume group "webapp" successfully removed
  Volume group "dbapp" successfully removed
[root@server ~ 15:53:07]# vgs
  VG     #PV #LV #SN Attr   VSize    VFree
  centos   1   3   0 wz--n- <199.00g 4.00m

# 删除PV
[root@server ~ 15:53:10]# 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@server ~ 15:53:26]# pvs
  PV         VG     Fmt  Attr PSize    PFree
  /dev/sda2  centos lvm2 a--  <199.00g 4.00m

扩展和缩减卷组

环境准备

# 创建卷组
#如果/dev/sdb不是物理卷会自动创建
[root@server ~ 15:53:35]# vgcreate webapp /dev/sdb
  Physical volume "/dev/sdb" successfully created.
  Volume group "webapp" successfully created


# 创建逻辑卷
[root@server ~ 16:16:26]# 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@server ~ 16:17:18]# vgs
  VG     #PV #LV #SN Attr   VSize    VFree  
  centos   1   3   0 wz--n- <199.00g   4.00m
  webapp   1   1   0 wz--n-  <20.00g <10.00g

#扩容卷组
[root@server ~ 16:17:50]# 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 ~ 16:18:25]# vgs
  VG     #PV #LV #SN Attr   VSize    VFree  
  centos   1   3   0 wz--n- <199.00g   4.00m
  webapp   3   1   0 wz--n-  <59.99g <49.99g
#从20G扩到60G

缩减卷组

如果卷组空间中有多余的物理卷或者物理卷容量小需要更换,则可以将物理卷从卷组中剔除。

删除物理卷前确保物理卷不在使用中。

# 查看物理卷使用状态
[root@server ~ 16:18:34]# 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
  /dev/sdc   webapp lvm2 a--   <20.00g <20.00g
  /dev/sdd   webapp lvm2 a--   <20.00g <20.00g

# 直接将物理卷/dev/sdb从卷组webapp中剔除会报错,因为有一个逻辑卷在使用
[root@server ~ 16:19:08]# vgreduce webapp /dev/sdb
  Physical volume "/dev/sdb" still in use

# 解决方法:将物理卷/dev/sdb中数据移动到卷组中其他物理卷
[root@server ~ 16:19:42]# pvmove /dev/sdb
# 或者移动到卷组中特定物理卷
[root@server ~ 16:19:42]# pvmove /dev/sdb /dev/sdd
  /dev/sdb: Moved: 0.55%
  /dev/sdb: Moved: 100.00%

# 查看物理卷使用状态
[root@server ~ 16:21:18]# 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   webapp lvm2 a--   <20.00g <20.00g
  /dev/sdd   webapp lvm2 a--   <20.00g <10.00g在使用

#然后再次剔除/dev/sdb,成功
[root@server ~ 16:21:20]# vgreduce webapp /dev/sdb
  Removed "/dev/sdb" from volume group "webapp"
#再次查看物理卷状态发现/dev/sdb已经不属于webapp卷组
[root@server ~ 16:22:20]# 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

扩展和缩减逻辑卷

扩展逻辑卷

如果逻辑卷空间不足,在卷组空间充足的情况下,也可以扩展逻辑卷空间。

#查看当前webapp01逻辑卷容量
[root@server ~ 16:22:29]# 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                                                    
  webapp01 webapp -wi-a-----   10.00g
# 给webapp01逻辑卷增加2G空间
[root@server ~ 16:23:33]# 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.

#再次查看当前webapp01逻辑卷容量,已经从10G变到12G
[root@server ~ 16:24:20]# 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                                                    
  webapp01 webapp -wi-a-----   12.00g 

缩减逻辑卷

如果逻辑卷空间充足,希望将多余的空间缩减出来它用,也可以缩减逻辑卷空间。

#从上面延续继续减2G逻辑卷容量
[root@server ~ 16:24:37]# 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.
#再次查看已经从12G减到10G
[root@server ~ 16:25: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                                                    
  webapp01 webapp -wi-a-----   10.00g

扩展和缩减文件系统

扩展 XFS 文件系统

XFS文件系统只支持扩展不支持缩减

环境准备:格式化文件系统,并创建数据

#以XFS文件系统格式化/dev/webapp/webapp01
[root@server ~ 16:29:14]# 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 ~ 16:30:12]# mkdir /usr/share/nginx/html
[root@server ~ 16:30:12]# mount /dev/webapp/webapp01 /usr/share/nginx/html
[root@server ~ 16:30:40]# df -h /dev/webapp/webapp01
文件系统                     容量  已用  可用 已用% 挂载点
/dev/mapper/webapp-webapp01   10G   33M   10G    1% /usr/share/nginx/html
[root@server ~ 16:30:50]# cp /etc/host* /usr/share/nginx/html
[root@server ~ 16:31:09]# ls /usr/share/nginx/html
host.conf  hostname  hosts  hosts.allow  hosts.deny
# 第一步:扩展逻辑卷
  #先查看当前逻辑卷
[root@server ~ 16:31:15]# 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                                                    
  webapp01 webapp -wi-ao----   10.00g
  #扩展到15G
[root@server ~ 16:32:23]# 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 ~ 16:33:11]# 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 ~ 16:34:09]# df -h /usr/share/nginx/html
文件系统                     容量  已用  可用 已用% 挂载点
/dev/mapper/webapp-webapp01   10G   33M   10G    1% /usr/share/nginx/html
[root@server ~ 16:33:33]# xfs_growfs /usr/share/nginx/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 ~ 16:34:09]# df -h /usr/share/nginx/html
文件系统                     容量  已用  可用 已用% 挂载点
/dev/mapper/webapp-webapp01   15G   33M   15G    1% /usr/share/nginx/html
#文件也没有损坏
[root@server ~ 16:34:29]# ls /usr/share/nginx/html
host.conf  hostname  hosts  hosts.allow  hosts.deny

# 块设备和文件系统一并扩展(一步到位)
[root@server ~ 16:35:05]# 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 ~ 16:36:12]# 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 ~ 16:36:31]# df -h /usr/share/nginx/html
文件系统                     容量  已用  可用 已用% 挂载点
/dev/mapper/webapp-webapp01   20G   33M   20G    1% /usr/share/nginx/html

扩展 EXT4 文件系统

EXT4文件系统即支持扩展,也支持缩减。

环境准备:格式化文件系统,并创建数据

#卸载
[root@server ~ 16:36:34]# umount /usr/share/nginx/html 
#用ext4格式化
[root@server ~ 16:36:57]# 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@centos7 ~]# mount /dev/webapp/webapp01 /usr/share/nginx/html
[root@server ~ 16:37:56]# df -h /usr/share/nginx/html
文件系统                     容量  已用  可用 已用% 挂载点
/dev/mapper/webapp-webapp01   20G   45M   19G    1% /usr/share/nginx/html

#因为格式化了所以现在/usr/share/nginx/html里面没有东西
[root@server ~ 16:38:04]# ls /usr/share/nginx/html/
lost+found

#放一点东西进去
[root@server ~ 16:38:23]# cp /etc/host* /usr/share/nginx/html
[root@server ~ 16:39:06]# ls /usr/share/nginx/html/
host.conf  hostname  hosts  hosts.allow  hosts.deny  lost+found
# 第一步:扩展逻辑卷
[root@server ~ 16:39:09]# 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 ~ 16:39:40]# 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 ~ 16:40:03]# 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@server ~ 16:40:31]# df -h /usr/share/nginx/html
文件系统                     容量  已用  可用 已用% 挂载点
/dev/mapper/webapp-webapp01   25G   44M   24G    1% /usr/share/nginx/html

#文件也还在
[root@server ~ 16:40:42]# ls /usr/share/nginx/html
host.conf  hostname  hosts  hosts.allow  hosts.deny  lost+found

# 块设备和文件系统一并扩展
[root@server ~ 16:42:10]# 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 /usr/share/nginx/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 ~ 16:43:13]# 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 ~ 16:43:22]# df -h /usr/share/nginx/html
文件系统                     容量  已用  可用 已用% 挂载点
/dev/mapper/webapp-webapp01   30G   44M   28G    1% /usr/share/nginx/html

缩减 EXT4 文件系统

缩减EXT4文件系统注意事项:

  • 不支持在线缩减,必须卸载后缩减。
  • 缩减后的容量,不能小于当前使用的容量。

ext4 减容流程:

  1. 卸载文件系统
  2. e2fsck 文件系统
  3. 缩减文件系统
  4. 缩减 lv
  5. 挂载测试

具体操作如下:

# 第一步:卸载文件系统
[root@server ~ 16:43:26]# umount /usr/share/nginx/html 

# 第二步:检测文件系统
[root@server ~ 16:43:48]# 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 ~ 16:44:07]# 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 ~ 16:44:39]# 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 ~ 16:45:56]# lvs /dev/webapp/webapp01 
  LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  webapp01 webapp -wi-a----- 10.00g

# 第五步:挂载文件系统验证
[root@server ~ 16:46:04]# mount /dev/webapp/webapp01 /usr/share/nginx/html
[root@server ~ 16:46:17]# df -h /usr/share/nginx/html
文件系统                     容量  已用  可用 已用% 挂载点
/dev/mapper/webapp-webapp01  9.8G   37M  9.2G    1% /usr/share/nginx/html

#文件也没有损坏
[root@server ~ 16:46:21]# ls /usr/share/nginx/html
host.conf  hostname  hosts  hosts.allow  hosts.deny  lost+found

补充说明: 如果文件系统是构建在磁盘分区上,扩展文件系统容量和缩减文件系统容量操作相同。





Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐