当前位置:首页>Linux>Linux 软 RAID 从入门到运维完全指南

Linux 软 RAID 从入门到运维完全指南

  • 2026-06-28 17:41:20
Linux 软 RAID 从入门到运维完全指南

字数 6278,阅读大约需 32 分钟

一、 RAID基础入门

1.1 什么是RAID

RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)是一种将多个物理磁盘组合成单一逻辑存储单元的技术。Linux内核通过md(Multiple Devices)驱动实现软件RAID,不需要额外的硬件RAID卡。

软RAID的优势:

  • • 成本低,无需专用RAID卡
  • • 灵活性高,配置可随时调整
  • • 可在系统运行时动态管理
  • • 兼容性好,跨平台可迁移

1.2 各类RAID级别详解

RAID 0(条带化)

┌─────────┬─────────┐
│  数据A  │  数据C  │  ← 磁盘1
├─────────┼─────────┤
│  数据B  │  数据D  │  ← 磁盘2
└─────────┴─────────┘
     写入时交叉分布

工作原理: 将数据分割成块(chunk),并行写入所有磁盘。就像图书馆把一本书的章节分散放到多个书柜,读取时从多个书柜同时取,速度翻倍。

特点:

  • • 最小磁盘数:2
  • • 冗余度:无(无容错能力)
  • • 可用容量:所有磁盘容量之和
  • • 读写性能:读取和写入都显著提升(接近N倍)
  • • 故障影响:任意一块磁盘损坏,整个阵列数据丢失

适用场景: 对性能要求高、对数据安全性要求低的场景,如视频编辑缓存、临时数据处理、非关键数据的快速读写。

典型应用命令:

mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1

RAID 1(镜像)

┌─────────┐         ┌─────────┐
│  数据A  │ ←─────→ │  数据A  │   ← 磁盘1 与 磁盘2 互为镜像
│  数据B  │ ←─────→ │  数据B  │
└─────────┘         └─────────┘

工作原理: 将相同的数据同时写入两块磁盘,形成"镜像"关系。读取时可从任意一块磁盘取数据,写入时需要同时写两份。

特点:

  • • 最小磁盘数:2
  • • 冗余度:高(可容忍N-1块磁盘故障)
  • • 可用容量:总容量的50%
  • • 读写性能:读取性能提升(可并行读),写入性能略下降(需要写两份)
  • • 故障影响:一块磁盘故障不影响数据完整性

适用场景: 对数据安全性要求高的场景,如系统盘、重要数据库、归档数据。

典型应用命令:

# 创建RAID1,可用容量为较小磁盘的容量
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

# 创建 degraded RAID1(只有一块盘,后续再添加)

mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 missing

RAID 4(专用校验盘)

┌─────────┬─────────┬─────────┬─────────┐
│  数据A  │  数据B  │  数据C  │ 校验P   │
└─────────┴─────────┴─────────┴─────────┘
                  ↑                    ↑
             数据盘1-3              专用校验盘

工作原理: 将数据分散写入前N-1块盘,用第N块盘专门存储奇偶校验信息。任意一块数据盘故障时,可通过校验盘和其他数据盘重建数据。

特点:

  • • 最小磁盘数:3(2块数据盘 + 1块校验盘)
  • • 冗余度:中(可容忍1块磁盘故障)
  • • 可用容量:(N-1) × 最小磁盘容量
  • • 读写性能:读取性能好,写入时需要计算并写入校验盘,形成瓶颈
  • • 故障影响:校验盘故障不影响数据读取,但失去容错能力

历史地位: RAID4现已较少直接使用,其设计缺陷(校验盘成为瓶颈)被RAID5改进。现在RAID4主要作为RAID5演变过程中的过渡技术了解即可。


RAID 5(分布式校验)

磁盘1: [数据A] [数据D] [校验P] [数据G]
磁盘2: [数据B] [校验P] [数据E] [数据H]
磁盘3: [数据C] [数据F] [数据I] [校验P]
        ↑         ↑         ↑
      分布式校验块(每块磁盘都存数据且都存校验)

工作原理: 数据和校验信息交叉分布在所有磁盘上。校验块P = A ⊕ B ⊕ C,如果任意一块盘故障,可用其余盘重建。

