Строительство многоэтажного, бесплатный инструментарий, который облегчает клонирование диска

Строительство многоэтажного, бесплатный инструментарий, который облегчает клонирование диска

18 июня 2025 г.

Здравствуйте, Hackernoon!

Это история о том, как мы построилиМногодрив-высокоскоростный инструментарий для управления дисками для Windows-здесь, в Atola Technology. Это началось как небольшая идея и превратилось в полнофункциональное приложение. Я хотел бы показать вам, как выглядит процесс изнутри - проблемы, с которыми мы столкнулись, и решения, которые мы должны были принять на этом пути.

Независимо от вашего опыта в программировании, эта статья станет для вас интересным приключением, так что давайте начнем!


Введение

В 2025 году, поскольку технология развивается быстрее, чем когда -либо, с новыми фреймворками, библиотеками и мощными инструментами искусственного интеллекта, появляющимися каждый день, программное обеспечение для письма стало проще, но программное обеспечение для создания качества по -прежнему является проблемой. Многие технические гиганты готовы инвестировать миллионы в наем лучших талантов в создание продуктов, которые являются гладкими и приятными в использовании. Тем не менее, технический долг продолжает расти, ошибки продолжают проскользнуть, а бесконечные горячие положения являются стандартом.

В моей карьере инженера -программиста у меня была возможность поработать в компании по продукту, которая доказала что -то важное:Чтобы создать действительно отличный продукт, вы должны быть вовлечены, любопытны и знать, что ваши идеи и вклад имеют значениеПолем Эта компания-Atola Technology-команда, которая создает передовые инструменты для цифровой криминалистики и восстановления данных, доверяя правоохранительным органам, государственным учреждениям и судебной лаборатории в более чем 90 странах.

Наша команда создала много доверенных инструментов для визуализации дисков, используемых профессионалами по всему миру. Но это продвинутые и часто дорогие системы, не предназначенные для повседневных задач, таких как резервное копирование диска.

В наши дни большинство программного обеспечения пытается как можно больше избежать аппаратных зависимостей. Это стало одной из наших ключевых идей при разработкеМногодривПолем Программа занимает небольшое пространство диска (~ 150 МБ), не требует какого -либо специального оборудования и работает прямо из коробки без настройки. Это быстро, интуитивно понятно и удобно-это стало основной философией проекта.


Обзор рынка

Прежде чем погрузиться в то, что делаетМногодривУникальный, это помогает понять, почему необходим простой, надежный дисковый инструмент.

Вот общий сценарий, с которым сталкиваются многие пользователи:

  • Клонируйте свой диск при обновлении вашей системы (привет SSD!)
  • Резервное копирование всего вашего диска, чтобы обеспечить безопасность важных файлов
  • Надежно стереть старый диск, прежде чем перепродать его

Если вы внимательно посмотрите на то, что уже было доступно на рынке, вы найдете самые популярные альтернативы в Windows, включающие Macrium Refert, Acronis, Aomei, Extusus, Carbon Copy Cloner на Mac и Clonezilla на Linux.

Ни один из них не является простым в использовании и на 100% бесплатно предоставлять задачи клона, стирания, резервного копирования / восстановления для ваших дисков. Согласно широко распространенным онлайн -обратной связи, людям нужно что -то, что работает, без платежей, подписок, рекламы или искусственных ограничений.

МногодривОтделяется от того, что он действительно свободен для задач основных дисков, предлагая бесплатный опыт, современный пользовательский интерфейс и параллельные операции прямо из коробки.


Разработка

Раннее развитие началось вВесна 2022С командой, состоящей из пяти инженеров -программистов, в том числе и меня в качестве ведущего, шести инженеров по обеспечению качества и одного менеджера по продукту.

Наша цель состояла не только в создании функционального прототипа, мы нацелились наМинимальный минимальный продуктПолем В современном мире есть бесчисленные MVP, и большинство из них выглядят и чувствуют то же самое. Мы хотели выделиться, предоставив то, что пользователям действительно понравится использовать с первого дня. Это означало сосредоточение внимания на качестве, производительности и чистого дизайна, даже в самой первой версии.

