RAID 存储
RAID 概念
RAID,即廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks)。

大容量磁盘价格高昂,RAID的核心思路是将多块容量小、成本低的磁盘组合成大容量、高性能和可靠性的大容量磁盘。

随着磁盘成本大幅下降,“廉价”概念失去意义,RAID咨询委员会(RAID Advisory Board, RAB)将“廉价(Inexpensive)”替换为“独立(Independent)”,RAID自此定义为独立磁盘冗余阵列(Redundant Array of Independent Disks)。

RAID 实现方式
从技术实现维度,RAID主要分为三类,核心差异在于是否依赖专用硬件芯片:

软 RAID:无独立的RAID控制/处理芯片和I/O处理芯片,所有RAID功能由操作系统和CPU完成,实现成本低但效率最差。
硬 RAID:配备专用RAID控制/处理芯片、I/O处理芯片及阵列缓冲,不占用主机CPU资源,性能优异但硬件成本高。
软硬混合 RAID:具备RAID控制/处理芯片,但无独立I/O处理芯片,需CPU和驱动程序辅助完成功能,性能与成本介于软RAID和硬RAID之间。
操作系统识别到的设备是raid卡提供的设备,而不是直接管理底层硬盘。

RAID 级别
RAID通过数据条带、镜像、数据校验三类核心技术实现高性能、高可靠性、容错能力和扩展性。不同技术的组合策略形成不同RAID级别,以适配不同数据应用场景。

D. A. Patterson等的论文最初定义了RAID1RAID5,1988年后扩展出RAID0和RAID6;后续厂商推出的RAID7、RAID10/01、RAID50等无统一标准,业界公认的核心级别为RAID0RAID5,实际应用中以RAID0、RAID1、RAID4、RAID5、RAID6、RAID10为主。

各RAID级别无高低之分,需结合业务对可用性、性能、成本的需求选择适配的级别和实现方式
在这里插入图片描述
RAID 实践
实验环境需在虚拟机中添加6块20G硬盘,设备名分别为sdb、sdc、sdd、sde、sdf、sdg,用于后续各类RAID阵列的创建与测试。

Linux系统中通过mdadm工具实现软RAID的创建、配置、监控与维护,以下为核心RAID级别的实操流程。

管理 RAID 0
1 创建 RAID 0

# 安装mdadm工具(CentOS系统)
[root@CentOS7 ~ 10:01:23]# yum install -y mdadm

# 创建RAID 0阵列:设备名/dev/md0,级别0,成员盘2块(sdb、sdc)
[root@CentOS7 ~ 10:27:26]# mdadm --create /dev/md0 --level 0 --raid-devices 2 /dev/sd{b,c}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

注释:--level指定RAID级别,--raid-devices指定成员盘数量,/dev/sd{b,c}为sdb和sdc的简写。

2 查看 RAID 0 状态

# 查看RAID概要信息(内核态RAID状态)
[root@CentOS7 ~ 10:27:43]# cat /proc/mdstat 
Personalities : [raid0] 
md0 : active raid0 sdc[1] sdb[0]
      41908224 blocks super 1.2 512k chunks
      
unused devices: <none>

# 查看RAID设备详细信息
[root@CentOS7 ~ 10:28:04]# mdadm  --detail /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Thu Apr  9 10:27:43 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 Apr  9 10:27:43 2026
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : none

              Name : CentOS7.liang.cloud:0  (local to host CentOS7.liang.cloud)
              UUID : 9675efe8:556a055d:e5c43abf:4a7367de
            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(级别)、State(状态,clean为正常)、Chunk Size(条带块大小)、成员盘状态。
# 查看RAID设备与物理盘的映射关系

[root@CentOS7 ~ 10:28:42]# lsblk /dev/md0 
NAME MAJ:MIN RM SIZE RO TYPE  MOUNTPOINT
md0    9:0    0  40G  0 raid0 


[root@CentOS7 ~ 10:29:06]# lsblk /dev/sdb /dev/sdc
NAME  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 

3 格式化与挂载 RAID 0

# 格式化RAID设备为XFS文件系统
[root@CentOS7 ~ 10:29:28]# 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@CentOS7 ~ 10:30:04]# mkdir -p /raid/raid0
# 挂载RAID设备到挂载点
[root@CentOS7 ~ 10:30:44]# mount /dev/md0 /raid/raid0
# 验证挂载结果
[root@CentOS7 ~ 10:31:15]# df -h /raid/raid0
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0         40G   33M   40G   1% /raid/raid0
# 测试数据写入

[root@CentOS7 ~ 10:31:43]# cp /etc/ho* /raid/raid0
[root@CentOS7 ~ 10:32:19]# ls /raid/raid0/
host.conf  hostname  hosts  hosts.allow  hosts.deny

4 删除 RAID 0


# 卸载挂载点
[root@CentOS7 ~ 10:32:34]# umount /dev/md0 
# 停止RAID阵列(销毁阵列)
[root@CentOS7 ~ 10:33:08]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
# 清除物理盘上的RAID超级块(恢复为普通磁盘)
[root@CentOS7 ~ 10:33:30]# mdadm --zero-superblock /dev/sd{b,c}