特点:

  • • 最小磁盘数:3
  • • 冗余度:中(可容忍1块磁盘故障)
  • • 可用容量:(N-1) × 最小磁盘容量
  • • 读写性能:读取性能好,写入性能中等(需要计算校验)
  • • 故障影响:一块磁盘故障仍可正常工作,但再故障一块则数据全丢

适用场景: 平衡性能、安全性和成本的场景,如中小型企业的文件存储、Web服务器数据盘。

创建示例:

# 创建3盘RAID5,-n3表示3块活动盘
mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1

# 查看阵列信息

mdadm --detail /dev/md5

RAID 6(双重分布式校验)

磁盘1: [数据A] [数据E] [校验P] [校验Q] [数据I]
磁盘2: [数据B] [校验P] [数据F] [数据J] [校验Q]
磁盘3: [数据C] [数据G] [校验Q] [校验P] [数据K]
磁盘4: [数据D] [数据H] [数据L] [数据M] [数据N]
           ↑           ↑
        校验P        校验Q(双重校验)

工作原理: RAID6使用两种独立的校验算法(P和Q),相当于双重保险。可同时容忍两块磁盘故障。

特点:

  • • 最小磁盘数:4
  • • 冗余度:高(可容忍2块磁盘故障)
  • • 可用容量:(N-2) × 最小磁盘容量
  • • 读写性能:读取性能好,写入性能比RAID5略差(需要计算两种校验)
  • • 故障影响:可同时容忍2块磁盘故障,安全性更高

适用场景: 对数据安全性要求极高的场景,如大型数据库、企业级存储、备份服务器。

创建示例:

# 创建4盘RAID6
mdadm --create /dev/md6 --level=6 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

RAID 10(镜像+条带)

RAID10不是独立的RAID级别,而是"RAID1+RAID0"的组合,也称为"RAID 1+0"。

┌─────────┬─────────┐
│  数据A  │  数据A  │  ← 镜像组1
├─────────┼─────────┤
│  数据B  │  数据B  │  ← 镜像组2
├─────────┼─────────┤
│  数据C  │  数据C  │  ← 镜像组3(跨线缆备份)
└─────────┴─────────┘
        ↑           ↑
     磁盘1       磁盘2(跨控制器)

工作原理: 先将磁盘分成多组镜像对(RAID1),再对这些镜像对进行条带化(RAID0)。

特点:

  • • 最小磁盘数:4(必须为偶数)
  • • 冗余度:高(每个镜像组可容忍一块磁盘故障)
  • • 可用容量:总容量的50%
  • • 读写性能:读写性能都很好(兼具条带化的并行读取和镜像的冗余)
  • • 故障影响:同一镜像组内的两块盘不能同时故障

布局选项(--layout):

  • • n(near):同一数据块的多个副本在相近位置的不同磁盘上
  • • o(offset):条带化后整体偏移
  • • f(far):同一数据块的副本在不同磁盘的不同位置(读取性能最佳)
# 创建RAID10,使用默认的near布局
mdadm --create /dev/md10 --level=10 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

# 指定far布局以获得最佳读取性能

mdadm --create /dev/md10 --layout=f2 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

适用场景: 数据库等既需要高性能又需要高可靠性的应用。


LINEAR(线性合并)

┌────────────────────┐
│      磁盘1         │  先填满磁盘1
├────────────────────┤
│      磁盘2         │  再填磁盘2
├────────────────────┤
│      磁盘3         │  最后填磁盘3
└────────────────────┘

工作原理: 按顺序将磁盘首尾相连,创建一个容量为所有磁盘之和的虚拟磁盘。没有条带化,没有校验,完全是简单合并。

特点:

  • • 最小磁盘数:2
  • • 冗余度:无
  • • 可用容量:所有磁盘容量之和
  • • 读写性能:无性能提升(顺序访问)
  • • 故障影响:任意一块磁盘故障,整个阵列数据丢失

重要限制: 线性阵列一旦创建,无法再添加新磁盘(这是与RAID0的重要区别)。删除磁盘更是不可能的。

适用场景: 当只有不同容量的磁盘需要合并成一个逻辑卷时使用,或作为临时的简单存储方案。

