失落阵列的掠夺者:为我孤儿般的Drobo编写macOS驱动程序
免责声明:我不知道我所做的一切是否合法。事实上,我在硬件黑客方面并没有任何深入的知识。免责声明2:虽然我这么愚蠢和懒惰,以至于会用LLM来自动制作咖啡——(哎呀!)并且,偶尔用LLM写代码;但这篇文章完全是由人类编写的,几乎没有经过LLM的校对。此免责声明适用于此博客上的所有进一步写作。我是在2021年开始这个网站的,却从未花时间实际上在博客上写过任何东西。“迟到总比不到好”,我想。所以,来吧……今天,受到一个HN提交的启发,标题为“Claude为我那只仅为Windows构建的冷门HP打印机编写macOS驱动程序”,我想到了我可靠的Drobo 5D,一个RAID阵列,在过去的14年里一直无缝保存和提供我的文件(除了在2019年左右发生的“电源适配器故障”事件)。Drobo已经停止运营,而即将发布的macOS 27“金门大桥”是最后一个支持Rosetta 2的版本,这意味着部分软件套件将不再与未来的macOS版本兼容——而且这个版本的生活质量提升让我无法放弃。由于生病而被困在家中,我想:“为什么不让Claudio来处理呢?”这是那次冒险的记录。首先,是提示¶ 这家公司“Drobo”已经停止运营(见 https://petapixel.com/2023/06/06/drobo-is-officially-done-as-the-company-moves-into-liquidation/)。我拥有一台“Drobo 5D”,通过USB 3连接到我的Mac(Thunderbolt 2端口在新型号Mac上无法使用)——这在我运行macOS Ventura(13)的2017年iMac上仍然可以工作。Drobo本身和Drobo Dashboard软件仍然可以使用。在较新的macOS版本上,Drobo Dashboard软件不再兼容,而Drobo只能作为外部驱动器挂载。出于生态原因,我的目标是尽可能长时间地使用此设备,但不想被“锁定”在macOS(或Mac硬件)升级之外。你今天的任务是分析当前的Drobo 5D固件和Drobo Dashboard软件,尝试理解为什么它与较新的macOS版本不兼容,是什么可能阻止硬件在新款Mac硬件上工作,并想出一个解决方案来修复此问题。所有方案均可:从简单的修复到完全重写驱动程序和Drobo Dashboard以适应现代Mac/macOS。注意:我已在/Users/fetzu/Dev/ReDrobo/ZZ_BUFFER文件夹中提供了一些Drobo驱动程序和Drobo Dashboard的先前(直到最新)版本。请随意使用这些文件,但请尽量避免在此Mac上安装它们(我认为你不能)。提示的构成非常简单:我提供上下文(希望不会因网络安全/逆向工程而被标记,多么天真的想法),阐明任务并向Claude提供这两个软件的最后5个版本(包括单独PDF中的版本说明。感谢这位圣人花时间上传和索引这些文件。)。将提示放入Fable 5高档版本(因为,为什么不呢?)并被自动标记并切换到Opus 4.8。我决定在那儿打断它,打开一个新的Opus 5 Max会话——我们开始得快。第二,计划¶ 思考了一会并摆弄了一下驱动程序/Drobo Dashboard二进制文件后,Claude想出了一个5个阶段的计划。作为一个好的工程师,Claude从0开始计数:“首先保护数据”(当然),“验证协议”(通过比较带有驱动的设备(我2017年的iMac运行macOS 13)与没有驱动的设备(我运行macOS 26的MacBook Pro M5 Pro)之间的数据输出)。“解码记录负载”(意图是验证并输出协议规范)“提供可用的CLI”(输出Drobo Dashboard通常会输出的信息)“实时驱动程序”(一个真正的Drobo Dashboard替代品) 计划看起来相当合理,我们来深入研究…… 第1阶段:将Drobo连接到我的MacBook Pro¶ 我知道这样做会有效(卷正确挂载并可读可写,但报告了错误的大小,并且不给用户提供有关卷/阵列/驱动器当前状态的信息),Claude写了一个巧妙的C实用程序叫做droboprobe,用于在插入后探测设备。Claude让我先在Drobo Dashboard中截图当前的Drobo 5D状态(好人,我不喜欢打字)。这个阶段使Claude能够确认设备在工作,但确实报告错误的卷大小。 总共使用 免费 Dashboard(iMac) 5.42 TB 4.25 TB 1.17 TB macOS(此处) 17.6 TB 4.7 TB 12.9 TB 但,还有一个“坏消息”:坏消息,我之前搞错了¶ SCSITaskUserClient不适用于Drobo。IOCreatePlugInInterfaceForService返回kIOReturnUnsupported。此Mac上没有服务发布SCSITaskDeviceCategory——初始化程序在每个SCSI nub上保留了一个匹配类别,但从未真正启动。原因一直在Apple自己的头文件中:
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