Рабочее стопку

Одним из первых и самых важных решений, которые мы должны были принять, был выбор основы для нашего настольного приложения. Поскольку вся наша команда работает сC# / .net, мы искали варианты, которые соответствуют этой экосистеме.

Сначала,WPF(Фонд презентации Windows) казался естественным выбором. Это мощная и гибкая система пользовательского интерфейса со многими встроенными компонентами и отличной документацией. Но была проблема-WPF работает только в Windows и не поддерживает другие платформы, поэтому он не соответствовал нашим будущим кроссплатформенным целям. Мы также думали об использованииМауиПолем Тем не менее, еще в начале 2022 года Мауи все еще находился в предварительном просмотре и еще официально не поддерживал Linux.

Тогда я предложилAvalonia framework-Крест-платформенный инструментарий пользовательского интерфейса с открытым исходным кодом для .NET, который работает в Windows, Linux и MacOS. Я использовал Avalonia раньше во время своих предыдущих проектов, поэтому я был уверен, что это может работать хорошо. Avalonia также обладает сильным сообществом и продолжает лучше с каждым днем. Вот почему мы выбрали это в качестве базы для нашего приложения.

Дополнительные инструменты

Для хранения данных мы выбралиLitedb- Легкая встроенная база данных NOSQL, которая идеально вписывается в настольные приложения. Он хранит данные в одном локальном файле, что позволяет легко управлять и развертывать. Мы используем его для сохранения метаданных задач, таких как пути файлов, прогресс, временные метки и статусы. Это позволяет пользователям возобновить резервное копирование именно там, где они остановились, и мгновенно просматривать историю своих задач, без каких -либо задержек или сложных настройков.

Чтобы убедиться, что все работает надежно в разных настройках, мы написали много модульных тестов, используяNUNITПолем Это помогло нам быстро поймать ошибки и сохранить основную логику, так как были добавлены новые функции. Для тестирования пользовательского интерфейса мы использовалиФлауи- Мощный инструмент для моделирования реальных действий пользователя, таких как кнопки нажатия и навигация по приложению. Это позволило нам автоматизировать полные сценарии и гарантировать, что пользовательский интерфейс ведет себя так, как ожидалось после каждого обновления.

Для командной версииМногодрив, мы использовалиSpectre.console, Это помогает создать богатые, интерактивные приложения CLI с отличным пользовательским опытом. Это позволило нам создать чистый интерфейс с цветным выводом, таблицами, панелями прогресса, подсказками и лучшими сообщениями об ошибках.


Архитектура

После выбора технического стека мы перешли к планированию архитектуры нашего приложения. Наша цель состояла в том, чтобы создать прочную основу для приложения, чтобы мы могли быстро вносить обновления, добавляя новые функции и улучшая рабочие процессы с минимальными усилиями.

Образец MVVM

Мы следовалиМодель-вив-ViewModelшаблон, который разбивает код на три части:МодельДля данных и бизнес -логикиВиддля макета пользовательского интерфейса и взаимодействия, а такжеViewModelкак мост между ними. MVVM - это широко используемый архитектурный шаблон в разработке настольных компьютеров .NET, который делает обслуживание, тестирование и повторное использование кода.

Avalonia позволяет очень легко следовать MVVM с самого начала. Вы пишете свой пользовательский интерфейс в XAML и просто связываете элементы управления со свойствами или командами в вашем ViewModel - что -то вродеText="{Binding SelectedDiskName}"илиCommand="{Binding SaveCommand}"Полем Под капотом, когда изменяется свойство ViewModel, система привязки Avalonia автоматически сообщает пользовательскому интерфейсу обновлять, поэтому вам никогда не придется писать дополнительный код «обновления». Это сохраняет ваш код пользовательского интерфейса аккуратным, и позволяет дизайнерам настраивать макеты XAML, не касаясь логики данных.

Инъекция зависимости