# 创建LINEAR阵列
mdadm --create /dev/mdlinear --level=linear --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1

CONTAINER(容器模式)

┌─────────────────────────────────────────────────────────┐
│                     CONTAINER                           │
│  ┌─────────┬─────────┬─────────┬─────────┬─────────┐  │
│  │  RAID1  │  RAID1  │  RAID5  │  RAID5  │  SPARE  │  │
│  │ (整盘)   │ (整盘)   │ (半盘)   │ (半盘)   │ (半盘)  │  │
│  └─────────┴─────────┴─────────┴─────────┴─────────┘  │
│        ↑            ↑           ↑           ↑         │
│     元数据区域(描述整个容器的配置)                      │
└─────────────────────────────────────────────────────────┘

工作原理: CONTAINER是一种特殊的RAID模式,类似于硬件RAID卡上的"磁盘组"。整个容器有统一的元数据区,其中定义了多个子阵列,每个子阵列可以使用容器中磁盘的不同部分。

特点:

  • • 统一管理:多个人阵列共享一组物理磁盘
  • • 灵活性高:可以在容器内创建不同级别、不同大小的阵列
  • • 元数据集中:所有子阵列的配置信息存储在容器的统一元数据区
  • • 支持DDF和IMSM格式

适用场景: 企业级存储,需要在同一组物理磁盘上创建多种RAID级别的阵列。

# 创建IMSM容器
mdadm --create /dev/md/container --level=container --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd

# 在容器内创建RAID5

mdadm --create /dev/md/container --level=5 --raid-devices=3 /dev/sda /dev/sdb /dev/sdc

# 启动容器内的所有阵列

mdadm --incremental /dev/md/container

1.3 RAID级别对比一览

级别
最小盘数
冗余度
可用容量
写入性能
读取性能
容错能力
典型应用
RAID0
2
100%
很高
很高
临时数据、缓存
RAID1
2
50%
中(需写双份)
高(并行读)
N-1盘
系统盘、重要数据
RAID4
3
(N-1)/N
中(校验瓶颈)
1盘
已较少使用
RAID5
3
(N-1)/N
1盘
文件服务器
RAID6
4
(N-2)/N
中低
2盘
企业存储、数据库
RAID10
4
50%
很高
每组1盘
数据库、高性能应用
LINEAR
2
100%
简单容量合并

二、 mdadm工具入门

2.1 mdadm简介

mdadm是Linux下管理软件RAID的核心工具,全称"Multiple Devices Administration"。它的主要功能包括:

  • • 创建带超级块(superblock)的RAID阵列
  • • 组装已存在的阵列
  • • 监控阵列状态变化
  • • 动态调整阵列(扩展、收缩、重塑)
  • • 管理和维护阵列成员

基本语法:

mdadm [模式] <RAID设备> [选项] <组件设备>

2.2 mdadm的工作模式

mdadm有多种工作模式,通过不同的选项切换:

模式
选项
说明
Assemble
-A, --assemble
组装已存在的阵列
Build
-B, --build
构建无superblock的legacy阵列
Create
-C, --create
创建带superblock的新阵列
Monitor
-F, --follow, --monitor
监控阵列状态
Grow
-G, --grow
动态调整阵列大小或级别
Incremental
-I, --incremental
增量组装/移除设备
Manage
无选项时默认
管理阵列成员(add/remove/fail)
Misc
其他选项
查询、详情、停止等杂项操作

2.3 常用选项汇总

模式选择:

-A, --assemble      # 组装阵列
-B, --build         # 构建阵列(无superblock)
-C, --create        # 创建阵列
-F, --follow        # 监控模式
-G, --grow          # 动态调整
-I, --incremental   # 增量模式

常用参数:

-n, --raid-devices=   # 活动设备数量
-x, --spare-devices=  # 热备盘数量
-l, --level=          # RAID级别(0,1,4,5,6,10,linear,container)
-c, --chunk=          # chunk大小(默认512KB)
-z, --size=           # 每个磁盘使用的容量
--name=               # 阵列名称
--uuid=               # 指定阵列UUID
-e, --metadata=       # superblock格式(0.90, 1.0, 1.1, 1.2, ddf, imsm)

行为控制:

