资讯动态

硬盘拆下来Windows认不出?用WinMD在Windows上直接读取Linux mdadm RAID阵列

发布时间:2026/8/17 17:20:55 来源:尧图企业网站定制
硬盘拆下来Windows认不出用WinMD在Windows上直接读取Linux mdadm RAID阵列【免费下载链接】winmdWinMD项目地址: https://gitcode.com/gh_mirrors/wi/winmd如果你经历过这样的场景一定懂那种焦虑服务器退役、系统重装、或者公司要求把Linux上的数据搬到Windows环境你小心翼翼地把几块硬盘拆下来插进Windows主机结果磁盘管理里只看到一块块提示未初始化的裸盘——上面明明存着几年的数据。问题不在硬盘而在它们属于Linux软件RAID阵列。WinMD就是来解决这件事的它是一个运行在Windows内核里的驱动程序让Windows原生识别由Linuxmdadm创建的MD RAID卷把阵列重新组装出来当作一块普通磁盘使用。本文用一次真实的迁移经历讲清楚它怎么工作、怎么用、以及有哪些坑需要绕开。先搞清楚一件事Linux RAID到底在硬盘上写了什么很多人误以为RAID是硬件控制器的专利或者认为Linux的软件RAID把数据加密了离开Linux环境就无法解读。其实都不是。mdadm创建阵列时会在每块成员盘上写入一个被称为超级块superblock的元数据结构位置和格式在winmd.h里有完整定义阵列的UUID、RAID级别level、条带大小chunksize、成员盘数量、每块盘在阵列中的角色全都在这里。真正决定数据怎么分布的不是Linux系统而是RAID算法本身——条带怎么切、校验怎么算、镜像怎么写这是数学问题与操作系统无关。所以Windows认不出这些盘不是因为数据读不出来而是因为没有程序帮它做两件事读懂超级块、按算法重组IO。这正是WinMD在src/winmd.c和src/pnp.c里干的核心工作——扫描磁盘上的超级块识别阵列拓扑注册成一个卷设备然后把上层发下来的读写下发到对应成员盘上。我的实测三块盘的RAID 5装进Windows后发生了什么我手里有三块从旧NAS上拆下来的盘mdadm组了一个RAID 5阵列ext4文件系统。按官方流程操作下载源码包并解压git clone https://gitcode.com/gh_mirrors/wi/winmd或用Chocolatey直接choco install winmd找到目录里的winmd.inf右键选择安装重启打开磁盘管理。重启后三块未初始化的裸盘变成了一个完整的卷和普通物理硬盘一样出现在列表里。这正是WinMD识别超级块后的成果。需要提醒的是它只负责把阵列组装成一块盘文件系统本身还需要配套驱动ext4要用Ext2fsd这类工具btrfs则需要WinBtrfs。WinMD和它们是协作关系不是替代关系。它能识别哪些阵列从RAID 0到嵌套阵列WinMD对RAID级别的支持相当全面每个级别对应一个独立实现模块RAID 0条带化读写逻辑在src/raid0.c核心是一个简单的偏移换算函数get_raid0_offset把逻辑扇区映射到物理盘和盘内偏移RAID 1镜像src/raid1.c的实现很值得看——读操作用计数器轮询成员盘写操作则一次构造多个IRP同时下发所有成员盘写完后才返回保证镜像一致性RAID 4/5奇偶校验src/raid45.c支持左/右对称和不对称四种布局读取时如果请求跨条带会同时读出数据块和校验块再做XOR重组RAID 6双重校验src/raid6.c里能看到标准的伽罗华域GF(2^8)运算galois_double系列函数就是RS校验算法的实现核心RAID 10支持near、far、offset三种布局见src/raid10.cLinear线性拼接逻辑最简单src/linear.c把请求按块大小顺序拆分到各成员盘。在超级块识别方面WinMD支持v1版本的1.0、1.1、1.2三种布局还支持嵌套阵列比如由多组RAID 1拼成的RAID 0。这种把每个级别拆成独立模块的设计直接的好处是你想研究某个算法时只需要打开对应的一个文件前后不超过几百行就能读懂完整的数据流。如果你是内核开发者从src/raid1.c入手是最平滑的入门路径——它不涉及校验运算只有最简单的扇区映射。几个容易踩的坑先看完再动手1. WinMD不是文件系统驱动这是误解最深的一点。装完WinMD磁盘管理里出现卷但双击盘符可能提示需要格式化——这不是驱动坏了而是Windows没有对应文件系统驱动。按你的实际文件系统装好Ext2fsd或WinBtrfs数据就正常可见了。2. 新版Windows的驱动签名问题WinMD驱动是签名过的但微软对最新几个Windows 10版本的驱动签名要求提高了门槛该政策只对企业和个人区别对待。如果安装时报签名错误最直接的办法是在BIOS里暂时关闭Secure Boot装好后再开回来。3. 当前版本不支持写操作的高级功能README里明确列了待办reshape阵列重组、rebuild数据重建、degraded mounts降级挂载、以及从Windows侧创建新阵列都还没实现。也就是说阵列必须处于健康状态才能稳定使用。如果你想做的事是从一块坏盘的残留数据里抢救文件目前WinMD帮不上忙这类需求需要先在Linux侧用mdadm完成修复。4. 卸载方法从管理员命令行执行RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 winmd.inf给出winmd.inf的完整路径下次重启后驱动就会移除。不想立即卸载也可以把注册表里HKLM\SYSTEM\CurrentControlSet\services\winmd\Start的值改为4来禁用服务。什么时候该用它什么时候不该用根据我自己的使用经验WinMD最合适的场景是这三类数据迁移服务器下线或机房搬迁需要把数据搬进Windows环境一次性的读取拷贝这是它的主场双系统日常访问同一批盘在Linux和Windows间切换使用作为只读数据盘非常顺手临时救援Linux系统启动失败但盘本身健康用Windows环境把重要数据拷出来。但如果你的需求是管理而不是访问——扩容阵列、加盘、检查一致性、替换故障盘——那请回到Linux下用mdadm完成Windows这边目前只负责把健康的阵列呈现出来。这个边界搞清楚使用体验会顺畅很多。下一步从会用走向能看懂的几步路如果你只是想读数据上面的流程已经够了如果你是开发者想看看Windows内核驱动是怎么实现跨平台存储的我建议按这个顺序读源码先读src/winmd.h里mdraid_superblock这个结构体它就是你硬盘上真实存在的元数据布局再看src/raid1.c的write_raid1理解一次IO请求拆成N个子请求并等待全部完成的内核异步模型最后回到src/raid45.c体会跨条带读需要同时取数据和校验块的复杂性——你会发现RAID 5的读路径比RAID 1复杂了一个数量级。无论你属于哪类用户下一步动作其实都一样备份好你的Linux数据找一套测试盘按本文步骤装一遍WinMD在真实阵列上确认它能正确识别。数据这东西早验证早安心。【免费下载链接】winmdWinMD项目地址: https://gitcode.com/gh_mirrors/wi/winmd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价