Чтобы сохранить нашу архитектуру чистой и гибкой, мы также добавили инъекцию зависимостей в начале проекта. Это означает, что вместо жесткой зависимости непосредственно в классах мы передаем их извне - обычно через конструкторы. С DI становится намного проще писать модульные тесты, обменять реализации (например, фиктивные услуги для тестирования) и управлять общей структурой приложения по мере его роста. Avalonia хорошо работает с популярными контейнерами .NET DI, поэтому настройка была простой.


Стиль и настройка

Затем мы сразу же обратили внимание на то, чтобы приложение выглядеть и чувствовать себя прекрасно. Мы хотели поддерживать и темные, и легкие темы, использовать чистые и современные компоненты и сделать все простым в использовании и настройке.

Что я любил работать надАтола Технологиянасколько продуктивны наши фокус -группы. Вы можете поднять идею, обсудить ее быстро и начать ее реализовывать - никаких долгих встреч или недель ожидания. Большинство компонентов были построены с нуля, чтобы они были совместно сочетаться с помощью дизайна и избежать накладных (дисково-дисковое пространство, производительность) сторонних библиотек.

Авалония

Чтобы добавить динамическую логику в XAML, мы создали многоРасширения разметки- Подобно директивам в угловых или метках помощников в Blazor. Это мощные инструменты для расширения пользовательского интерфейса чистым и гибким способом.

Вот как вы можете использовать это в размере XAML:

Еще одна удивительная особенность Авалонии - этоСелекторы стиля (CSS-подобные)Полем Они позволяют применять стили к элементам пользовательского интерфейса на основе их типа, состояния, класса, имени или положения в дереве зрения. Это дает вам большой контроль без написания кода-бензина.

Проект задания

Самая сложная часть пользовательского интерфейса-создать гладкий анимированный график, чтобы показать скорость резервного копирования в реальном времени. Он должен был часто обновляться, показывать точные значения с правильным усреднением и при этом хорошо выглядеть - все без перегрузки ЦП или памяти. Мы использовалиLiveCharts2Библиотека в качестве базы и поместите много индивидуальной работы, чтобы точно настроить плавную анимацию и обработку данных, что делает график как отзывчивым, так и легким.


Сырой диск доступ

Теперь мы добираемся до самой важной части - что на самом деле происходит за кулисами пользовательского интерфейса. В основе нашего низкоуровневого дискового взаимодействия являются прямымиВинапивызовы с использованиемP/invokeПолем

Этот подход дает нам мелкозернистый контроль над дисками, от отправки необработанных команд ввода-вывода до доступа к свойствам устройства, не полагаясь на сторонние обертки. Это также позволяет нам работать с дисками на уровне, где мы можем управлять разделениями и читать/записать секторы.

Мы хотели, чтобы резервные копии полного диска были космическими, поэтому мы решили сохранить их в качестве сжатых файлов ZIP. Это казалось простой решением - ZIP широко поддерживается и с ним легко работать. Но в начале мы столкнулись с проблемой: стандартСдуватьМетод сжатия был слишком медленным для больших резервных копий.

По умолчанию дефлятные запуска в одном потоке, который не использует в полной мере преимущества современных многоядерных процессоров. Для больших файлов это стало серьезным узким местом, а резервное копирование заняло больше времени, чем мы хотели. Чтобы исправить это, мы использовалиminizip-ngи переработал систему сжатия, чтобы работать параллельно. Мы разделили данные на куски и сжали каждый кусок, используя отдельные потоки. Это позволило нам значительно ускорить процесс, не изменяя окончательный формат ZIP.

Pause & Resume Challenge

Еще одна проблема, с которой мы столкнулись, - это добавление поддержки паузы и резюме во время резервных копий. Мы хотели, чтобы пользователи имели полный контроль, имели возможность остановить резервную копию в любое время и продолжить его позже, даже на следующий день, не начав все сначала.

Это может звучать просто, но на практике это означало тщательное отслеживание прогресса, безопасное написание частичных данных и обеспечение того, чтобы все могло точно понять, где он остановился. Нам пришлось разработать систему, которая была надежной и быстрой, не добавляя ненужную сложность для пользователя.