5 补充说明
-RAID 0不支持新增成员盘扩展容量:
bash [root@centos7 ~]# mdadm --add /dev/md0 /dev/sdd mdadm: add new device failed for /dev/sdd as 2: Invalid argument

-RAID 0不支持标记单盘故障(无冗余,单盘故障即阵列失效):
bash [root@centos7 ~]# mdadm --fail /dev/md0 /dev/sdc mdadm: Cannot remove /dev/sdc from /dev/md0, array will be failed.

管理 RAID 1
1 创建 RAID 1

# 创建RAID 1阵列:设备名/dev/md1,级别1,成员盘2块(sdb、sdc)

[root@CentOS7 ~ 10:34:37]# 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 1元数据默认存储在磁盘开头,若用于/boot分区需指定–metadata=0.90兼容老旧引导程序

2 查看 RAID 1 状态

[root@CentOS7 ~ 11:00:13]# mdadm --detail /dev/md1 
/dev/md1:
           Version : 1.2
     Creation Time : Thu Apr  9 11:00:13 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 Apr  9 11:00:53 2026
             State : clean, resyncing 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

     Resync Status : 37% complete

              Name : CentOS7.liang.cloud:1  (local to host CentOS7.liang.cloud)
              UUID : c40a3bf4:f145e6a1:eafc275b:6e228efe
            Events : 6

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc

注释:resyncing表示镜像数据正在同步,需等待同步完成(100%)后再进行格式化操作

# 查看RAID与物理盘映射

[root@CentOS7 ~ 11:01:37]# lsblk /dev/md1
NAME MAJ:MIN RM SIZE RO TYPE  MOUNTPOINT
md1    9:1    0  20G  0 raid1 


[root@CentOS7 ~ 11:01:47]# 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 

3 格式化与挂载 RAID 1


# 等待同步完成后,格式化RAID设备
[root@CentOS7 ~ 11:05:03]# mkfs.xfs /dev/md1 
mkfs.xfs: /dev/md1 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
[root@CentOS7 ~ 11:05:32]# 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@CentOS7 ~ 11:06:21]# mkdir /raid/raid1
mkdir: cannot create directory ‘/raid/raid1’: File exists
[root@CentOS7 ~ 11:06:42]# ls -ld /raid/raid1
drwxr-xr-x 2 root root 6 Apr  9 11:03 /raid/raid1
[root@CentOS7 ~ 11:07:35]# rm -rf /raid/raid1
[root@CentOS7 ~ 11:08:23]# mkdir /raid/raid1
# 挂载设备
[root@CentOS7 ~ 11:08:42]# mount /dev/md1 /raid/raid1
# 验证挂载
[root@CentOS7 ~ 11:08:55]# df -h /raid/raid1
Filesystem      Size  Used Avail Use% Mounted on
/dev/md1         20G   33M   20G   1% /raid/raid1

# 测试数据写入
[root@CentOS7 ~ 11:09:19]# cp /etc/ho* /raid/raid1

4 增加热备盘

# 为RAID 1添加热备盘sdd
[root@CentOS7 ~ 11:10:01]# mdadm --add /dev/md1 /dev/sdd
mdadm: added /dev/sdd
# 查看热备盘状态(spare为备用)
[root@CentOS7 ~ 11:10:34]# 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

5 模拟磁盘故障

# 手动标记sdc为故障盘
[root@CentOS7 ~ 11:11:48]# mdadm --fail /dev/md1 /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md1
# 查看故障后状态(sdd自动顶替并同步)
[root@CentOS7 ~ 11:12:23]# 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
# 验证数据可正常访问
[root@CentOS7 ~ 11:12:35]# ls /raid/raid1/
host.conf  hostname  hosts  hosts.allow  hosts.deny
[root@CentOS7 ~ 11:13:04]# cat /raid/raid1/hostname 
CentOS7.liang.cloud

6 删除故障磁盘

# 移除故障盘sdb
[root@CentOS7 ~ 11:13:24]# mdadm --remove /dev/md1 /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md1
# 验证移除结果
[root@CentOS7 ~ 11:14:02]# mdadm --detail /dev/md1 |tail -5
            Events : 44

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       2       8       48        1      active sync   /dev/sdd

7 再次模拟故障

[root@CentOS7 ~ 11:14:41]# mdadm --fail /dev/md1 /dev/sdd
mdadm: set /dev/sdd faulty in /dev/md1
[root@CentOS7 ~ 11:14:59]# mdadm -D /dev/md1 |tail -5
    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       -       0        0        1      removed

       2       8       48        -      faulty   /dev/sdd
[root@CentOS7 ~ 11:15:45]# ls /raid/raid1
host.conf  hostname  hosts  hosts.allow  hosts.deny
[root@CentOS7 ~ 11:16:08]# echo hello raid1 > /raid/raid1/test.txt
[root@CentOS7 ~ 11:16:48]# umount /raid/raid1 
[root@CentOS7 ~ 11:17:03]# mount /dev/md1 /raid/raid1
[root@CentOS7 ~ 11:17:25]# ls /raid/raid1
host.conf  hostname  hosts  hosts.allow  hosts.deny  test.txt

总结:raid1阵列中任一成员故障,不影响数据的完整性。

8 删除 RAID 1

