☝🏻 Подняться в начало
Фото аватара

Как синхронизировать Obsidian бесплатно

Недавно я начала использовать Obsidian для организации всех своих заметок и переноса моего Bullet Journal в электронный формат.

Как синхронизировать Obsidian бесплатно
Мой Bullet Journal

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

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

Во-вторых, Obsidian использует простой Markdown для форматирования и создания ссылок между заметками. Раньше я хранила свою базу знаний в CherryTree, и, хотя по своей сути он также хранит все данные локально, я так и не дождалась появления альтернативного клиента для взаимодействия со своими заметками (чего мне очень не хватало на телефоне). От части виной этому могла послужить малая популярность программы и хранение заметок в бинарном формате. С Obsidian же все ровно наоборот. Даже если бы под мою операционную систему не было бы версии Obsidian’а — всегда можно было бы отредактировать или просмотреть свои заметки в обыкновенном текстовом редакторе!

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

Как синхронизировать Obsidian бесплатно
Представление записей в виде графа в Obsidian

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

Как синхронизировать Obsidian бесплатно
Electron — очень расстраивает меня 😔

В Obsidian есть встроенная система синхронизации между устройствами, однако она платная и стоит довольно дорого. Если мне не изменяет память, это 12 долларов в месяц, что, на мой взгляд, слишком много за возможность синхронизации данных между устройствами.

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

Ранее я использовала Яндекс.Диск для подобных целей, поскольку имею на нем несколько сотен гигабайт свободного пространства. Однако их приложение оставляло желать лучшего: несколько раз оно уничтожало мои данные и потребляло немыслимые количества ресурсов при синхронизации сотен тысяч мелких файлов.

Как синхронизировать Obsidian бесплатно
В своё время мне очень повезло, иметь установленную версию клиента Яндекс.Диск, когда там обнаружилась критическая уязвимость.

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

Где-то в 2019 году я познакомилась с такой программой как Resilio Sync, а спустя некоторое время, перешла на его свободный аналог — Syncthing. Если вы знакомы с UNIX, то вам должна быть знакома утилита rsync, которая позволяет синхронизировать содержимое директории на вашем компьютере с удаленным устройством. По сути, эти программы являются логическим продолжением rsync и позволяют синхронизировать данные автоматически. Сразу скажу, что Syncthing работает лучше, для того чтобы вы не тратили свое время на более популярный аналог в лице Resilio Sync (Который ещё и денег просит, лол).

Казалось бы, просто возьми и подключи свои устройства в единую Syncthing-сеть, и расшарь между ними свое хранилище заметок. Но не тут-то было!

Почему нельзя просто использовать голый Syncthing?

Где-то с месяц я возилась с различными настройками синхронизации, для того чтобы добиться наиболее бесшовного результата.

Во-первых, первым открытием для меня стало то, что стандартное значение

<maxConflicts>10</maxConflicts>

в настройках вашей директории приводит к дублированию контента в вашем хранилище. Поэтому настоятельно советую устанавливать это значение в 0 на каждом из ваших устройств. Эта настройка применяется для каждой директории отдельно в конфигурационном файле config.xml.

Особенно сложно это сделать на мобильном устройстве, потому что для изменения этой настройки — необходимо совершить целый обряд!

  1. Открыть Syncthing на телефоне (я рекомендую использовать клиент Syncthing-Fork)
  2. Нажать на гамбургер-меню
  3. Перейти в настройки
Как синхронизировать Obsidian бесплатно
Настройка Syncthing на Android
  1. Выбрать пункт: «Импорт и экспорт»
  2. Экспортировать конфигурацию
  3. Открыть файловый менеджер на вашем телефоне
  4. Перейти в директорию:
/storage/emulated/0/backups/syncthing
  1. Найти файл «config.xml»
  2. Открыть его через текстовый редактор и внести изменения
  3. Сохранить файл
  4. Вернуться в Syncthing
  5. Нажать «Импортировать конфигурацию»

И только тогда необходимые изменения будут внесены! Удобно? Мне тоже так кажется, но что поделать...

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

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

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

Как же мне удалось решить эту проблему, спросите вы? Я создала отдельный сервер для координации Syncthing.

Как синхронизировать Obsidian бесплатно
neofetch моего нового сервера для синхронизации данных

Найдя хорошую сделку на барахолке, я приобрела довольно неплохой компьютер, всего за какие-то жалкие 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.

Как синхронизировать Obsidian бесплатно
В Rocky Linux имеется привычный cockpit, для управления сервером.

Так как предполагается, что на этом сервере не будут вноситься изменения в данные, я установила права на каждую директорию в режим Receive Only, чтобы предотвратить повреждение данных в случае отказа жесткого диска (пока что RAID я не использую из-за наличия только одного жесткого диска в системе). Возможно, позже я переустановлю систему на FreeBSD, чтобы воспользоваться преимуществами Z-RAID массивов, но это потребует апгрейда как дисковой подсистемы, так и увеличения объёма оперативной памяти.

Все остальные устройства я настроила на синхронизацию исключение с этим сервером. Это позволило полностью избавиться от состояния гонки.