title: 硬盘 分区 RAID
created: 2026-06-20
updated: 2026-09-03
type: entity
tags: [storage, raid, disk, management, entity]
sources:
- raw/scripts/RAID.sh
- raw/scripts/0硬盘.sh
- raw/scripts/磁盘 .sh
硬盘 分区 RAID
磁盘与 RAID 管理涵盖物理磁盘的查看、健康检查、分区、格式化、挂载,以及 RAID 卡管理(StorCLI/MegaCLI)、虚拟磁盘创建、热备盘配置等运维操作。
磁盘管理
查看磁盘信息
# 查看所有块设备(型号、序列号、接口、挂载点)
lsblk -o NAME,MAJ:MIN,MODEL,SERIAL,SIZE,WWN,HCTL,TRAN,VENDOR,TYPE
# 查看 SCSI 设备(HCTL、厂商、型号、容量)
lsscsi -s
# 查看硬盘硬件信息
lshw -class disk
# 查看设备 UUID 与文件系统
blkid
ls -l /dev/disk/by-uuid/
ls -l /dev/disk/by-id/
SMART 健康检查
# 查看硬盘温度
smartctl -a /dev/sda | grep -i -E 'Temperature|emp'
# 查看使用时间与序列号
sudo smartctl -i -A /dev/sdd | grep -iE 'Device Model|Serial|Power|Product'
# 批量采集
for i in {a..z}; do
smartctl -a /dev/sd$i >> smartctl.out
done
关键阈值指标:
- Reallocated_Sector_Ct — 重映射扇区数(应为 0)
- Power_On_Hours — 通电小时数
- Temperature_Celsius — 当前温度
- Pending_Sector — 待重映射扇区(应为 0)
分区与格式化
# 交互式分区
fdisk /dev/sdb
# 或 parted(支持 GPT 大容量)
parted /dev/sdb mklabel gpt
# 格式化(ext4 / xfs)
mkfs.ext4 /dev/sdb1
mkfs.xfs /dev/sdb1
# 挂载
mkdir -p /data
mount /dev/sdb1 /data
# 永久挂载(写入 fstab)
echo "/dev/sdb1 /data ext4 defaults 0 0" >> /etc/fstab
mount -a # 验证 fstab 无错误
I/O 监控
iostat -x 1 # 每 1 秒输出扩展统计
| 指标 | 含义 |
|---|---|
r/s, w/s |
每秒读写请求数(IOPS) |
rkB/s, wkB/s |
每秒读写数据量(吞吐量) |
await |
平均 I/O 等待时间(ms),反映延迟 |
%util |
设备利用率(不一定是瓶颈指标) |
LVM 逻辑卷管理
LVM(Logical Volume Manager)在物理盘/分区之上抽象出卷组与逻辑卷,支持在线扩容、跨盘聚合、快照。
概念层级
PV(物理卷 pvcreate)
└── VG(卷组 vgcreate,聚合多 PV)
└── LV(逻辑卷 lvcreate,= 可挂载的"分区")
└── 文件系统(mkfs)
基础操作
# 1. 创建 PV(物理卷)——基于整盘或分区
pvcreate /dev/sdb
pvcreate /dev/sdc1
pvs # 查看 PV(PV Size / VG / Free)
# 2. 创建 VG(卷组)
vgcreate vg_data /dev/sdb /dev/sdc1
vgs # 查看 VG(总容量/已用/空闲)
# 3. 创建 LV(逻辑卷)
lvcreate -n lv_app -L 500G vg_data # 固定大小
lvcreate -n lv_web -l 100%FREE vg_data # 用尽剩余空间
lvs # 查看 LV
lvdisplay /dev/vg_data/lv_app
# 4. 格式化 + 挂载
mkfs.xfs /dev/vg_data/lv_app # 或 mkfs.ext4
mkdir -p /data/app
mount /dev/vg_data/lv_app /data/app
echo "/dev/vg_data/lv_app /data/app xfs defaults 0 0" >> /etc/fstab
在线扩容(核心优势)
# 扩容 LV(先扩 LV 再扩文件系统,顺序不能反)
lvextend -L +100G /dev/vg_data/lv_app # 增加 100G
lvextend -r -L +100G /dev/vg_data/lv_app # -r 自动扩文件系统(xfs/ext4 均支持)
xfs_growfs /data/app # xfs 手动扩容挂载点
resize2fs /dev/vg_data/lv_app # ext4 手动扩容
# VG 空间不足时:新增物理盘加入卷组
pvcreate /dev/sdd
vgextend vg_data /dev/sdd
vgs # 确认 VG 空闲空间增加后再 lvextend
缩容(ext4 仅限离线)
# 缩容必须:先卸载 → 检查 → 缩文件系统 → 缩 LV(顺序严格)
umount /data/app
e2fsck -f /dev/vg_data/lv_app
resize2fs /dev/vg_data/lv_app 400G # 先缩文件系统到 400G
lvreduce -L 400G /dev/vg_data/lv_app # 再缩 LV
mount /data/app
# xfs 不支持缩容,需缩容请先备份重建
快照
# 创建快照(LV 精简副本,备份/测试前使用)
lvcreate -s -n lv_app_snap -L 20G /dev/vg_data/lv_app
# 挂载快照查看历史数据
mkdir -p /mnt/snap
mount -o nouuid /dev/vg_data/lv_app_snap /mnt/snap # xfs 需 -o nouuid
# 回滚(先卸载原 LV)
umount /data/app
lvconvert --merge /dev/vg_data/lv_app_snap
mount /data/app
# 删除快照
lvremove /dev/vg_data/lv_app_snap
常用查看与删除
pvdisplay / vgdisplay / lvdisplay # 详情(对应 pvs/vgs/lvs 简版)
pvs -o +pv_used # PV 用量
vgdisplay -s # 简略卷组汇总
# 删除链路(LV → VG → PV,与创建反向)
umount /data/app
sed -i '/vg_data/d' /etc/fstab # 先删 fstab 条目
lvremove /dev/vg_data/lv_app
vgremove vg_data
pvremove /dev/sdb /dev/sdc1
注意事项:
- 扩容顺序:lvextend 先 → 文件系统后(-r 一步到位最省事)
- 缩容顺序:卸载 → 文件系统先缩 → LV 后缩
- xfs 只可扩不可缩;ext4 可扩可缩(缩需离线)
- 快照空间来自 VG 剩余空间,快照越大增长越快,用完会失效
软 RAID(mdadm)
Linux 内核原生 md 驱动实现的软件 RAID,无需专用 RAID 卡,普通 SATA/SSD/NVMe 盘即可组建。
与硬 RAID 对比
| 对比 | 软 RAID (mdadm) | 硬 RAID (StorCLI) |
|---|---|---|
| 硬件要求 | 无专用卡,主板 SATA 口即可 | 需 RAID 卡(Broadcom/Microchip) |
| 成本 | 0 | 数百~数千元 |
| 性能 | 多盘时吃 CPU(校验计算) | 卡上芯片卸载计算 |
| 缓存/掉电保护 | 无(依赖系统) | 卡缓存 + BBU/电容 |
| 迁移性 | 换机器认盘即用 | 换卡可能需同型号 |
| 适用 | 家用/单机/盘少 | 服务器/盘多/企业级 |
创建 RAID
# 查看磁盘
lsblk -o NAME,SIZE,MODEL
# RAID 0(条带,2 盘)
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb /dev/sdc
# RAID 1(镜像,2 盘)
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
# RAID 5(1 块冗余,3 盘起)
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
# RAID 10(4 盘,性能+冗余)
mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
格式化 + 挂载 + 持久化
# 格式化(RAID5/6 建议 ext4/xfs 均可)
mkfs.ext4 /dev/md0
# 或
mkfs.xfs /dev/md0
# 挂载
mkdir -p /data/raid
mount /dev/md0 /data/raid
# 写入配置文件(重建阵列时自动组装)
mdadm --detail --scan >> /etc/mdadm.conf
# 或手动写入
echo "DEVICE /dev/sdb /dev/sdc /dev/sdd" >> /etc/mdadm.conf
# 写入 fstab 永久挂载(用 UUID 更稳)
blkid /dev/md0
echo "UUID=<上一步UUID> /data/raid ext4 defaults 0 0" >> /etc/fstab
mount -a # 验证
查看状态
cat /proc/mdstat # 实时状态(是否 degraded/rebuilding)
mdadm --detail /dev/md0 # 详细阵列信息
mdadm --detail --scan # 扫描现有阵列
日常维护
# 标记某盘故障(模拟/实际坏盘后)
mdadm /dev/md0 --fail /dev/sdb
mdadm /dev/md0 --remove /dev/sdb
# 添加新盘重建(热替换)
mdadm /dev/md0 --add /dev/sde
cat /proc/mdstat # 观察重建进度 [>....]
# 移除阵列
umount /data/raid
mdadm --stop /dev/md0
NVMe 软 RAID 注意
# NVMe 盘同样可用 mdadm(RAID0/1/10)
mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1
# 关键限制:
# 1. PCIe 通道数决定能插几块 NVMe(x4/盘),消费板 2-4 条,服务器平台可 8+
# 2. 校验类(RAID5/6)不推荐用于 NVMe:重建窗口长、md 校验性能弱
# 3. NVMe 高负载发热大,注意散热
# 4. RAID5/6 大数据量建议改用 ZFS(自愈 + 写时校验 + 压缩)
场景选型建议
| 场景 | 方案 |
|---|---|
| 2 盘:系统/数据镜像 | mdadm RAID1(简单可靠) |
| 4 盘:数据库/高 IO | mdadm RAID10 |
| 数据量大、要自愈/快照 | ZFS raidz2(非 mdadm) |
| 企业服务器、卡已有 | 硬 RAID(StorCLI 管理) |
RAID 管理(StorCLI / MegaCLI)
StorCLI 安装
StorCLI 是 Broadcom/LSI RAID 卡的官方管理工具。
# 安装
yum install -y storcli
# 创建软链接
sudo ln -s /opt/MegaRAID/storcli/storcli64 /bin/storcli64
sudo ln -s /opt/MegaRAID/storcli/storcli64 /sbin/storcli
# 下载地址
# https://docs.broadcom.com/docs-and-downloads/raid-controllers/raid-controllers-common-files/007.1907.0000.0000_Unified_StorCLI.zip
基础查询
查看 RAID 卡
storcli show
输出示例:
Ctl Model AdapterType VendId DevId SubVendId SubDevId PCI Address
0 SAS9311-8i SAS3008(C0) 0x1000 0x97 0x1000 0x3090 00:b3:00:00
Ctl = Controller ID(RAID 卡编号),后续命令用 c0、c1 引用。
查看磁盘信息
storcli /c0 show
输出列含义:
| 字段 | 说明 |
|---|---|
| EID:Slt | Enclosure ID:Slot ID(背板:槽位) |
| DID | Device ID |
| State | UGood=正常,UBad=故障 |
| DG | Disk Group(属于哪个 RAID 组) |
| Size | 容量 |
| Intf | SATA/SAS/NVMe |
| Med | HDD/SSD |
| Sp | 热备状态 |
查看详细配置
# 完整信息输出到文件
storcli /c0 show all logfile=logfile.txt
# 查看控制器日志
storcli /c0 show termlog
storcli /c0 show events
虚拟磁盘(VD / RAID 组)管理
创建 RAID
# RAID 0(条带化)
storcli /c0 add vd r0 drives=93:3-4
# RAID 1(镜像)
storcli /c0 add VD r1 drives=30:3,30:4
# RAID 5(分布式奇偶校验)
storcli /c0 add VD r5 drives=252:0-3
# RAID 5(带缓存策略)
storcli /c0 add vd type=raid5 size=all drives=8:0,8:1,8:2 awb ra
删除 RAID
storcli /c0/vall show # 查看所有虚拟磁盘
storcli /c0/v0 delete force # 删除 VD0(force 跳过确认)
缓存策略
# 批量设置(推荐)
storcli /c0 /vall set rdcache=RA wrcache=WB pdcache=off
# 写入缓存:WT=WriteThrough, WB=WriteBack, AWB=AdaptiveWriteBack
storcli /c0 /v1 set wrcache=awb
# 刷新缓存
storcli /c0 flushcache
| 策略 | 说明 | 适用场景 |
|---|---|---|
| WT (WriteThrough) | 数据写入磁盘后才返回 | 数据安全优先 |
| WB (WriteBack) | 数据写入缓存即返回 | 性能优先(需电池/电容保护) |
| AWB (AdaptiveWB) | 根据是否有电池自动切换 | 折中方案 |
| RA (ReadAhead) | 预读 | 顺序读优化 |
| NoRA | 不预读 | 随机读优化 |
热备盘(HotSpare)
# 全局热备
storcli /c0/e8/s3 add hotsparedrive
# 局部热备(指定 DG=0 的热备)
storcli /c0/e8/s3 add hotsparedrive dgs=0
# 删除热备
storcli /c0/e8/s3 delete hotsparedrive
# 自动全局热备
storcli /c0 set eghs eug=on
storcli /c0 set eghs smarter=on
物理盘操作
点亮故障灯(定位磁盘)
storcli /c0/e2/s5 start locate # 亮灯
storcli /c0/e2/s5 stop locate # 灭灯
硬盘擦除
storcli /c0/e2/s11 start erase simple # 简单擦除(1遍)
storcli /c0/e2/s11 start erase normal # 普通擦除(3遍)
storcli /c0/e2/s11 start erase thorough # 彻底擦除(9遍)
storcli /c0/e2/s11 show erase # 查看进度
storcli /c0/e2/s11 stop erase # 停止
JBOD / 直通模式
# 切换 RAID 卡 Personality
storcli /c0 set personality = jbod
storcli /c0 set personality = raid
# 单盘直通
storcli /c0/e252/s1 set jbod
storcli /c0/e252/s1 del jbod force
# 批量设置
storcli64 /c0/e8/sall set jbod
# 清理状态
storcli /c0/e252/s1 set good force
RAID 维护
一致性检查(CC)
storcli /c0/vall stop cc # 停止一致性检查
storcli /c0 set CC=conc starttime=2012/02/21 00 # 定时执行
初始化
# RAID 快速初始化(仅前 100MB)
storcli /c0/vx start init
# 完全初始化(全盘写0,耗时较长)
storcli /c0/vx start init full
# 后台初始化(BGI)
storcli /c0 /vall set autobgi=off
storcli64 /c0/vall show autobgi
巡读(Patrol Read)
storcli /c0 set patrolread=on # 开启
storcli /c0 show patrolread # 查看状态
RAID 重建
storcli /c0 set rebuildrate=50 # 设置重建速率(1-100)
storcli /c0 show rebuildrate # 查看
storcli /c0/e2/s5 show rebuild # 查看某盘重建进度
storcli /c0/e2/s5 pause rebuild # 暂停
固件升级
storcli /c0 download file=mr3108fw.rom noverchk
storcli /c0 restart
MegaCLI(旧版兼容)
旧版 RAID 卡仍使用 MegaCLI:
# 查看物理盘
megacli -PDList -aALL
# 查看逻辑盘
megacli ldinfo lall a0
# 创建 RAID5(物理盘 1:2,1:3,1:4 + 热备 1:5)
megacli -CfgLdAdd -r5 [1:2,1:3,1:4] WB Direct -Hsp[1:5] -a0
# 创建 RAID10
megacli –CfgSpanAdd –r10 –Array0[1:2,1:3] –Array1[1:4,1:5] WB Direct -a0
常见故障处理
| 问题 | 排查命令 | 对策 |
|---|---|---|
| 磁盘 UBad | storcli /c0/e2/s5 show all |
更换硬盘,触发重建 |
| RAID Degraded | storcli /c0/vall show |
检查热备盘,确认重建 |
| 缓存数据丢失 | storcli /c0 flushcache |
尝试刷新缓存 |
| 外部配置冲突 | storcli /c0/fall delete |
导入或清除外部配置 |