-v, --verbose        # 详细输出
-q, --quiet          # 静默模式
-f, --force          # 强制执行
--run                # 强制启动阵列

三、 阵列的创建与组装

3.1 创建前的准备工作

步骤1:检查磁盘状态

在创建阵列之前,务必确认磁盘是干净的,没有重要的现有数据:

# 查看磁盘分区情况
fdisk -l /dev/sdb

# 检查是否有superblock(是否已属于某个阵列)

mdadm --examine /dev/sdb1

# 查看当前已存在的阵列

cat
 /proc/mdstat

步骤2:规划磁盘用途

建议使用独立的磁盘或分区来构建RAID,避免与现有系统冲突。常见的做法:

  • • 使用整块磁盘:/dev/sdb
  • • 使用磁盘分区:/dev/sdb1/dev/sdc1

步骤3:了解磁盘容量差异

如果磁盘容量不同,阵列容量以最小磁盘为准。创建前可以检查:

# 查看各磁盘大小
fdisk -l | grep "Disk /dev/sd"

# 预期输出示例:

# Disk /dev/sdb: 500 GiB, 536870912000 bytes

# Disk /dev/sdc: 480 GiB, 514961920000 bytes

# 容量差异超过1%会收到警告

3.2 创建RAID 0

# 创建RAID0,条带大小默认为512KB
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1

# 指定自定义条带大小

mdadm --create /dev/md0 --level=0 --chunk=64 --raid-devices=2 /dev/sdb1 /dev/sdc1

# 创建后查看状态

mdadm --detail /dev/md0

创建后需要格式化:

# 格式化为ext4
mkfs.ext4 /dev/md0

# 挂载使用

mkdir
 /mnt/raid0
mount /dev/md0 /mnt/raid0

3.3 创建RAID 1

# 创建标准RAID1
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

# 如果只有一块盘,想先创建后添加第二块,可以这样:

mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 missing

# 创建时指定名称

mdadm --create /dev/md1 --level=1 --name=data --raid-devices=2 /dev/sdb1 /dev/sdc1

# 查看详细信息

mdadm --detail /dev/md1

3.4 创建RAID 5

# 创建3盘RAID5
mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1

# 创建带一块热备盘的RAID5

mdadm --create /dev/md5 --level=5 --raid-devices=3 --spare-devices=1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

# 创建时指定chunk大小和校验布局

mdadm --create /dev/md5 --level=5 --chunk=128 --layout=left-symmetric --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1

RAID5的校验布局(--layout):

  • • left-symmetric(默认):校验块依次向左分布
  • • right-symmetric:校验块依次向右分布
  • • left-asymmetric:数据块分布后再放校验块
  • • right-asymmetric:类似上面

3.5 创建RAID 6

# 创建4盘RAID6
mdadm --create /dev/md6 --level=6 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

# 创建RAID6,指定双重校验布局

mdadm --create /dev/md6 --level=6 --layout=la -raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

3.6 创建RAID 10

# 创建4盘RAID10,使用near2布局(默认)
mdadm --create /dev/md10 --level=10 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

# 指定far布局(最佳读取性能)

mdadm --create /dev/md10 --level=10 --layout=f2 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

# 创建2盘RAID10(最小配置)

mdadm --create /dev/md10 --level=10 --raid-devices=2 /dev/sdb1 /dev/sdc1

RAID10布局格式:[n|f|o][N]

  • • 字母:副本排列方式(near/offset/far)
  • • 数字:每个数据块的副本数量

3.7 组装阵列

从配置文件组装:

# 自动组装所有已知阵列
mdadm --assemble --scan

# 组装特定阵列

mdadm --assemble /dev/md0

# 组装时使用配置文件

mdadm --assemble --config=/etc/mdadm/mdadm.conf /dev/md0

手动指定组件组装:

# 指定UUID组装
mdadm --assemble /dev/md0 --uuid=12345678:abcdef00:12345678:abcdef00 /dev/sdb1 /dev/sdc1

# 指定名称组装

mdadm --assemble /dev/md0 --name=data /dev/sdb1 /dev/sdc1

强制组装(当阵列不完整时):

# 强制组装,即使有设备丢失
mdadm --assemble /dev/md1 --force /dev/sdb1

