如何在Windows上读取Linux RAID阵列?WinMD免费驱动完整上手指南
【免费下载链接】winmdWinMD项目地址: https://gitcode.com/gh_mirrors/wi/winmd
WinMD 是一款让 Windows 系统直接读取 Linux mdadm 软件 RAID 阵列的开源内核驱动,基于 LGPL 协议免费发布。它的核心价值只有一句话:把 Linux 服务器上组好的 RAID 盘,插到 Windows 电脑上照样能读出数据。接下来,我会从"为什么会遇到这种麻烦"讲起,再到"三分钟装好它",最后把新手最容易踩的坑提前指给你看。
服务器宕机了,但数据还躺在几块硬盘里
先讲一个并不少见的情景。
你所在的团队有一台 Linux 服务器,几年积累的资料全部存放在一组由四块硬盘组成的 RAID5 阵列里。某天早上,服务器突然点不亮,系统盘彻底报废。你手头只剩一台 Windows 电脑,于是把四块硬盘拆下来接了上去——可磁盘管理里出现的,只是一排写着"未初始化"的陌生磁盘。
这不是个例。Linux 的 mdadm 软件 RAID 会把数据按一定规律拆分、镜像或加入校验,分散存放在多块磁盘上。单块硬盘拎出来,Windows 根本看不懂里面装了什么。
这里有一个很贴切的类比:一组 RAID 阵列就像一支合唱团,每块硬盘只负责唱一个声部,只有所有成员按同一份乐谱同时发声,你才能听到完整旋律。Windows 只看得见一个个"歌手",却读不懂那份把大家组织起来的"乐谱"。
而 WinMD,就是那份"乐谱翻译器"。
WinMD 是什么?一个让 Windows 读懂 Linux RAID 的免费开源驱动
WinMD 是开发者 Mark Harmstone 发布的一个 Windows 内核驱动程序,用 LGPL 协议开源,任何人都可以免费下载、使用甚至改源码。它做的事情概括起来有三件:
- 在 Windows 里扫描并识别 mdadm 创建的软件 RAID 阵列;
- 把组成阵列的多块磁盘重新拼装成一块完整的逻辑磁盘;
- 把拼好的逻辑盘交给 Windows 的即插即用机制,让它像普通磁盘一样被挂载并分配盘符。
用它不需要重装系统,也不需要先把数据搬到别的介质上——把盘接上、装上驱动、重启,阵列就能重新出现在你面前。
📌 需要先说明的是:WinMD 只负责"认出 RAID 阵列"这一层。真正读出文件,还需要对应的文件系统驱动,这一点我们留到后面的"坑"里细说。
不过,要理解它凭什么能"拼装"阵列,得先聊聊 mdadm 留在每块盘上的一个小秘密。
工作原理:先读懂每块盘上的"装箱清单"
mdadm 在创建阵列时,会在每一块成员磁盘上写下一段叫做"超级块"(superblock)的数据。你可以把它理解成一张装箱清单,上面清清楚楚地记录着:
- 这个阵列是什么级别(RAID0、RAID1、RAID5……);
- 一共有几块盘、每块盘在阵列里扮演什么角色;
- 数据从磁盘的哪个扇区开始存放、条带(chunk)多大;
- 阵列的 UUID、创建时间和当前事件计数等状态信息。
WinMD 的整个工作流程,可以压缩成三步:
- 扫描每一块磁盘,找到这些"装箱清单";
- 依据清单,把分散的数据块按对应的 RAID 算法重新拼装成一块逻辑盘;
- 把逻辑盘注册给 Windows,让它出现在磁盘管理和资源管理器中。
为了让这套逻辑既清晰又便于维护,WinMD 采用了高度模块化的设计,每种 RAID 算法都有独立的源码文件:比如 raid0.c 处理条带化、raid1.c 处理镜像、raid45.c 和 raid6.c 处理奇偶校验、raid10.c 处理镜像与条带的组合。公共的数据结构统一放在 winmd.h 里,io.c 则负责读写请求的调度。想了解全貌,翻一翻项目自带的 README.md 就能找到完整说明。
顺带一提,mdadm 的版本 1 超级块有三种存放位置(1.0、1.1、1.2),WinMD 全都认识,所以不管 mdadm 默认怎么布局,它基本都能找得到。只有老旧的 0.9 版本超级块暂不支持,被列在了未来的规划里。
支持哪些 RAID 级别?一张表看懂
WinMD 支持的阵列类型相当全面,几乎覆盖了 mdadm 的常见用法。下面这张表按"它解决了什么问题"来梳理:
| RAID 级别 | 一句话解释 | 解决什么问题 |
|---|---|---|
| RAID0 | 条带化 | 追求速度,数据被拆开写进多块盘 |
| RAID1 | 镜像 | 追求安全,每份数据都有完整副本 |
| RAID4/5 | 单奇偶校验 | 在速度与安全之间找平衡 |
| RAID6 | 双奇偶校验 | 允许同时坏两块盘也不丢数据 |
| RAID10 | 镜像 + 条带 | 又要速度又要安全,支持 near / far / offset 三种布局 |
| Linear | 线性拼接 | 简单地把多块盘连成一块更大的盘 |
除此之外,WinMD 还支持"嵌套阵列",也就是阵列套阵列的复杂结构,比如先做一组 RAID1 镜像、再把镜像组条带化。如果你的阵列属于这些类型,都有机会在 Windows 里被直接认出来。
三分钟速览:如何快速在 Windows 里识别 Linux RAID
安装路径很短,按下面三步走,通常几分钟就能跑通:
- 获取驱动:可以直接
git clone https://gitcode.com/gh_mirrors/wi/winmd拉取源码,也可以下载最新的发布包;如果你装了 Chocolatey,一条命令就能搞定:choco install winmd。 - 安装驱动:解压后右键点击 winmd.inf,选择"安装"。驱动是签名过的,在大多数现代 Windows 版本上即装即用。
- 验证效果:重启系统,打开"磁盘管理",看看 Linux RAID 阵列是否已经被识别;再装好对应的文件系统驱动(Btrfs 用 WinBtrfs,Ext2/3/4 用 Ext2fsd),就可以像访问普通磁盘一样访问数据了。
如果一切顺利,这个过程可能平淡得超出预期——恰恰是因为复杂的工作都被消化在了幕后。✅
新手最容易踩的 4 个坑
作为早期版本,WinMD 也有一些边界值得留意。这里把新手最容易踩的坑提前列出来:
坑一:阵列认出来了,却看不到文件WinMD 不是文件系统驱动。它只负责把 RAID 拼装成"一块盘",盘里的文件还需要对应的文件系统驱动来读。遇到这种情况,先确认文件系统驱动是否装好,再检查挂载状态。
坑二:Windows 10 报"驱动签名"错误较新版本的 Windows 10 对驱动签名提出了更严格的要求,个人开发者通常拿不到这类签名。如果安装时报签名错误,一般可以在 BIOS 设置里暂时关闭 Secure Boot 再试。
坑三:少了一块盘,阵列就挂不上"降级挂载"(在磁盘不全的情况下访问阵列)目前还在开发计划中。所以使用前,建议先确认所有成员盘都健康在位,别指望缺盘还能读。
坑四:想卸载或禁用,找不到入口想彻底卸载时,可以在管理员命令行里执行下面这条命令:
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 winmd.inf
如果想临时禁用而不是卸载,也可以打开注册表编辑器,把HKLM\SYSTEM\CurrentControlSet\services\winmd下的Start值改为 4。
谁适合用 WinMD?四个常见应用场景
如果你还不确定自己需不需要它,可以对照下面几个场景:
- 数据迁移:Linux 服务器要退役了,直接拔下阵列盘接到 Windows 电脑上拷贝数据,省去先备份再恢复的折腾。
- 双系统日常维护:经常在 Windows 和 Linux 之间切换的用户,希望同一组数据两边都能随时访问。
- 紧急恢复:Linux 系统崩溃后,用 Windows 临时接手,把关键数据抢救出来,尽可能缩短停机时间。
- 开发与测试:需要在跨平台环境下复用同一份数据时,WinMD 提供了一条统一的访问通道。
未来规划:还有哪些功能在路上
作为一个 v0.1 版本,WinMD 的路线图上也清楚地列着下一步想做的事,例如:
- 整盘 RAID 识别,也就是在 MD 设备上继续识别里面的分区;
- 阵列重构、数据重建和一致性检查;
- 降级挂载,让部分磁盘损坏时也能访问数据;
- 在 Windows 里动态添加、移除成员设备;
- 支持老旧的 0.9 版本超级块,覆盖更早创建的阵列;
- 甚至未来可以直接在 Windows 上创建新的 RAID 阵列。
这些能力一旦落地,WinMD 就不只是"读取工具",而会慢慢成长为一套完整的跨平台 RAID 管理方案。对普通用户来说,这意味着更多的容错空间和更少的使用限制。
写在最后:让数据真正自由流动
操作系统之间的壁垒,很多时候并不是数据本身造成的,而是少了一个愿意"互相听懂"的中间层。WinMD 用一份小小的超级块翻译逻辑,在 Linux 和 Windows 之间凿开了一道门。如果你正被跨平台读盘的问题困扰,不妨亲手试试:git clone https://gitcode.com/gh_mirrors/wi/winmd,装上它,然后去磁盘管理里迎接你的老朋友。
毕竟,数据应该跟着人走,而不是被困在系统里。
【免费下载链接】winmdWinMD项目地址: https://gitcode.com/gh_mirrors/wi/winmd
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考