# 卸载挂载点
[root@CentOS7 ~ 11:17:35]# umount /dev/md1
# 停止RAID阵列
[root@CentOS7 ~ 11:17:51]# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
# 清除物理盘超级块
[root@CentOS7 ~ 11:18:14]# mdadm --zero-superblock /dev/sd{b..d}

使用dd工具填充更彻底。

例:[root@centos7 ~ 11:22:09]# dd if=/dev/zero of=/dev/sdb bs=1M count=1024
作用:使用0填充/dev/sdb硬盘。

if:Input File,/dev/zero 全为0
of:Output File
bs:Block Size,每次添加多大数据流
count:一共填充多少个Block

9 补充说明
RAID 1核心价值是数据冗余,而非扩容:即使新增磁盘,阵列总容量仍等于单盘容量(镜像机制),无法通过加盘提升可用空间。

管理 RAID 5

1 创建 RAID 5

# 创建RAID 5阵列:设备名/dev/md5,级别5,成员盘4块(sdb、sdc、sdd、sde)
[root@CentOS7 ~ 11:35:39]# 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 5最少需3块盘,此处用4块盘(1块用于分布式校验)。

2 查看 RAID 5 状态

[root@CentOS7 ~ 11:35:56]# mdadm --detail /dev/md5
/dev/md5:
           Version : 1.2
     Creation Time : Thu Apr  9 11:35:55 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 Apr  9 11:36:55 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 : 58% complete

              Name : CentOS7.liang.cloud:5  (local to host CentOS7.liang.cloud)
              UUID : 9d5f771d:205318b7:be684acc:35a875de
            Events : 10

    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

注释:recovering表示阵列正在构建/同步,需等待同步完成后再格式化。

查看RAID与物理盘映射

[root@CentOS7 ~ 11:36:57]# lsblk /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md5 9:5 0 60G 0 raid5
[root@CentOS7 ~ 11:37:36]# 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


3 格式化与挂载 RAID 5
```bath
# 等待阵列同步完成后,格式化设备
[root@CentOS7 ~ 11:38:08]# mkfs.xfs /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@CentOS7 ~ 11:38:50]# mkdir /raid/raid5
# 挂载设备
[root@CentOS7 ~ 11:39:13]# mount /dev/md5 /raid/raid5
# 验证挂载
[root@CentOS7 ~ 11:39:44]# df -h /raid/raid5/
Filesystem      Size  Used Avail Use% Mounted on
/dev/md5         60G   33M   60G   1% /raid/raid5
# 测试数据写入
[root@CentOS7 ~ 11:40:12]# cp /etc/ho* /raid/raid5
[root@CentOS7 ~ 11:40:41]# ls /raid/raid5/
host.conf  hostname  hosts  hosts.allow  hosts.deny

4 增加热备盘

# 为RAID 5添加热备盘sdf
[root@CentOS7 ~ 11:41:12]# mdadm --add /dev/md5 /dev/sdf
mdadm: added /dev/sdf

# 查看热备盘状态

[root@CentOS7 ~ 11:42:44]# 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

5 模拟磁盘故障

# 标记sdb为故障盘
[root@CentOS7 ~ 11:43:18]# mdadm --fail /dev/md5 /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md5


# 查看故障后状态(sdf自动顶替并同步)
[root@CentOS7 ~ 11:48:56]# 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
# 验证数据可正常访问
[root@CentOS7 ~ 11:49:42]# ls /raid/raid5/
host.conf  hostname  hosts  hosts.allow  hosts.deny
[root@CentOS7 ~ 11:50:12]# cat /raid/raid5/hostname 
CentOS7.liang.cloud

6 删除故障磁盘

# 移除故障盘sdb
[root@CentOS7 ~ 11:53:48]# mdadm --remove /dev/md5 /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md5
# 验证移除结果
[root@CentOS7 ~ 11:54:23]# mdadm --detail /dev/md5 |tail -7
            Events : 39

    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 扩容 RAID 5
注释:RAID 5仅支持扩容(增加成员盘),不支持减容;扩容仅在阵列“clean”正常状态下可执行,降级/重构时禁止。


# 新增2块盘(sdb、sdg)到RAID 5
[root@CentOS7 ~ 11:54:36]# mdadm --add /dev/md5 /dev/sdb /dev/sdg
mdadm: added /dev/sdb
mdadm: added /dev/sdg

# 查看新增盘状态(spare为备用)
[root@CentOS7 ~ 11:54:42]# mdadm --detail /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

# 扩展阵列成员数为5(--grow为扩容参数)
[root@CentOS7 ~ 11:55:38]# mdadm --grow /dev/md5 --raid-devices 5

# 等待阵列重构完成(查看进度)
root@CentOS7 ~ 11:56:27]# mdadm --detail /dev/md5
/dev/md5:
           Version : 1.2
     Creation Time : Thu Apr  9 11:35:55 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 Apr  9 11:56:57 2026
             State : clean, reshaping 
    Active Devices : 5
   Working Devices : 6
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

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

              Name : CentOS7.liang.cloud:5  (local to host CentOS7.liang.cloud)
              UUID : 9d5f771d:205318b7:be684acc:35a875de
            Events : 74

    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容量(从60G扩容至80G)
[root@CentOS7 ~ 12:42:45]# lsblk  /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE  MOUNTPOINT
md5    9:5    0  80G  0 raid5 /raid/raid5

# 扩展文件系统(XFS文件系统用xfs_growfs)
[root@CentOS7 ~ 13:44:29]# 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@CentOS7 ~ 13:44:51]# df -h /raid/raid5
Filesystem      Size  Used Avail Use% Mounted on
/dev/md5         80G   34M   80G   1% /raid/raid5

8 再次模拟磁盘故障

[root@CentOS7 ~ 13:45:16]# mdadm --remove /dev/md5 /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md5
[root@CentOS7 ~ 13:46:16]# mdadm --fail /dev/md5 /dev/sdg
mdadm: set /dev/sdg faulty in /dev/md5
[root@CentOS7 ~ 13:51:38]# ls /raid/raid5
host.conf  hostname  hosts  hosts.allow  hosts.deny
[root@CentOS7 ~ 13:51:52]# echo hello raid5 > /raid/raid5/test.txt

[root@CentOS7 ~ 13:53:07]# umount /raid/raid5 
[root@CentOS7 ~ 13:53:30]# mount /dev/md5 /raid/raid5
[root@CentOS7 ~ 13:53:59]# ls /raid/raid5
host.conf  hostname  hosts  hosts.allow  hosts.deny  test.txt

9 删除 RAID 5

卸载挂载点

[root@CentOS7 ~ 13:54:12]# umount /dev/md5

停止RAID阵列

[root@CentOS7 ~ 13:54:35]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5

清除物理盘超级块

[root@CentOS7 ~ 13:54:55]# mdadm --zero-superblock /dev/sd{b…g}

也可以使用dd彻底擦除:

for device in /dev/sd{b…g}
do
dd if=/dev/zero of=$device bs=1M count=1024
done


10 重构 RAID 5
注释:若停止阵列后未清除超级块,可通过以下命令重构阵列,数据不丢失
```bath
[root@CentOS7 ~ 13:55:37]# mdadm --assemble /dev/md5 /dev/sd{b..g}
mdadm: no recogniseable superblock on /dev/sdb
mdadm: /dev/sdb has no superblock - assembly aborted