# 以降级模式启动RAID5

mdadm --assemble /dev/md5 --run /dev/sdb1 /dev/sdc1 missing

3.8 保存阵列配置

创建阵列后,建议将配置写入配置文件,以便重启后能自动组装:

# 扫描当前阵列信息
mdadm --detail --scan

# 将配置追加到配置文件

mdadm --detail --scan >> /etc/mdadm/mdadm.conf

# 编辑配置文件(可选),设置邮件通知等

vi /etc/mdadm/mdadm.conf

配置文件示例:

DEVICE /dev/sd*[0-9]
ARRAY /dev/md0 metadata=1.2 name=server:raid0 UUID=12345678:abcdef00:12345678:abcdef00
ARRAY /dev/md1 metadata=1.2 name=server:raid1 UUID=87654321:fedcba00:87654321:fedcba00
MAILADDR admin@example.com

四、 阵列的日常维护

4.1 查看阵列状态

查看所有阵列的概要信息:

cat /proc/mdstat

输出示例:

Personalities : [raid1] [raid5] [raid6] [raid10] 
md0 : active raid1 sdb1[1] sdc1[0]
      488386464 blocks super 1.2 [2/2] [UU]
      [=========>...........]  resync = 42.5% (208368128/488386464) finish=45.2min speed=103520K/sec

md1 : active raid5 sdd1[3] sdc1[2] sdb1[0]
      976568192 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

查看详细阵列信息:

# 查看单个阵列详情
mdadm --detail /dev/md0

# 查看所有阵列的概要信息

mdadm --brief --scan

# 查看某个组件设备的信息

mdadm --examine /dev/sdb1

4.2 管理阵列成员

添加热备盘:

# 添加一块热备盘
mdadm /dev/md0 --add /dev/sdd1

# 查看添加后的状态

mdadm --detail /dev/md0

移除故障盘:

# 先标记为故障(如果还没自动标记)
mdadm /dev/md0 --fail /dev/sdc1

# 再移除

mdadm /dev/md0 --remove /dev/sdc1

替换故障盘:

# 将新盘标记为备用并开始重建
mdadm /dev/md0 --replace /dev/sdc1

# 如果有多个候选备用盘,可以指定优先使用哪个

mdadm /dev/md0 --replace /dev/sdc1 --with /dev/sdd1

重新添加已移除的盘:

# 尝试重新加入阵列
mdadm /dev/md0 --re-add /dev/sdc1

# 如果是因为元数据问题,可能需要更新设备大小

mdadm /dev/md0 --re-add /dev/sdc1 --update=devicesize

在RAID1/5/6中添加新盘:

# 将RAID5从3盘扩展到4盘
mdadm --grow /dev/md5 --raid-devices=4 --add /dev/sde1

# 将RAID1从2盘扩展到3盘

mdadm --grow /dev/md1 --raid-devices=3 --add /dev/sdd1

4.3 停止和启动阵列

停止阵列:

# 停止之前先卸载
umount /dev/md0

# 停止阵列

mdadm --stop /dev/md0

# 停止所有可停止的阵列

mdadm --stop --scan

启动阵列:

# 组装并启动
mdadm --assemble /dev/md0

# 或者

mdadm --run /dev/md0

# 扫描并启动所有阵列

mdadm --assemble --scan

4.4 擦除超级块

如果想将磁盘从阵列中完全移除并另作他用:

# 普通擦除(只在确认有有效superblock时)
mdadm --zero-superblock /dev/sdc1

# 强制擦除(即使superblock看起来无效)

mdadm --zero-superblock --force /dev/sdc1

注意: 擦除前务必确认磁盘已从阵列中移除,否则可能导致阵列降级或数据丢失。

4.5 动态调整阵列

调整RAID5的chunk大小:

# 需要backup文件
mdadm --grow /dev/md5 --chunk=256 --backup-file=/root/raid5_backup

# 查看变更后的chunk大小

mdadm --detail /dev/md5 | grep chunk

改变RAID级别:

# 将RAID5转换为RAID6(需要至少4块盘)
mdadm --grow /dev/md5 --level=6 --backup-file=/root/raid5_backup

# 将RAID5转换为RAID0(收缩操作要小心!)

