三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

别再浪费硬盘了!用Ubuntu的mdadm组RAID 0,榨干旧硬盘性能当高速缓存盘

别再浪费硬盘了!用Ubuntu的mdadm组RAID 0,榨干旧硬盘性能当高速缓存盘

旧硬盘重生计划:用Ubuntu和mdadm打造极速RAID 0缓存盘

你是否有一堆闲置的旧硬盘在角落里吃灰?别急着把它们送进回收站——这些被淘汰的存储设备可能蕴藏着意想不到的性能潜力。本文将带你探索如何通过Ubuntu系统和mdadm工具,将这些"过气"硬盘重新组合成一块高速缓存盘,为视频剪辑、游戏加载或代码编译等场景提供临时的性能加速。

1. 为什么选择RAID 0作为缓存方案

在开始实际操作前,我们需要明确RAID 0的特性与风险。这种磁盘阵列模式通过将数据分块(striping)并行写入多块硬盘,理论上可以获得接近硬盘数量倍数的读写速度。但代价是:任何一块成员硬盘故障都会导致整个阵列数据丢失。

适合RAID 0缓存盘的典型场景

  • 视频编辑的临时渲染文件存储
  • 软件开发中的编译中间文件
  • 游戏加载时的缓存数据
  • 大数据处理的临时工作区

重要提示:永远不要在RAID 0中存储唯一副本的重要数据。它最适合存放可以随时重新生成或下载的临时文件。

下表对比了单盘与RAID 0阵列的性能差异(以两块7200转机械硬盘为例):

指标单硬盘RAID 0阵列提升幅度
顺序读取150MB/s280MB/s~87%
顺序写入140MB/s260MB/s~86%
4K随机读取0.8MB/s1.5MB/s~88%
访问延迟12-14ms12-14ms基本持平

2. 准备工作:评估与选择候选硬盘

不是所有旧硬盘都适合组建RAID 0。我们需要先对候选硬盘进行健康检查,避免将即将故障的盘纳入阵列。

2.1 检测硬盘健康状态

使用smartctl工具检查硬盘SMART状态:

sudo apt install smartmontools sudo smartctl -a /dev/sdX | grep -E "Reallocated_Sector_Ct|Current_Pending_Sector|Uncorrectable_Error_Cnt"

关键指标解读:

  • Reallocated_Sector_Ct:重映射扇区数,大于0表示硬盘已有坏道
  • Current_Pending_Sector:待重映射扇区数,数值应保持为0
  • Uncorrectable_Error_Cnt:不可纠正错误数,应始终为0

2.2 性能基准测试

使用hdparm测试原始读写速度:

sudo hdparm -Tt /dev/sdX

理想情况下,组成RAID 0的硬盘应该具有:

  • 相近的容量(否则总容量以最小盘为准)
  • 相似的性能表现(避免速度不匹配造成瓶颈)
  • 良好的健康状态(SMART无警告)

3. 实战:用mdadm创建RAID 0阵列

3.1 安装必要工具

Ubuntu通常已内置mdadm,但为确保完整功能建议安装完整包:

sudo apt update sudo apt install mdadm --no-install-recommends

3.2 识别可用磁盘

列出系统识别到的所有块设备:

lsblk -o NAME,SIZE,MODEL,ROTA,MOUNTPOINT

示例输出中识别出两块候选硬盘:

NAME SIZE MODEL ROTA MOUNTPOINT sda 480G Samsung SSD 860 1 sdb 1T WDC WD10EZEX-08 1 sdc 1T WDC WD10EZEX-08 1

3.3 创建RAID 0阵列

使用以下命令创建名为md0的RAID 0阵列:

sudo mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 --chunk=256 /dev/sdb /dev/sdc

参数说明:

  • --chunk=256:设置256KB的条带大小,适合大文件连续读写
  • --raid-devices=2:指定使用2块硬盘组建阵列

验证阵列状态:

cat /proc/mdstat

预期看到类似输出:

md0 : active raid0 sdc[1] sdb[0] 20951040 blocks super 1.2 256k chunks

3.4 文件系统与挂载

推荐使用XFS文件系统以获得更好的大文件性能:

sudo apt install xfsprogs sudo mkfs.xfs -f /dev/md0

创建挂载点并设置自动挂载:

sudo mkdir /cache echo "/dev/md0 /cache xfs defaults,noatime 0 0" | sudo tee -a /etc/fstab sudo mount -a

4. 高级优化与使用技巧

4.1 内核参数调优

在/etc/sysctl.conf中添加以下参数优化IO性能:

vm.dirty_ratio = 10 vm.dirty_background_ratio = 5 vm.swappiness = 10

应用设置:

sudo sysctl -p

4.2 作为系统临时目录

将RAID阵列绑定到/tmp实现全局加速:

sudo mv /tmp /tmp.old sudo mkdir /tmp sudo mount --bind /cache /tmp sudo chmod 1777 /tmp

在/etc/fstab中添加持久化配置:

/cache /tmp none bind 0 0

4.3 监控与维护

设置定期阵列检查:

echo "MAILADDR your@email.com" | sudo tee -a /etc/mdadm/mdadm.conf echo "0 1 * * * root /usr/share/mdadm/checkarray --cron --all --quiet" | sudo tee /etc/cron.d/raid-check

5. 故障处理与安全实践

虽然RAID 0不提供冗余保护,但我们可以采取一些措施降低风险:

数据安全黄金法则

  1. 每日重要数据备份到其他存储
  2. 设置SMART监控告警
  3. 避免在阵列中存储唯一数据副本
  4. 定期检查阵列健康状态

当检测到潜在问题时,立即执行数据迁移:

sudo dd if=/dev/md0 of=/path/to/backup/image bs=1M status=progress

对于视频编辑等应用,建议工作流程为: 原始素材 → 本地SSD → RAID 0缓存处理 → 最终渲染输出到安全存储

← 返回列表