注释;由于已经清除物理盘超级块,所以无法重构raids

补充
raid阵列可以进一步使用分区技术分割成多个分区,然后再格式化使用。特别是raid5这种大容量的盘。

LVM 存储
实验环境需在虚拟机中添加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

逻辑卷基本管理
1 传统硬盘分区管理的缺点
传统硬盘分区方案在灵活性和可靠性上存在明显不足,主要体现在:

分区空间需占用物理连续的磁盘区域,扩容操作难度大(尤其是扩容分区后方无空闲空间时);
基于分区创建的文件系统无法跨多个硬盘,受单块硬盘容量限制;
硬盘物理损坏时,分区内的所有数据会直接丢失,无冗余保护机制。
2 逻辑卷管理的优势
LVM 作为一种灵活的存储管理方案,弥补了传统分区的不足,核心优势包括:

灵活的空间调整:支持逻辑卷空间的在线扩展和缩减,无需重新规划磁盘布局;
跨盘存储能力:逻辑卷可整合多块硬盘的空间,轻松创建超大容量文件系统;
数据冗余保护:支持创建镜像卷(RAID 逻辑卷),单块硬盘损坏时数据不丢失;
快照功能:可创建逻辑卷快照,保留某一时刻的数据集,类似虚拟机快照,便于数据恢复。
3 LVM 核心概念
LVM 将多个磁盘/分区整合为统一的存储池,再按需划分逻辑卷使用,核心概念如下:

物理卷(PV, Physical Volume):LVM 的基础存储单元,由磁盘、磁盘分区或 RAID 等块设备创建,包含 LVM 专属的管理参数;
卷组(VG, Volume Group):由一个或多个物理卷组成的逻辑存储池,可理解为“虚拟硬盘”;
逻辑卷(LV, Logical Volume):从卷组中划分出的逻辑空间,可理解为“虚拟分区”,可在其上创建文件系统并挂载使用。
简单总结:卷组整合多个物理卷形成存储池,逻辑卷从卷组中划分并提供给用户使用。
在这里插入图片描述
4 LVM 基本管理流程
LVM 的核心操作遵循“创建物理卷 → 创建卷组 → 创建逻辑卷”的流程,具体如下
在这里插入图片描述
5 创建物理卷(PV)
物理卷是 LVM 的基础,需先将块设备初始化为 PV 才能纳入 LVM 管理:

# 1. 创建单个物理卷
[root@CentOS7 ~ 13:58:39]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
# 2. 批量创建多个物理卷(sdc、sdd)
[root@CentOS7 ~ 14:25:03]# pvcreate /dev/sd{c,d}
  Physical volume "/dev/sdc" successfully created.
  Physical volume "/dev/sdd" successfully created.
# 3. 查看所有 PV 列表(简洁版)
[root@CentOS7 ~ 14:25:57]# pvs
  PV         VG             Fmt  Attr PSize    PFree 
  /dev/sda2  centos_centos7 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
# 4. 查看单个 PV 的详细信息(以 /dev/sdb 为例)
[root@CentOS7 ~ 14:29: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   # PE(物理扩展单元)大小,加入VG后自动分配
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               iRz0BS-koTm-KO7a-S1BD-3vqC-CdBK-1BI9H2


6 创建卷组(VG)
卷组整合多个物理卷形成统一存储池,可按需创建单 PV 或多 PV 的 VG:
```bath
# 1. 创建包含单个 PV 的卷组(卷组名:webapp,关联 PV:/dev/sdb)
[root@CentOS7 ~ 14:29:39]# vgcreate webapp /dev/sdb
  Volume group "webapp" successfully created
  
# 2. 创建包含多个 PV 的卷组(卷组名:dbapp,关联 PV:/dev/sdc、/dev/sdd)
[root@CentOS7 ~ 14:30:20]# vgcreate dbapp /dev/sd{c,d}
  Volume group "dbapp" successfully created

# 3. 查看 PV 归属(验证 PV 已加入对应 VG)[root@CentOS7 ~ 14:30:59]# pvs
  PV         VG             Fmt  Attr PSize    PFree  
  /dev/sda2  centos_centos7 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

# 4. 查看所有 VG 列表(简洁版)
[root@CentOS7 ~ 14:31:15]# vgs
  VG             #PV #LV #SN Attr   VSize    VFree  
  centos_centos7   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
# 5. 查看单个 VG 的详细信息(以 dbapp 为例)
[root@CentOS7 ~ 14:31:25]# vgdisplay dbapp
  --- Volume group ---
  VG Name               dbapp
  System ID             
  Format                lvm2
  Metadata Areas        2  # 包含2个PV的元数据
  Metadata Sequence No  1
  VG Access             read/write  # 读写权限
  VG Status             resizable # 可调整大小
  MAX LV                0# 最大可创建LV数量(无限制)
  Cur LV                0# 当前已创建LV数量
  Open LV               0# 已挂载的LV数量
  Max PV                0# 最大可加入PV数量(无限制)
  Cur PV                2# 当前已加入PV数量
  Act PV                2# 活跃的PV数量
  VG Size               39.99 GiB# 卷组总容量
  PE Size               4.00 MiB# PE(物理扩展单元)大小,LVM最小分配单元
  Total PE              10238# 总PE数量
  Alloc PE / Size       0 / 0    # 已分配PE/容量
  Free  PE / Size       10238 / 39.99 GiB# 空闲PE/容量
  VG UUID               Gt47Rr-y2tN-c23c-Gtpg-aEeu-eHsp-Z0QlSv

7 创建逻辑卷(LV)
逻辑卷从卷组中划分,可直接创建文件系统,支持跨 PV 分配空间

# 1. 创建单 PV 逻辑卷(卷组:webapp,LV名:webapp01,大小:5G)

[root@CentOS7 ~ 14:31:45]# lvcreate -n webapp01 -L 5G webapp
  Logical volume "webapp01" created.

# 2. 创建跨 PV 逻辑卷(卷组:dbapp,LV名:data01,大小:25G,跨sdc、sdd)
[root@CentOS7 ~ 14:32:35]# lvcreate -n data01 -L 25G dbapp
  Logical volume "data01" created.

# 3. 查看所有 LV 列表(简洁版)
[root@CentOS7 ~ 14:33:40]# lvs
  LV       VG             Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home     centos_centos7 -wi-ao---- 146.99g                                                    
  root     centos_centos7 -wi-ao----  50.00g                                                    
  swap     centos_centos7 -wi-ao----   2.00g                                                    
  data01   dbapp          -wi-a-----  25.00g                                                    
  webapp01 webapp         -wi-a-----   5.00g    

逻辑卷设备名格式说明
逻辑卷支持三种访问路径,本质指向同一设备:

[root@CentOS7 ~ 14:33:46]# ls -l /dev/dbapp/data01 /dev/mapper/dbapp-data01
lrwxrwxrwx 1 root root 7 Apr  9 14:33 /dev/dbapp/data01 -> ../dm-4
lrwxrwxrwx 1 root root 7 Apr  9 14:33 /dev/mapper/dbapp-data01 -> ../dm-4


/dev/<VG名>/<LV名>:直观易记,推荐使用;
/dev/mapper/<VG名>-<LV名>:系统映射路径;
/dev/dm-N:内核设备映射器路径(N为数字)。


查看逻辑卷详细信息
[root@CentOS7 ~ 14:34:31]# lvdisplay /dev/dbapp/data01
  --- Logical volume ---
  LV Path                /dev/dbapp/data01  # LV 访问路径
  LV Name                data01
  VG Name                dbapp  # 所属卷组
  LV UUID                hUye30-aNls-cUUj-r7Dg-Ughs-BR5Z-BirTm3
  LV Write Access        read/write
  LV Creation host, time CentOS7.liang.cloud, 2026-04-09 14:33:40 +0800
  LV Status              available  # 可用状态
  # open                 0  # 未挂载
  LV Size                25.00 GiB  # LV 大小
  Current LE             6400   # LE(逻辑扩展单元)数量,1LE=1PE
  Segments               2  # 跨2个PV(sdc、sdd)
  Allocation             inherit   # 继承VG的分配策略
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:4  # 块设备号

# 验证 PV 空间使用(sdc 已用完,sdd 用了5G)
[root@CentOS7 ~ 14:35:21]# pvs
  PV         VG             Fmt  Attr PSize    PFree  
  /dev/sda2  centos_centos7 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

# 验证 LV 跨盘(data01 同时占用 sdc、sdd)
[root@CentOS7 ~ 14:36:26]# 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  

8 在逻辑卷上创建文件系统
逻辑卷创建后需格式化文件系统并挂载,才能供业务使用:

[root@CentOS7 ~ 14:36:55]# 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

# 2. 临时挂载逻辑卷(重启失效)
root@CentOS7 ~ 14:37:28]# mount /dev/webapp/webapp01 /usr/share/nginx/html
mount: mount point /usr/share/nginx/html does not exist

# 3. 持久化挂载(修改 /etc/fstab,重启生效)
# 需在 /etc/fstab 中添加如下行:
# /dev/webapp/webapp01  /usr/share/nginx/html  xfs  defaults  0 0
[root@CentOS7 ~ 14:38:22]# mount /dev/webapp/webapp01 /usr/share/nginx/html xfs defaults 0 0

9 LVM 清理
如需清理 LVM 配置,需按“卸载文件系统 → 删除 LV → 删除 VG → 删除 PV”的顺序操作:

# 1. 卸载已挂载的逻辑卷
[root@CentOS7 ~ 14:56:26]# umount /dev/webapp/webapp01

# 2. 删除逻辑卷(需确认,输入y)
[root@CentOS7 ~ 14:57:29]# 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
# 3. 删除卷组
[root@CentOS7 ~ 14:59:02]# vgremove webapp dbapp
  Volume group "webapp" successfully removed
  Volume group "dbapp" successfully removed
# 4. 删除物理卷(清除 LVM 元数据)
[root@CentOS7 ~ 14:59:21]# 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.

卷组的扩展与缩减
卷组的容量可通过添加/移除 PV 灵活调整,满足业务存储需求变化。

1 环境准备
先创建基础卷组和逻辑卷,用于后续扩展/缩减测试:

# 1. 创建卷组 webapp(关联 PV /dev/sdb,自动初始化 PV)
[root@CentOS7 ~ 14:59:29]# vgcreate webapp /dev/sdb
  Physical volume "/dev/sdb" successfully created.
  Volume group "webapp" successfully created
# 2. 在 webapp 中创建 10G 逻辑卷 webapp01
[root@CentOS7 ~ 15:10:25]# 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.

2 扩展卷组(VG)
当卷组空间不足时,可添加新 PV 扩展容量:

# 将 /dev/sdc、/dev/sdd 加入 webapp 卷组(自动初始化 PV)
[root@CentOS7 ~ 15:12:01]# vgextend webapp /dev/sd{c,d}
  Physical volume "/dev/sdc" successfully created.
  Physical volume "/dev/sdd" successfully created.
  Volume group "webapp" successfully extended

3 缩减卷组(VG)
如需移除卷组中的 PV(如更换更大硬盘),需确保 PV 未被使用,步骤如下:

# 1. 查看 PV 使用状态(/dev/sdb 已分配10G,sdc/sdd 空闲)
[root@CentOS7 ~ 15:12:45]# pvs
  PV         VG             Fmt  Attr PSize    PFree  
  /dev/sda2  centos_centos7 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

# 2. 直接移除已使用的 PV 会报错
[root@CentOS7 ~ 15:13:25]# vgreduce webapp /dev/sdb
  Physical volume "/dev/sdb" still in use
# 3. 迁移 PV 数据(将 /dev/sdb 的数据移到 /dev/sdd)
[root@CentOS7 ~ 15:14:06]# pvmove /dev/sdb /dev/sdd
  /dev/sdb: Moved: 0.20%
  /dev/sdb: Moved: 100.00%

# 4. 再次查看 PV 状态(/dev/sdb 空闲,/dev/sdd 已使用)
[root@CentOS7 ~ 15:15:07]# pvs
  PV         VG             Fmt  Attr PSize    PFree  
  /dev/sda2  centos_centos7 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  # 已使用
# 5. 移除空闲的 /dev/sdb 从 webapp 卷组
[root@CentOS7 ~ 15:16:37]# vgreduce webapp /dev/sdb
  Removed "/dev/sdb" from volume group "webapp"

# 6. 验证移除结果(/dev/sdb 已脱离 webapp)
[root@CentOS7 ~ 15:17:03]# pvs
  PV         VG             Fmt  Attr PSize    PFree  
  /dev/sda2  centos_centos7 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

逻辑卷的扩展与缩减
逻辑卷的容量可直接调整,需结合卷组空闲空间操作。

1 扩展逻辑卷(LV)
卷组有空闲空间时,可直接扩展 LV 容量

# 给 webapp01 增加 2G 空间(总容量变为 12G)
[root@CentOS7 ~ 15:17:14]# 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.

# 验证 LV 大小
[root@CentOS7 ~ 15:18:13]# lvs /dev/webapp/webapp01 
  LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  webapp01 webapp -wi-a----- 12.00g    

=======================================

2 缩减逻辑卷(LV)
逻辑卷空间充足时,可缩减容量(注意:缩减有数据丢失风险,需谨慎):

# 给 webapp01 减少 2G 空间(总容量变回 10G)

[root@CentOS7 ~ 15:19:09]# 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.

# 验证 LV 大小
[root@CentOS7 ~ 15:20:05]# lvs /dev/webapp/webapp01 
  LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  webapp01 webapp -wi-a----- 10.00g                                                    

=======================================

文件系统的扩展与缩减
LV 容量调整后,需同步调整文件系统大小,否则无法使用新增空间(或缩减后空间异常)。

1 扩展 XFS 文件系统
XFS 是 CentOS7 默认文件系统,仅支持扩展,不支持缩减,步骤如下:

环境准备

# 1. 格式化 LV 为 XFS
[root@CentOS7 ~ 15:20:56]# 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
# 2. 创建挂载点并挂载
[root@CentOS7 ~ 15:40:40]# mkdir /usr/share/nginx/html
mkdir: cannot create directory ‘/usr/share/nginx/html’: No such file or directory
注释:由于没有创建多级目录,所以需要加-p创建一个才能成功
[root@CentOS7 ~ 15:42:12]# mkdir -p /usr/share/nginx/html
[root@CentOS7 ~ 15:43:34]# mount /dev/webapp/webapp01 /usr/share/nginx/htm

# 3. 写入测试数据

[root@CentOS7 ~ 15:44:23]# cp /etc/host* /usr/share/nginx/html
[root@CentOS7 ~ 15:44:59]# ls /usr/share/nginx/html
host.conf  hostname  hosts  hosts.allow  hosts.deny

扩展操作

# 第一步:扩展 LV 到 15G
[root@CentOS7 ~ 15:45:25]# 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@CentOS7 ~ 15:46:09]# lvs /dev/webapp/webapp01 
  LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  webapp01 webapp -wi-ao---- 15.00g  
注释: wi-ao----:已挂载、可读写、激活

# 第二步:扩展 XFS 文件系统(指定挂载点)
[root@CentOS7 ~ 15:46:29]# 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

# 验证文件系统大小(已扩展到15G,数据未丢失)
[root@CentOS7 ~ 15:47:12]# df -h /usr/share/nginx/html
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01   15G   33M   15G   1% /usr/share/nginx/html
[root@CentOS7 ~ 15:47:59]# ls /usr/share/nginx/html
host.conf  hostname  hosts  hosts.allow  hosts.deny

注释;
-/dev/mapper/webapp-webapp01  文件系统 
 -15G    容量
 -33M   已用 
 -15G   可用
 -1%     已用%
 - /usr/share/nginx/html   挂载点

# 快捷方式:LV + 文件系统一键扩展(-r 参数自动调用 xfs_growfs)
[root@CentOS7 ~ 15:48:25]# 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

# 验证最终大小(20G)
[root@CentOS7 ~ 15:49:07]# lvs /dev/webapp/webapp01 
  LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  webapp01 webapp -wi-ao---- 20.00g                                                    
[root@CentOS7 ~ 15:49:24]# df -h /usr/share/nginx/html
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01   20G   33M   20G   1% /usr/share/nginx/html

注释;
-/dev/mapper/webapp-webapp01  文件系统 
 -20G    容量
 -33M   已用 
 -20G   可用
 -1%     已用%
 - /usr/share/nginx/html   挂载点

2 扩展 EXT4 文件系统
EXT4 支持扩展和缩减,扩展步骤如下:

环境准备

# 1. 卸载原有 XFS 文件系统
[root@CentOS7 ~ 15:49:36]# umount /usr/share/nginx/html 
# 2. 格式化 LV 为 EXT4
[root@CentOS7 ~ 15:50:05]# mkfs.ext4 /dev/webapp/webapp01 
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
First data block=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: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

# 3. 重新挂载并写入测试数据
[root@CentOS7 ~ 15:50:45]# mount /dev/webapp/webapp01 /usr/share/nginx/html
[root@CentOS7 ~ 15:51:24]# df -h /usr/share/nginx/html
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01   20G   45M   19G   1% /usr/share/nginx/html
[root@CentOS7 ~ 15:51:31]# cp /etc/host* /usr/share/nginx/html
[root@CentOS7 ~ 15:52:06]# ls /usr/share/nginx/html
host.conf  hostname  hosts  hosts.allow  hosts.deny  lost+found

注释;
-/dev/mapper/webapp-webapp01  文件系统 
 -20G    容量
 -45M   已用 
 -19G   可用
 -1%     已用%
 - /usr/share/nginx/html   挂载点

扩展操作

# 第一步:扩展 LV 到 25G

[root@CentOS7 ~ 15:52: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@CentOS7 ~ 15:53:39]# lvs /dev/webapp/webapp01 
  LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  webapp01 webapp -wi-ao---- 25.00g   
# 第二步:扩展 EXT4 文件系统(指定 LV 设备名)
[root@CentOS7 ~ 15:53:48]# 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.

# 验证文件系统大小(25G,数据未丢失)
[root@CentOS7 ~ 15:54:21]# df -h /usr/share/nginx/html
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01   25G   44M   24G   1% /usr/share/nginx/html
[root@CentOS7 ~ 15:54:39]# ls /usr/share/nginx/html
host.conf  hostname  hosts  hosts.allow  hosts.deny  lost+found
# 快捷方式:LV + 文件系统一键扩展(-r 参数自动调用 resize2fs)
[root@CentOS7 ~ 15:54:48]# 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.

# 验证最终大小(30G)
[root@CentOS7 ~ 15:55:47]# lvs /dev/webapp/webapp01 
  LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  webapp01 webapp -wi-ao---- 30.00g                                                    
[root@CentOS7 ~ 15:56:01]# df -h /usr/share/nginx/html
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01   30G   44M   28G   1% /usr/share/nginx/html

逻辑卷快照
LVM 快照可保留逻辑卷某一时刻的完整数据,用于数据备份或恢复,核心特性:快照容量需不小于原 LV 容量(避免数据溢出)。

# 1. 创建快照(-s 表示快照,-n 快照名,-L 快照大小,指定原 LV)
[root@CentOS7 ~ 16:18:13]# lvcreate -s -n webapp01-snap1 -L 10G /dev/webapp/webapp01
  Volume group "webapp" has insufficient free space (2558 extents): 2560 required.

[root@CentOS7 ~ 16:35:54]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
[root@CentOS7 ~ 16:40:41]# pvs
  PV         VG             Fmt  Attr PSize    PFree 
  /dev/sda2  centos_centos7 lvm2 a--  <199.00g  4.00m
  /dev/sdb                  lvm2 ---    20.00g 20.00g
  /dev/sdc   webapp         lvm2 a--   <20.00g  9.99g
  /dev/sdd   webapp         lvm2 a--   <20.00g     0 
[root@CentOS7 ~ 16:40:49]# pvcreate /dev/sdf
  Physical volume "/dev/sdf" successfully created.
[root@CentOS7 ~ 16:41:49]# pvs
  PV         VG             Fmt  Attr PSize    PFree 
  /dev/sda2  centos_centos7 lvm2 a--  <199.00g  4.00m
  /dev/sdb                  lvm2 ---    20.00g 20.00g
  /dev/sdc   webapp         lvm2 a--   <20.00g  9.99g
  /dev/sdd   webapp         lvm2 a--   <20.00g     0 
  /dev/sdf                  lvm2 ---    20.00g 20.00g
[root@CentOS7 ~ 16:41:54]# vgextend webapp /dev/sd{b,f}
  Volume group "webapp" successfully extended
[root@CentOS7 ~ 16:44:27]# pvs
  PV         VG             Fmt  Attr PSize    PFree  
  /dev/sda2  centos_centos7 lvm2 a--  <199.00g   4.00m
  /dev/sdb   webapp         lvm2 a--   <20.00g <20.00g
  /dev/sdc   webapp         lvm2 a--   <20.00g   9.99g
  /dev/sdd   webapp         lvm2 a--   <20.00g      0 
  /dev/sdf   webapp         lvm2 a--   <20.00g <20.00g
[root@CentOS7 ~ 16:44:32]# vgs
  VG             #PV #LV #SN Attr   VSize    VFree 
  centos_centos7   1   3   0 wz--n- <199.00g  4.00m
  webapp           4   1   0 wz--n-   79.98g 49.98g
[root@CentOS7 ~ 16:44:44]# lvcreate -s -n webapp01-snap1 -L 30G /dev/webapp/webapp01
  Logical volume "webapp01-snap1" created.
注释;Volume group "webapp" has insufficient free space (2558 extents): 2560 required.由于空间不够无法创建快照,要先扩容



# 2. 挂载快照(查看快照中的数据)
# 快照的文件系统和原先逻辑卷的文件系统的uuid是一致的。 默认情况下,快照和原卷同一时刻只能挂载一个。
# 一定要挂载,则需要修改uuid
[root@CentOS7 ~ 16:46:33]# uuidgen 
4276e0c3-2d1e-4a1b-a914-ab02b7486d8c

# 2-1. 修改xfs文件系统uuid命令使用xfs_admin
[root@centos7 ~]# xfs_admin -U 4276e0c3-2d1e-4a1b-a914-ab02b7486d8c /dev/webapp/webapp01-snap1

# 2-2. 修改ext4文件系统uuid命令使用tune2fs
[root@CentOS7 ~ 16:54:27]# tune2fs -U 4276e0c3-2d1e-4a1b-a914-ab02b7486d8c /dev/webapp/webapp01-snap1

# 挂载测试
[root@CentOS7 ~ 17:00:56]# mkdir /webapp/webapp01-snap1 -p
[root@CentOS7 ~ 17:03:02]# mount /dev/webapp/webapp01-snap1 /webapp/webapp01-snap1

# 3. 验证快照数据(与原 LV 一致)
[root@CentOS7 ~ 17:03:46]# ls /webapp/webapp01-snap1
host.conf  hostname  hosts  hosts.allow  hosts.deny  lost+found

# 4. 在快照 LV 中写入新数据(验证快照独立性)
[root@CentOS7 ~ 17:04:12]# echo hello world > /webapp/webapp01-snap1/hello.txt
[root@CentOS7 ~ 17:04:59]# cat /webapp/webapp01-snap1/hello.txt
hello world

======================================

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