mdadm --grow /dev/md5 --level=0

调整一致性策略:

# 启用写意图位图
mdadm --grow /dev/md5 --bitmap=internal

# 禁用位图

mdadm --grow /dev/md5 --bitmap=none

# 改变一致性策略

mdadm --grow /dev/md5 --consistency-policy=resync

4.6 检查和修复阵列

手动触发一致性检查:

# 设置检查动作
mdadm --action=check /dev/md5

# 或者在/proc/mdstat中查看进度

cat
 /proc/mdstat

手动触发修复:

# 设置修复动作
mdadm --action=repair /dev/md5

检查并自动修复:

# 对所有阵列执行检查
mdadm --wait /dev/md5

# 或者设置每日cron任务自动检查

echo
 "MAILADDR root" >> /etc/mdadm/mdadm.conf

五、 阵列监控

5.1 mdadm监控模式简介

mdadm的监控模式(Monitor mode)可以实时监控阵列状态,并在发生故障时:

  • • 发送邮件通知
  • • 执行指定脚本
  • • 记录到系统日志

监控事件类型:

  • • DeviceDisappeared - 阵列消失
  • • Fail - 设备故障
  • • FailSpare - 热备盘重建失败
  • • SpareActive - 热备盘激活成功
  • • NewArray - 检测到新阵列
  • • DegradedArray - 阵列降级
  • • RebuildStarted - 重建开始
  • • RebuildNN - 重建进度(NN%)
  • • RebuildFinished - 重建完成

5.2 启动监控

基本监控命令:

# 监控所有阵列,每60秒检查一次
mdadm --monitor --scan

# 指定邮件地址

mdadm --monitor --scan --mail=admin@example.com

# 指定报警程序

mdadm --monitor --scan --program=/usr/local/bin/raid-alert

# 后台运行并写入PID文件

mdadm --monitor --scan --daemonise --pid-file=/var/run/mdadm.pid

完整监控示例:

# 后台运行,发送邮件和syslog
mdadm --monitor \
  --scan \
  --mail=admin@example.com \
  --program=/usr/local/bin/raid-alert.sh \
  --syslog \
  --daemonise \
  --pid-file=/var/run/mdadm/mdadm.pid

5.3 单次检查(oneshot模式)

适合用cron定期执行:

# 每小时检查一次
0 * * * * /usr/bin/mdadm --monitor --scan --oneshot

# 每天检查一次

0 3 * * * /usr/bin/mdadm --monitor --scan --oneshot --test

5.4 监控脚本示例

#!/bin/bash
# /usr/local/bin/raid-alert.sh


EVENT=$1
DEVICE=$2
DETAIL=$3

LOGFILE="/var/log/raid-alert.log"

log
() {
    echo
 "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOGFILE
}

case
 $EVENT in
    Fail)
        log
 "CRITICAL: Device $DETAIL failed in $DEVICE"
        # 这里可以添加更多告警逻辑,如发送短信

        ;;
    FailSpare)
        log
 "CRITICAL: Spare $DETAIL failed during rebuild on $DEVICE"
        ;;
    DegradedArray)
        log
 "WARNING: Array $DEVICE is degraded"
        ;;
    RebuildStarted)
        log
 "INFO: Rebuild started on $DEVICE"
        ;;
    RebuildFinished)
        log
 "INFO: Rebuild finished on $DEVICE"
        ;;
    SpareActive)
        log
 "INFO: Spare $DETAIL activated on $DEVICE"
        ;;
    *)
        log
 "INFO: Event $EVENT on $DEVICE (detail: $DETAIL)"
        ;;
esac

5.5 系统日志监控

mdadm的监控事件也会记录到syslog,配置文件示例:

# /etc/rsyslog.d/raid.conf
kern.warn;kern.info;kern.debug;mail.*;syslog.*;local6.* /var/log/raid-messages

重启日志服务:

systemctl restart rsyslog

5.6 设置开机自启动监控

使用systemd:

# 创建服务文件
cat
 > /etc/systemd/system/mdadm-monitor.service << 'EOF'
[Unit]
Description=MDADM RAID Monitor
After=network.target

