Как стать автором
Обновить

Синхронизация RAM диска с HDD

Время на прочтение4 мин
Количество просмотров2.1K
Используете RAM диск для приложений? Неудобно копирование данных на него после загрузки? Боитесь потерять данные с RAM диска при Windows BSOD или внезапном выключении электричества?

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

Топик про маленькую «тулзу», которая поможет поддерживать актуальные данные на RAM диске всегда в сохраности. Независимо от того как завершилась ваша сессия в Windows.
Если точнее, почти всегда.



Некоторое время назад, я наконец-то обновил свой ноутбук и поставил 8GB оперативной памяти. Это мне и дало возможность реализовать свою давнейшую мечту окончательно отключить swap в Windows и перенести Opera на виртуальный диск, созданный в RAM.
Возникла проблема, найденые мной подходы, предлагали восстановление данный на RAM диске при загрузке ОС или при запуске приложения. А сохранение данных этого же диска при shutdown или закрытии приложения. Ни один из вариантов мне лично не подходил по иделогическим соображениям. В итоге получилась простая но крайне полезная «тулза» для «realtime» синхронизации между директориями на HDD (в моем случае SSD) и RAM диском.
Особеность собственной «тулзы» в том что она может realtime отражать изменения с RAM диска на оригинальный каталог на HDD где хранится оригинальный образ директории. При этом «тулза» умеет сихронизировать изменения с задержкой, дабы объединять изменения в группы и сразу их применить, а не постояно мучать диск как это любят делать браузеры во время своей работы :)

Что понадобиться:
1. Что-то для создания RAM Disk (я пользуюсь RamdDisk Plus платная но на мой взгляд стоит своего, особено если у Вас 32битная Windows а памяти больше 3GB, еще на хабре встречал ссылку на статью)
2. Скомпилированная тулза (ссылка в конце) или ее исходники, что бы скомпилировать самостоятельно

Предупреждение: все что вы делаете, вы делаете на свой страх и риск.

Написана на C#, тестируется лично мной в течении недели. Нареканий нет. Я разместил ярлык на нее в «Автозагрузке».

Работает «тулза» по принципам:
1. По заданым в конфиге исходным директориям ожидается их появление (я слегка параноик, поэтому большинство доступного у меня монтируется после загрузки из truecrypt контейнеров и партишенов)
2. Как только исходная директория появится, все её содержимое копируется в директорию получатель (копирование выборочное, в том смысле, что копируется и заменяется всё стырое или отсутсующее в директории получателе, при этом если в ней найдутся файлы более новые, они копируются в исходную директорию).
3. Мониторятся изменения в директории получателе на RAM диске и они с заданой задержкой применяются к исходной директории: изменение, удаление и переименование файлов и папок. При этом есть возможность задания задержки по маске. Например для Opera у меня стоит что применять изменения для profile/cache раз в 30 минут, profile/sessions/autosave.win раз в 30 секунд, для profile/wand.dat раз в 1 секунду.
4. При выходе из «тулзы» просиходи синхронизация всех изменений окончательно.

Конфигурация описывается просто в xml конфиге, интерфейс ни очем: иконка в трее и окошко (по умолчанию скрыто), в котором ведется лог работы. Конфиг лежит в тойже директории где и программа и имеет имея «RamSync.config.xml» (да плохо держать конфиг там-же где и установлена программа, я знаю, но мне так проще для сохранения собственых конфигов и разработок, которыми пользуюсь ежедневно, и обновляю часто для самого себя)

Для примера приведу конфигурационый файл с описанием синхронизации для Opera:
<?xml version="1.0" encoding="utf-8"?>
<AppConfig>
 <PulseTime>00:02:00</PulseTime>
 <StartupWait>00:00:05</StartupWait>
 <SyncDirs>
  <SyncDirRule>
   <DisplayName>Opera 10</DisplayName>
   <SourceDir>w:\Program Files\Opera10</SourceDir>
   <DestinationDir>r:\Opera10</DestinationDir>
   <DefaultDelay>00:04:00</DefaultDelay>
   <DelayRules>
    <Rule mask="profile\sessions\autosave.win" delay="00:00:30" />
    <Rule mask="profile\bookmarks.adr" delay="00:00:30" />
    <Rule mask="profile\wand.dat" delay="00:00:01" />
    <Rule mask="profile\cache\*" delay="00:30:00" />
   </DelayRules>
  </SyncDirRule>
 </SyncDirs>
</AppConfig>


* This source code was highlighted with Source Code Highlighter.


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

К сожалению я не очень разбираюсь в лицензиях.
Если нельзя выкладывать скомпилированый проект с использованием Visual Studio 2010 Express Edition, скажите, удалю линк.
Кроме того, иконки для трея используются из Android SDK.

Готовая к употреблению «тулза» RamSync-bin.zip и ее исходники RamSync-src.zip.
Теги:
Хабы:
Всего голосов 12: ↑4 и ↓8-4
Комментарии9

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
14 сентября
Конференция Practical ML Conf
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн