Как синхронизировать Obsidian бесплатно
Недавно я начала использовать Obsidian для организации всех своих заметок и переноса моего Bullet Journal в электронный формат.
Obsidian во многих аспектах схож с Notion, но предлагает ряд уникальных возможностей, что смогли подкупить меня.
Во-первых, Obsidian хранит все заметки на вашем устройстве, обеспечивая большую приватность и контроль над вашими данными. У меня уже был неприятный опыт использования облачных сервисов, которые закрывались в самый неподходящий момент, удаляя все мои данные без возможности экспорта.
Во-вторых, Obsidian использует простой Markdown для форматирования и создания ссылок между заметками. Раньше я хранила свою базу знаний в CherryTree, и, хотя по своей сути он также хранит все данные локально, я так и не дождалась появления альтернативного клиента для взаимодействия со своими заметками (чего мне очень не хватало на телефоне). От части виной этому могла послужить малая популярность программы и хранение заметок в бинарном формате. С Obsidian же все ровно наоборот. Даже если бы под мою операционную систему не было бы версии Obsidian’а — всегда можно было бы отредактировать или просмотреть свои заметки в обыкновенном текстовом редакторе!
В-третьих, Obsidian прекрасно подходит для создания и визуализации связей между заметками благодаря мощному функционалу графов. Это способствует созданию и поддержанию структурированного хаба знаний, в котором легко найти нужную информацию. В отличие от этого, Notion больше фокусируется на структурировании контента с помощью блоков, таблиц и баз данных.
Некоторое время назад я попробовала использовать Notion для создания собственной базы знаний, но результат меня разочаровал. Меня жутко бесила необходимость постоянного интернет-соединения для полноценной работы с Notion, а также ужасно медленная работа интерфейса, свойственная богомерзким веб-приложениям, что пытаются мимикрировать под десктопные, благодаря электрону (к сожалению, Obsidian тоже является таковым, но работает значительно быстрее). Кроме того, мне регулярно приходится сталкиваться с Notion на работе, поскольку наша команда использует его для Kanban-подхода к выполнению задач.
В Obsidian есть встроенная система синхронизации между устройствами, однако она платная и стоит довольно дорого. Если мне не изменяет память, это 12 долларов в месяц, что, на мой взгляд, слишком много за возможность синхронизации данных между устройствами.
Так как Obsidian хранит заметки в виде файлов, очевидно сразу же на ум приходит использование какого-нибудь облачного хранилища для синхронизации данных.
Ранее я использовала Яндекс.Диск для подобных целей, поскольку имею на нем несколько сотен гигабайт свободного пространства. Однако их приложение оставляло желать лучшего: несколько раз оно уничтожало мои данные и потребляло немыслимые количества ресурсов при синхронизации сотен тысяч мелких файлов.
Понятно, что можно рассмотреть такие варианты, как прямое подключение одного устройства к другому, и ручной синхронизации данных между ними (например телефона по проводу к компьютеру), или использование каких-то носителей информации, тех же флешек, но это крайне утомительно (Пусть и наиболее безопасно).
Где-то в 2019 году я познакомилась с такой программой как Resilio Sync, а спустя некоторое время, перешла на его свободный аналог — Syncthing. Если вы знакомы с UNIX, то вам должна быть знакома утилита rsync, которая позволяет синхронизировать содержимое директории на вашем компьютере с удаленным устройством. По сути, эти программы являются логическим продолжением rsync и позволяют синхронизировать данные автоматически. Сразу скажу, что Syncthing работает лучше, для того чтобы вы не тратили свое время на более популярный аналог в лице Resilio Sync (Который ещё и денег просит, лол).
Казалось бы, просто возьми и подключи свои устройства в единую Syncthing-сеть, и расшарь между ними свое хранилище заметок. Но не тут-то было!
Почему нельзя просто использовать голый Syncthing?
Где-то с месяц я возилась с различными настройками синхронизации, для того чтобы добиться наиболее бесшовного результата.
Во-первых, первым открытием для меня стало то, что стандартное значение
<maxConflicts>10</maxConflicts>
в настройках вашей директории приводит к дублированию контента в вашем хранилище. Поэтому настоятельно советую устанавливать это значение в 0 на каждом из ваших устройств. Эта настройка применяется для каждой директории отдельно в конфигурационном файле config.xml.
Особенно сложно это сделать на мобильном устройстве, потому что для изменения этой настройки — необходимо совершить целый обряд!
- Открыть Syncthing на телефоне (я рекомендую использовать клиент Syncthing-Fork)
- Нажать на гамбургер-меню
- Перейти в настройки
- Выбрать пункт: «Импорт и экспорт»
- Экспортировать конфигурацию
- Открыть файловый менеджер на вашем телефоне
- Перейти в директорию:
/storage/emulated/0/backups/syncthing
- Найти файл «config.xml»
- Открыть его через текстовый редактор и внести изменения
- Сохранить файл
- Вернуться в Syncthing
- Нажать «Импортировать конфигурацию»
И только тогда необходимые изменения будут внесены! Удобно? Мне тоже так кажется, но что поделать...
И вот, вы на радостях пытаетесь синхронизировать свою папку с заметками уже не с двумя, а с большим числом устройств — как вдруг, внезапно обнаруживаете, что последние версии файлов периодически пропадают...
Причиной этому служит состояние гонки — это ситуация в многопоточных или параллельных системах, когда поведение системы зависит от того, в каком порядке выполняются операции. В результате возникает непредсказуемость и неконтролируемые ошибки.
Проще говоря, представьте, что два человека одновременно пытаются изменить один и тот же документ. Если они делают это в разное время, то нет проблемы, и изменения будут вноситься последовательно. Но если они попытаются сделать это одновременно, то возникнет конфликт, и результат зависит от того, чьи изменения были внесены первыми. Это и есть состояние гонки.
Как же мне удалось решить эту проблему, спросите вы? Я создала отдельный сервер для координации Syncthing.
Найдя хорошую сделку на барахолке, я приобрела довольно неплохой компьютер, всего за какие-то жалкие 30 долларов. Этот компьютер представлял собой офисный ПК на чипсете B75 с процессором Pentium G2120 (Что на архитектуре Ivy Bridge), 4 ГБ оперативной памяти DDR3 и жестким диском на 1 ТБ. В будущем я увеличу объем оперативной памяти, и добавлю больше дисков в систему, благо материнская плата обладает 6-ю портами SATA-III. Благодаря относительно современному процессору из нижнего ценового сегмента, система потребляет крайне мало электроэнергии, а из минусов — заметно гудит из-за тонкого корпуса и недорогого блока питания с блоком питания на подшипнике скольжения, без поддержки регуляции оборотов.
На него я установила операционную систему Rocky Linux 9.1 (в отличие от более популярного Alma Linux, он полностью бинарно совместим с Red Hat Enterprise Linux 9.1), что позволяет использовать привычную корпоративную инфраструктуру без необходимости думать о лицензии.
Кроме того, был установлен вспомогательный софт, включая Syncthing.
Так как предполагается, что на этом сервере не будут вноситься изменения в данные, я установила права на каждую директорию в режим Receive Only, чтобы предотвратить повреждение данных в случае отказа жесткого диска (пока что RAID я не использую из-за наличия только одного жесткого диска в системе). Возможно, позже я переустановлю систему на FreeBSD, чтобы воспользоваться преимуществами Z-RAID массивов, но это потребует апгрейда как дисковой подсистемы, так и увеличения объёма оперативной памяти.
Все остальные устройства я настроила на синхронизацию исключение с этим сервером. Это позволило полностью избавиться от состояния гонки.