[Service]
Type=forking
ExecStart=/usr/bin/mdadm --monitor --scan --daemonise --pid-file=/var/run/mdadm.pid
PIDFile=/var/run/mdadm.pid
Restart=always

[Install]
WantedBy=multi-user.target
EOF

# 启用服务

systemctl enable mdadm-monitor
systemctl start mdadm-monitor

六、 故障排除

6.1 常见故障与处理

阵列无法启动:

# 查看详细错误信息
mdadm --assemble /dev/md0 --verbose

# 强制组装

mdadm --assemble /dev/md0 --force

# 检查组件设备

mdadm --examine /dev/sdb1 /dev/sdc1

磁盘标记为"removed":

# 查看当前状态
cat
 /proc/mdstat

# 尝试重新添加

mdadm --manage /dev/md0 --re-add /dev/sdc1

# 如果不行,先移除再添加

mdadm --manage /dev/md0 --remove /dev/sdc1
mdadm --manage /dev/md0 --add /dev/sdc1

重建卡住:

# 查看重建状态
cat
 /proc/mdstat

# 如果需要,取消并重新触发

mdadm --manage /dev/md0 --action=idle
mdadm --manage /dev/md0 --action=resync

6.2 从故障中恢复

单盘故障的RAID5恢复:

# 1. 确认故障
cat
 /proc/mdstat

# 2. 标记故障盘并移除

mdadm /dev/md5 --fail /dev/sdc1
mdadm /dev/md5 --remove /dev/sdc1

# 3. 插入新盘

mdadm /dev/md5 --add /dev/sdd1

# 4. 观察重建过程

watch cat /proc/mdstat

整个阵列数据恢复(最后手段):

# 如果有backup文件,可以恢复
mdadm --assemble /dev/md5 --backup-file=/root/backup.dat /dev/sdb1 /dev/sdc1 /dev/sdd1

6.3 常见错误信息

错误信息
含义
解决方案
"no such device"
设备不存在
检查设备名称是否正确
"device busy"
设备正在使用中
先卸载阵列或停止相关进程
"mdadm: cannot open ...: No such file or directory"
配置文件路径错误
检查--config指定的路径
"Reshape paused"
变形操作暂停
使用--continue恢复
"bitmap file is invalid"
位图文件损坏
移除并重新创建位图

6.4 数据备份建议

无论使用何种RAID级别,都应记住:

RAID不是备份!

  • • RAID只能防止磁盘硬件故障
  • • RAID不能防止人为误删除
  • • RAID不能防止文件系统损坏
  • • RAID不能防止自然灾害

建议的备份策略:

# 使用rsync定期备份到另一存储
rsync -av /mnt/raid5/ /backup/raid5/

# 或者使用快照

lvcreate -L 10G -s -n raid5-snap /dev/vg0/raid5

# 云备份(定期上传关键数据)

rclone sync /mnt/raid5/ remote:backup-raid5/

七、 性能调优

7.1 chunk大小选择

chunk大小影响IO合并效率:

  • • 大chunk(256KB-512KB):适合大文件顺序读写,如视频流、大型数据库
  • • 小chunk(4KB-64KB):适合小文件随机读写,如文件服务器、Web应用
# 创建时指定
mdadm --create /dev/md0 --level=5 --chunk=256 --raid-devices=4 /dev/sd[b-e]1

7.2 校验布局选择

对于RAID5/6:

  • • left-symmetric(默认):通用性好
  • • right-symmetric:某些工作负载性能更好
  • • lazy:校验块更新延迟高但写入快

7.3 位图优化

对于经常断电的环境:

# 启用内部位图
mdadm --grow /dev/md5 --bitmap=internal

# 设置位图chunk大小

mdadm --grow /dev/md5 --bitmap-chunk=64M

7.4 读取策略

对于RAID1/10:

# 查看当前策略
cat
 /sys/block/md0/md/rmech_percent

# RAID1可以设置读盘策略,但mdadm不直接支持

# 需要在sysfs中调整

八、 实战案例

案例1:构建家用NAS存储

需求:

  • • 4块4TB硬盘
  • • 需要容错能力(可容忍1-2盘故障)
  • • 主要用于存储电影和照片