МногодривИмеет много умных, скрытых функций, которые вы обнаружите только во время регулярного использования. Одним из них является то, что он автоматически сканирует на диски в ОС каждые 5 секунд. Реализовать не просто, поскольку он должен быть согласован с дисками, используемыми при выполнении задач (не нужно сканировать) или некоторых других страниц приложений с их необходимыми деталями диска.DeviceCacherServiceэто один из классов, предназначенных для этого.


Тестирование

Как только у нас была готовая рабочая версия приложения, мы перешли на этап тестирования. Наша стратегия тестирования включала несколько этапов:

Внутреннее тестирование (6 месяцев):Обширное тестирование в различных аппаратных конфигурациях, от жестких дисков Legacy IDE до современных SSD NVME, различных конфигураций и различных рабочих систем Windows и операционных систем сервера.

Закрытая бета -программа (2 месяца):Мы пригласили 48 выбранных пользователей: специалистов по технологиям, системных администраторов и специалистов по восстановлению данных. Это было очень полезно, так как наши тестеры использовали программное обеспечение в реальных ситуациях, о которых мы не думали.

Ключевые идеи от бета -тестирования:

  • Пользователям нужна была лучшая визуальная обратная связь для длительных операций
  • Куча проблем UX была найдена и решена
  • Несколько ошибок, связанных с вводом/выводом, фиксированные из-за более широкого разнообразия компьютеров и дисков

Бета -программа привела к 7 серьезным улучшениям и помогла нам определить и исправить более 20 случаев края перед публичным выпуском.


Ключевые функции

Наша основная задача состояла в том, чтобы найти баланс между мощной функциональностью и простотой использования. Мы добавили наиболее необходимые и обычно используемые функции:

  • Резервная копия:Создайте резервную копию всего вашего диска или его частью в виде Zip или RAW. Обеспечить целостность данных с использованием хэша.
  • Клон:Создайте точные копии ваших дисков. Идеально подходит для обновления до лучшего диска или создания загрузочных резервных копий.
  • Восстановить:Восстановите полный диск или его детали из необработанного или ZIP -файла резервного копирования.
  • Стереть:Постоянно протрите полный диск или его детали безопасным методом вытирания. Укажите шестнадцатеричную шаблон, когда это необходимо.
  • CLI:Автоматизируйте дисковые операции с мощным CLI. Идеально подходит для системных администраторов и технических энтузиастов.
  • Параллельные операции:Запустите несколько дисковых операций одновременно, чтобы сэкономить время. Мониторинг прогресса с одной панели панели.

И если мы когда -нибудь представим премиальную версию в будущем, будьте уверены, что все текущие функции, на которые вы полагаетесь, останутся свободными навсегда!


Выпускать

Многодривбыл официально запущен на14 апреля 2025 годаПолем В этот незабываемый день мы наконец -то сделали прыжок.

Мы не просто запустили продукт. Мы запустили миссию - чтобы предоставить людям бесплатные инструменты для контроля их данных. Независимо от того, поддерживаете ли вы драгоценные воспоминания, клонирование дисков в случае сбоя сервера или уничтожение старых, но конфиденциальных файлов, Multidrive здесь, чтобы защитить то, что важнее всего.

Приложение было тепло приветствованоAvalonia frameworkсоздатели и добавлены вОфициальная витрина!

Это не заняло много времени, чтобы приветствовать нашу первую1000Пользователи - четкий признак того, что существует реальный спрос на лучшее решение. Все началось с простой идеи - управление данными должно быть простым, бесплатным и безопасным. С тех пор мы строили больше, чем просто программное обеспечение - мы укрепляем доверие.


Об авторе

Олег Дубовой-опытный инженер программного обеспечения, вкладчик с открытым исходным кодом и создатель его контента с практическим опытом в разработке настольных компьютеров, кибербезопасности и системах в реальном времени. Увлечен созданием чистого, эффективного программного обеспечения и обмену практическими знаниями с сообществом разработчиков.

Соединять:LinkedIn | GitHub | Dev.to


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE