linux中不停机更换故障硬盘的关键是先判断用途:raid成员盘执行“标记—移除—替换—重建”,lvm物理卷用pvmove热迁移,普通数据盘则卸载后换盘格式化;全程需多工具交叉验证故障状态,严禁盲目拔盘。

在 Linux 系统中不停机更换故障物理硬盘,关键取决于硬盘用途和底层存储架构。不是所有硬盘都能热换,必须先判断它是否属于可在线维护的逻辑层(如 RAID 或 LVM),且系统支持热插拔硬件。以下分场景说明操作路径:
确认硬盘是否支持热替换
先检查物理接口与服务器能力:
- 查看硬盘是否接在支持热插拔的背板上:运行 ls /sys/class/scsi_host/,再对每个 host 执行 echo "- - -" > /sys/class/scsi_host/hostX/scan(X 替换为实际编号),看能否识别新盘;
- 运行 smartctl -i /dev/sdX 检查 Rotation Rate 和 Logical Unit id,若显示 “Solid State Device” 或有 “Hot Plug” 相关字段,更可能支持;
- 用 lshw -class disk -short 查看 configuration 中是否含 hotplug=yes。
场景一:该盘是软 RAID(mdadm)成员(推荐优先走此路径)
RAID1/5/6/10 均支持单盘故障下在线更换,全过程业务不中断:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 定位故障盘:cat /proc/mdstat 找带 (F) 或 faulty 的设备;再执行 mdadm --detail /dev/md0 确认具体分区(如 /dev/sdc1);
- 主动标记并移除:mdadm --manage /dev/md0 --fail /dev/sdc1 → mdadm --manage /dev/md0 --remove /dev/sdc1;
- 物理更换硬盘后,用 fdisk /dev/sdc 创建分区,并设类型为 Linux RAID auto(t → fd);
- 刷新分区表:partprobe /dev/sdc,再加入阵列:mdadm --manage /dev/md0 --add /dev/sdc1;
- 观察 cat /proc/mdstat 显示 recovery 进度,完成后确认状态为 active sync,并更新配置:mdadm --detail --scan >> /etc/mdadm.conf。
场景二:该盘是 LVM 物理卷(PV),且未损坏到无法读取
适用于硬盘出现坏道但 LVM 仍能访问其元数据的情况:
- 确认 PV 可读:pvs -v | grep sdb 输出中 Allocatable 应为 yes,且无 missing 字样;
- 准备新盘并加入卷组:pvcreate /dev/sdd → vgextend vg00 /dev/sdd(确保容量 ≥ 旧盘已用 PE 数);
- 执行热迁移:pvmove -i 5 /dev/sdb /dev/sdd(-i 5 表示每 5 秒刷新进度);
- 迁移完成(echo $? == 0)后,验证:pvdisplay /dev/sdb 显示 Alloc PE 和 Used PE 均为 0;
- 安全移除:vgreduce vg00 /dev/sdb → pvremove /dev/sdb。
场景三:该盘仅为普通挂载数据盘(非系统、非 RAID、非 LVM)
若只是独立使用的数据盘(如 /data),且 fstab 中未设置自动挂载或已注释,可最小化影响更换:
- 先卸载:umount /dev/sdb1(若提示 busy,用 lsof +D /data 查进程并停止);
- 修改 /etc/fstab,临时注释掉对应行;
- 物理更换后,用 fdisk /dev/sdb 分区 → mkfs.xfs /dev/sdb1 → mkdir -p /data → mount /dev/sdb1 /data;
- 确认无误后,再把 fstab 中的注释去掉,或更新 UUID(用 blkid 获取新盘 UUID)。
不复杂但容易忽略的是:热换前务必确认故障盘是否真“可控”——别靠指示灯或日志片段做决定,要结合 dmesg、smartctl、mdadm --detail 或 pvs 多维度交叉验证。盲目拔盘可能让降级阵列直接崩溃。