方案选择:

  • • RAID6:可容忍2盘故障,可用容量12TB(4-2=2块盘的容量)
  • • 或者RAID5 + 1热备:可用容量9TB

实施:

# 创建RAID6
mdadm --create /dev/md0 --level=6 --name=nas --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde

# 格式化为XFS(支持大文件)

mkfs.xfs -f /dev/md0

# 添加到fstab

echo
 "/dev/md0 /mnt/nas xfs defaults,noatime 0 2" >> /etc/fstab

# 挂载

mount -a

# 配置监控

mdadm --monitor --scan --mail=your@email.com --daemonise --pid-file=/var/run/mdadm-nas.pid

案例2:数据库服务器高可用存储

需求:

  • • 极致读写性能
  • • 高可靠性
  • • 数据盘(容量需求较小但速度快)

方案选择: RAID10

实施:

# 创建4盘RAID10,far布局
mdadm --create /dev/md1 --level=10 --layout=f2 --name=db --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde

# 使用XFS并优化参数

mkfs.xfs -f -d su=64k,sw=4 /dev/md1

# 挂载

mount -o noatime,nodiratime,logbufs=8 /dev/md1 /var/lib/mysql

# 添加到fstab

echo
 "/dev/md1 /var/lib/mysql xfs defaults,noatime,nodiratime 0 2" >> /etc/fstab

案例3:临时工作站高速存储

需求:

  • • 视频编辑用
  • • 追求最高速度
  • • 数据不重要,可以接受丢失

方案选择: RAID0

实施:

# 创建RAID0
mdadm --create /dev/md0 --level=0 --name=work --chunk=256 --raid-devices=2 /dev/sdb /dev/sdc

# 格式化为ext4

mkfs.ext4 -E stride=64 -E stripe-width=128 /dev/md0

# 挂载

mount /dev/md0 /mnt/work

常用命令速查表

创建命令

# RAID0
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1

# RAID1

mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

# RAID5

mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1

# RAID6

mdadm --create /dev/md6 --level=6 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

# RAID10

mdadm --create /dev/md10 --level=10 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

查询命令

mdadm --detail /dev/md0           # 详细状态
mdadm --examine /dev/sdb1          # 组件设备信息
mdadm --brief --scan               # 概要扫描
cat
 /proc/mdstat                   # 系统状态

管理命令

mdadm --stop /dev/md0              # 停止阵列
mdadm --assemble /dev/md0          # 组装阵列
mdadm --add /dev/md0 /dev/sdd1    # 添加设备
mdadm --remove /dev/md0 /dev/sdc1 # 移除设备
mdadm --fail /dev/md0 /dev/sdc1   # 标记故障
mdadm --re-add /dev/md0 /dev/sdc1 # 重新加入

监控命令

mdadm --monitor --scan             # 开始监控
mdadm --monitor --scan --mail=x   # 监控并邮件通知
mdadm --monitor --scan --oneshot  # 单次检查

参考资源:

  • • mdadm手册页:man mdadm
  • • Linux RAID维基:https://raid.wiki.kernel.org/
  • • 官方源码:https://www.kernel.org/pub/linux/utils/raid/mdadm/

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 09:16:19 HTTP/2.0 GET : https://f.mffb.com.cn/a/501340.html
  2. 运行时间 : 0.122289s [ 吞吐率:8.18req/s ] 内存消耗:4,859.03kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=17f4c19b8997df9be1ca69ae07b5a2c8
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000463s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000636s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000301s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000288s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000571s ]
  6. SELECT * FROM `set` [ RunTime:0.000256s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000588s ]
  8. SELECT * FROM `article` WHERE `id` = 501340 LIMIT 1 [ RunTime:0.000581s ]
  9. UPDATE `article` SET `lasttime` = 1783041379 WHERE `id` = 501340 [ RunTime:0.010034s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000285s ]
  11. SELECT * FROM `article` WHERE `id` < 501340 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000521s ]
  12. SELECT * FROM `article` WHERE `id` > 501340 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000499s ]
  13. SELECT * FROM `article` WHERE `id` < 501340 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001500s ]
  14. SELECT * FROM `article` WHERE `id` < 501340 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.006450s ]
  15. SELECT * FROM `article` WHERE `id` < 501340 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.031744s ]
0.123962s