教程/OVH 软RAID5性能优化记录

写在前面

书接上文,以为安装完,就可以用了。结果发现装个宝塔,贼耗时间,还以为D版宝塔的问题,换个1panel,还是一样。

只能怀疑是硬盘有问题。问GPT,测试下来虽然9年老机械盘,但还是正常的,因为用了软raid5的问题。GPT给了优化方案后,总算正常了。

初始症状与诊断结论

📉 问题表现

  • 系统整体 I/O 响应慢、fio 测试随机读写性能极低;
  • 尾延迟严重(写入高达秒级延迟);
  • 系统 CPU、内存正常,瓶颈在 I/O 队列。

📊 根本原因

  1. RAID5 写放大机制:小写会触发读旧数据 → 计算 parity → 写入数据块与 parity 块。
  2. 机械盘物理特性:高寻道延迟 + 阵列级并发冲突。
  3. 默认内核参数偏保守stripe_cache_size 仅 256,调度器随机性高。
  4. Debian 默认 mdadm 校验与写缓存策略未优化
  5. 无 SSD 缓存层,所有小 I/O 直接落盘。

以下是GPT给的优化方案

适用于全新 Debian 系统(OVH 独服 + 软件 RAID5) 的完整自动化优化脚本集。

这套脚本在你重装完系统后直接复制粘贴执行即可 —— 全自动部署以下内容:

  • 🧩 自动设置 RAID5 stripe_cache_size = 16384(并持久化)
  • ⚙️ 自动为所有盘设置 I/O 调度器为 mq-deadline(并持久化)
  • 💾 自检日志输出与 systemd 集成(每次开机自动优化)

✅ 一键部署脚本(完整版)

⚠️ 请以 root 执行。若非 root,请先运行:

sudo -i

分步执行以下内容👇

# =========================================================
# RAID5 性能优化自动配置 for Debian (OVH Soft RAID5)
# =========================================================

# --- 创建 RAID stripe cache 设置脚本 ---
cat <<'EOF' > /usr/local/sbin/set_raid_stripe_cache.sh
#!/bin/bash
RAID_DEV="/dev/md3"
STRIPE_PATH="/sys/block/$(basename $RAID_DEV)/md/stripe_cache_size"

if [[ -e "$STRIPE_PATH" ]]; then
  echo 16384 > "$STRIPE_PATH"
  echo "[OK] stripe_cache_size set to $(cat $STRIPE_PATH)"
else
  echo "[WARN] stripe_cache_size path not found: $STRIPE_PATH"
fi
EOF

chmod +x /usr/local/sbin/set_raid_stripe_cache.sh

# --- 创建磁盘调度器设置脚本 ---
cat <<'EOF' > /usr/local/sbin/set_disk_scheduler.sh
#!/bin/bash
for d in sda sdb sdc; do
  sched_path="/sys/block/$d/queue/scheduler"
  if [[ -e "$sched_path" ]]; then
    echo mq-deadline > "$sched_path"
    echo "[OK] $d -> $(cat $sched_path)"
  else
    echo "[WARN] scheduler path not found for $d"
  fi
done
EOF

chmod +x /usr/local/sbin/set_disk_scheduler.sh

# --- 创建 Systemd 服务:RAID stripe cache ---
cat <<'EOF' > /etc/systemd/system/raid-stripe-cache.service
[Unit]
Description=Set optimized stripe cache size for RAID5 array
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/set_raid_stripe_cache.sh

[Install]
WantedBy=multi-user.target
EOF

# --- 创建 Systemd 服务:磁盘调度器 ---
cat <<'EOF' > /etc/systemd/system/disk-scheduler.service
[Unit]
Description=Set mq-deadline scheduler for RAID underlying disks
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/set_disk_scheduler.sh

[Install]
WantedBy=multi-user.target
EOF

# --- 重载 systemd 并启用 ---
systemctl daemon-reload
systemctl enable --now raid-stripe-cache.service
systemctl enable --now disk-scheduler.service

# --- 输出验证状态 ---
echo
echo "=================== RAID 优化状态检查 ==================="
cat /sys/block/md3/md/stripe_cache_size 2>/dev/null || echo "RAID md3 not found."
for d in sda sdb sdc; do
  echo "$d scheduler: $(cat /sys/block/$d/queue/scheduler 2>/dev/null)"
done
systemctl --no-pager -n 5 status raid-stripe-cache.service
systemctl --no-pager -n 5 status disk-scheduler.service
echo "=========================================================="

📘 执行结果预期

运行完成后,你应看到类似输出:

[OK] stripe_cache_size set to 16384
[OK] sda -> none [mq-deadline]
[OK] sdb -> none [mq-deadline]
[OK] sdc -> none [mq-deadline]
RAID 优化状态检查
16384
sda scheduler: none [mq-deadline]
sdb scheduler: none [mq-deadline]
sdc scheduler: none [mq-deadline]
● raid-stripe-cache.service ... status=0/SUCCESS
● disk-scheduler.service ... status=0/SUCCESS

🔁 验证命令(重启后再执行)

重启系统后,运行以下命令确认优化已持久化:

cat /sys/block/md3/md/stripe_cache_size
for d in sda sdb sdc; do cat /sys/block/$d/queue/scheduler; done

输出应为:

16384
none [mq-deadline]
none [mq-deadline]
none [mq-deadline]

🧠 补充(可选后续优化)

安装完系统后可顺手执行:

apt install -y fio smartmontools iotop hdparm

以便进行:

  • fio 基准测试;
  • SMART 健康检查;
  • I/O 实时监控;
  • 写缓存启用检测。

加入主机贴士TG群,了解更多主机使用信息