MultiDrive背后的故事
Dev.to社区的各位朋友,大家好!
这就是我们在 Atola Technology 开发MultiDrive——一款适用于 Windows 的高速磁盘管理工具包——的故事。它最初只是一个小小的想法,最终发展成为一款功能齐全的应用程序。我想从内部视角向大家展示整个开发过程——我们一路走来所面临的挑战和必须做出的决策。
无论你是否有编程经验,这篇文章对你来说都将是一次有趣的冒险,那么让我们开始吧!
介绍
展望2025年,随着科技以前所未有的速度发展,新的框架、库和强大的AI工具层出不穷——编写软件变得更加容易,但构建高质量的软件仍然是一项挑战。许多科技巨头准备投入数百万美元聘请顶尖人才,以打造流畅易用的产品。然而,技术债务仍在不断增长,漏洞层出不穷,永无止境的紧急修复已成为常态。
在我作为软件工程师的职业生涯中,我有幸在一家产品公司工作,这家公司证明了一个重要的道理:要打造真正优秀的产品,你需要积极参与、充满好奇心,并且明白你的想法和贡献至关重要。这家公司就是 Atola Technology——一个致力于开发尖端数字取证和数据恢复工具的团队,其产品深受 90 多个国家/地区的执法机构、政府部门和法医实验室的信赖。
我们的团队开发了许多值得信赖的磁盘映像工具,供世界各地的专业人士使用。但这些都是高级且通常价格昂贵的系统,并非为备份磁盘等日常任务而设计。
如今,大多数软件都力求尽可能避免对硬件的依赖。这成为我们开发MultiDrive时的核心理念之一。该程序占用磁盘空间极小(约 150 MB),无需任何特殊硬件,开箱即用,无需任何设置。它快速、直观且用户友好——这成为该项目的核心理念。
市场概览
在深入了解MultiDrive 的独特之处之前,首先需要了解为什么需要一款简单可靠的磁盘工具。
以下是许多用户都会遇到的常见场景:
- 升级系统时(固态硬盘万岁!)请克隆您的硬盘。
- 备份整个硬盘,确保重要文件安全
- 在转售旧硬盘之前,请务必安全地擦除硬盘上的所有数据。
如果你仔细查看一下市场上已有的产品,你会发现 Windows 系统上最受欢迎的替代方案包括 Macrium Reflect、Acronis、AOMEI、EaseUS、Mac 系统上的 Carbon Copy Cloner,以及 Linux 系统上的 Clonezilla。
这些软件都不容易上手,而且没有一款能完全免费提供硬盘克隆、擦除、备份/恢复等功能。根据网上广泛的反馈,人们需要的是一款开箱即用、无需付费、订阅、没有广告、也没有人为限制的软件。
MultiDrive 的独特之处在于它对核心磁盘任务完全免费,提供无广告体验、现代化的用户界面以及开箱即用的并行操作功能。
发展
早期开发工作于2022 年春季开始,团队由五名软件工程师(包括我本人担任负责人)、六名质量保证工程师和一名产品经理组成。
我们的目标不仅仅是构建一个功能原型,而是打造一款最小可行产品(MVP)。如今,MVP层出不穷,但大多数都千篇一律。我们希望脱颖而出,打造一款用户从第一天起就能真正乐于使用的产品。这意味着,即使在第一个版本中,我们也注重质量、性能和简洁的设计。
桌面框架
我们首先要做的也是最重要的决定之一,就是为我们的桌面应用程序选择一个框架。由于我们整个团队都使用C# / .NET,所以我们寻找的是能够融入该生态系统的框架。
起初,WPF(Windows Presentation Foundation)似乎是最佳选择。它是一个功能强大且灵活的 UI 系统,拥有众多内置组件和完善的文档。但问题在于——WPF 仅适用于 Windows 系统,不支持其他平台,因此无法满足我们未来的跨平台目标。我们也考虑过使用MAUI。然而,在 2022 年初,MAUI 仍处于预览阶段,尚未正式支持 Linux。
于是我推荐了Avalonia Framework——一个开源的、跨平台的 .NET UI 工具包,可在 Windows、Linux 和 macOS 上运行。我之前在项目中使用过 Avalonia,所以相信它能很好地满足需求。Avalonia 还拥有强大的社区,并且每天都在不断改进。这就是我们选择它作为应用程序基础框架的原因。
其他工具
为了存储数据,我们选择了LiteDB——一个轻量级的嵌入式 NoSQL 数据库,它非常适合桌面应用程序。LiteDB 将数据存储在单个本地文件中,便于管理和部署。我们用它来保存任务元数据,例如文件路径、进度、时间戳和状态。这使得用户可以从上次中断的地方继续备份,并立即浏览任务历史记录,无需任何延迟或复杂的设置。
为了确保所有功能在不同的环境下都能可靠运行,我们使用NUnit编写了大量的单元测试。这帮助我们快速发现 bug,并在添加新功能的同时保持核心逻辑的稳定性。对于 UI 测试,我们使用了FlaUI——一个强大的工具,可以模拟真实的用户操作,例如点击按钮和浏览应用。这使我们能够自动化完整的端到端测试场景,并确保用户界面在每次更新后都能按预期运行。
对于MultiDrive的命令行版本,我们使用了Spectre.Console,它有助于构建功能丰富、交互性强且用户体验极佳的 CLI 应用程序。它使我们能够创建简洁的界面,包含彩色输出、表格、进度条、提示符和更清晰的错误信息。
建筑学
选定技术栈后,我们开始规划应用程序的架构。我们的目标是为应用程序构建一个坚实的基础,以便能够快速发布更新,以最小的投入添加新功能并改进工作流程。
MVVM模式
我们遵循模型-视图-视图模型(MVVM)模式,该模式将代码分为三个部分:模型(Model)用于数据和业务逻辑,视图(View )用于用户界面布局和交互,视图模型(ViewModel)则作为两者之间的桥梁。MVVM 是 .NET 桌面开发中广泛使用的架构模式,它极大地简化了维护、测试和代码重用。
Avalonia 让您从一开始就能轻松遵循 MVVM 模式。您只需在 XAML 中编写 UI,然后将控件绑定到 ViewModel 中的属性或命令(例如 `<properties>`Text="{Binding SelectedDiskName}"或 ` <command> Command="{Binding SaveCommand}"`)。在底层,当 ViewModel 属性发生变化时,Avalonia 的绑定系统会自动通知 UI 更新,因此您无需编写额外的“更新”代码。这使您的 UI 代码保持简洁,并允许设计人员在不修改数据逻辑的情况下调整 XAML 布局。
依赖注入
为了保持架构的简洁性和灵活性,我们在项目早期就引入了依赖注入(DI)。这意味着我们不再直接在类中硬编码依赖项,而是从外部传入——通常是通过构造函数。有了 DI,编写单元测试、替换实现(例如,用于测试的模拟服务)以及随着应用程序的增长管理其整体结构都变得更加容易。Avalonia 与流行的 .NET DI 容器兼容性良好,因此配置过程非常简单。
造型与定制
接下来,我们立即将重点放在提升应用的视觉和用户体验上。我们希望同时支持深色和浅色主题,使用简洁现代的组件,并让所有功能都易于使用和配置。
在Atola Technology工作最让我喜欢的一点就是我们高效的焦点小组。你可以提出想法,快速讨论,然后立即开始实施——无需冗长的会议或数周的等待。大多数组件都是从零开始构建的,这样在设计上就能无缝衔接,避免第三方库带来的额外开销(磁盘空间、性能)。
阿瓦隆尼亚特色
为了向 XAML 添加动态逻辑,我们创建了许多标记扩展——类似于 Angular 中的指令或 Blazor 中的标签助手。这些强大的工具能够以简洁灵活的方式扩展 UI。
以下是如何在 XAML 标记中使用它的方法:
Avalonia 的另一个强大功能是样式选择器(类似 CSS)。它允许您根据 UI 元素的类型、状态、类、名称或在视觉树中的位置来应用样式。这让您无需编写代码即可实现强大的控制。
设计挑战
UI 设计中最难的部分是构建一个流畅的动画图表来实时显示备份速度。它必须频繁更新,显示准确的数值并进行适当的平均处理,同时还要美观——所有这些都不能占用过多 CPU 或内存资源。我们以LiveCharts2库为基础,并进行了大量自定义工作来优化流畅的动画和数据处理,最终使图表既响应迅速又轻量级。
原始磁盘访问
现在我们来到了最重要的部分——用户界面背后实际发生的情况。我们底层磁盘交互的核心是使用P/Invoke直接调用WinAPI。
这种方法使我们能够对磁盘进行精细控制,从发送原始 I/O 命令到访问设备属性,所有操作都无需依赖第三方封装库。它还允许我们在磁盘级别上进行操作,从而管理分区和读写扇区。
我们希望全盘备份能够节省空间,因此选择将其存储为压缩的 ZIP 文件。这看似是一个简单的解决方案——ZIP 格式广泛支持且易于使用。但很快我们就遇到了一个问题:标准的Deflate压缩方法对于大型备份来说速度太慢。
Deflate 默认以单线程运行,无法充分利用现代多核处理器的性能。对于大型文件,这成为了严重的瓶颈,导致备份时间超出预期。为了解决这个问题,我们使用了minizip-ng并重构了压缩系统,使其能够并行运行。我们将数据分割成多个块,并使用单独的线程对每个块进行压缩。这样一来,我们能够在不改变最终 ZIP 格式的前提下,显著提升压缩速度。
暂停与恢复挑战
我们面临的另一个挑战是添加备份过程中暂停和恢复功能。我们希望用户拥有完全的控制权,能够随时停止备份,并在稍后(甚至第二天)继续备份,而无需重新开始。
这听起来很简单,但实际上,这意味着要仔细跟踪进度,安全地写入部分数据,并确保所有操作都能从中断的地方无缝衔接。我们必须设计一个既可靠又快速的系统,同时还要避免给用户增加不必要的复杂性。
MultiDrive拥有许多巧妙的隐藏功能,只有在日常使用中才能发现。其中一项功能是它每 5 秒自动扫描操作系统中的驱动器。这项功能的实现并不简单,因为它必须与正在运行的任务(无需扫描)中使用的驱动器或其他应用程序页面及其所需的驱动器详细信息相匹配。DeviceCacherService就是为此而设计的类之一。
测试
应用程序的可用版本完成后,我们就进入了测试阶段。我们的测试策略包括多个阶段:
内部测试(6 个月):对不同的硬件配置进行了广泛的测试,从传统的 IDE HDD 到现代的 NVMe SSD,各种配置,以及不同的 Windows 桌面和服务器操作系统。
封闭测试计划(2个月):我们邀请了48位精选用户参与,包括技术专业人员、系统管理员和数据恢复专家。这非常有帮助,因为我们的测试人员在实际场景中使用该软件,而这些场景是我们之前没有想到的。
Beta 测试的主要发现:
- 用户需要更好的视觉反馈以应对长时间运行的操作
- 发现并解决了一系列用户体验问题。
- 由于计算机和驱动器的种类更加广泛,修复了几个与 I/O 相关的错误。
测试版计划带来了 7 项重大改进,并帮助我们在公开发布前识别和修复了 20 多个极端情况。
主要特点
我们面临的主要挑战是如何在强大的功能和易用性之间找到平衡。我们添加了最必要和最常用的功能:
- 备份:创建整个硬盘或其部分区域的备份,格式可以是 ZIP 或 RAW。使用哈希值确保数据完整性。
- 克隆:创建硬盘的精确副本。非常适合升级到更好的硬盘或创建可启动备份。
- 恢复:从 RAW 或 ZIP 备份文件恢复整个驱动器或其部分内容。
- 擦除:使用安全擦除方法永久擦除整个驱动器或其部分内容。必要时可指定十六进制图案。
- CLI:使用功能强大的命令行界面 (CLI) 实现磁盘操作自动化。非常适合系统管理员和技术爱好者。
- 并行操作:同时运行多个磁盘操作以节省时间。通过单个控制面板监控进度。
如果将来我们推出高级版,请放心,您目前使用的所有功能将永远免费!
发布
MultiDrive于2025年4月14日正式发布。在这个难忘的日子里,我们终于迈出了这一步。
我们推出的不仅仅是一款产品,更是一项使命——为用户提供免费工具来掌控自己的数据。无论您是备份珍贵回忆、在服务器崩溃时克隆硬盘,还是擦除旧的敏感文件,MultiDrive 都能保护您最珍视的一切。
该应用受到了Avalonia Framework创建者的热烈欢迎,并被添加到官方展示中!
我们很快就迎来了首批1000名用户——这清楚地表明市场对更佳解决方案有着真正的需求。一切都始于一个简单的理念:数据管理应该简单、免费且安全。自那时起,我们打造的不仅仅是软件,更是信任。
作者简介
Oleg Dubovoi是一位经验丰富的软件工程师、开源贡献者和 IT 内容创作者,在桌面开发、网络安全和实时系统方面拥有丰富的实践经验。他热衷于构建简洁高效的软件,并与开发者社区分享实用知识。
联系方式: LinkedIn | GitHub | Dev.to | Hackernoon












