LINUX.ORG.RU

Файловая система как Matrix-протокол

 


0

2

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

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

Ответ на: комментарий от aol

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

Shushundr ★★★
() автор топика

Кури CAP-теорему и пойми, что конфликтов всё равно не избежать.

Если готов смириться - изучай любые распространённые ФС, от хадупа по головонога.

А лучше забей на «смонтировать» и поставь syncthing, который делает всё то, что тебя интересует.

token_polyak ★★★★
()
Последнее исправление: token_polyak (всего исправлений: 1)
Ответ на: комментарий от Shushundr

Так тебе нужно синхронизировать или нужно смонтировать? Что первично? А то второе утверждение сильно попахивает проблемой XY.

Если проблема именно в «больше не парился», то ЕМНИП, syncthing тоже позволяет настроить один раз и не дёргаться.

hobbit ★★★★★
()

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

akho
()
Ответ на: комментарий от token_polyak

Кури CAP-теорему

он просит AP

и пойми, что конфликтов всё равно не избежать.

Пихулисты не согласятся: https://jneem.github.io/merging

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от t184256

Пихулисты не согласятся

  • был вот джпег background.jpg. С голой женщиной, естественно. На всех трех компьютерах A, B, C.
  • на компьютере B пользователь @Shushundr заменил картинку на картинку с голым мужчиной (тоже background.jpg)
  • на компьютере C пользователь @Shushundr заменил картинку на картинку с нарисованной анимешной голой женщиной (тоже background.jpg)

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

Но так не произойдет. В пихулевой теории патчей там возникнет призрак голой женщины, нарисованная анимешная голая женщина, и голый мужчина. Все трое, что характерно, в одном файле background.jpg.

Это в целом имеет смысл, но плохо бьется с практикой реального использования ФС.

akho
()
Ответ на: комментарий от akho

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

Че-т ору. Semantic merging, подразделение DWYMNWYS (do what I meant, not what I said).

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 2)

В том виде, в котором ты описываешь, это невозможно. Для этого нужно проектировать ФС, ОС и ПО с нуля с учётом этой архитектуры. Тебе ничего не мешает из двух клиентов поменять один и тот же блок и никакой matrix тебе это не синхронизирует. Тут будет конфликт и нужны средства для разрешения этого конфликта. Классические средства это транзакции. Когда выигрывает первый, а второй должен свои изменения ещё раз попробовать применить с учётом изменившихся реалий. Но для этого весь программный стек должен работать согласованно.

Можешь NFS или SMB примонтировать. В каком-то приближении оно работает.

vbr ★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от Shushundr

Это утопия.

реконструирует историю даже в том случае, когда сообщения с разных мест приходят не в порядке времени их создания

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

bigc ★★
()
Ответ на: комментарий от Aceler

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

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

Так сделано в десятке файловых систем, начиная от pNFS, заканчивая Ceph.

Aceler ★★★★★
()
Ответ на: комментарий от vbr

Можешь NFS или SMB примонтировать. В каком-то приближении оно работает.

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

Shushundr ★★★
() автор топика
Ответ на: комментарий от Aceler

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

Shushundr ★★★
() автор топика
Ответ на: комментарий от Aceler

В Matrix протоколе есть сервер, к которому все коннектятся.

Вот неправда же. В Matrix протоколе все могут коннектиться к разным серверам.

Shushundr ★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)
Ответ на: комментарий от Aceler

Не, домен в названии чатика — это типа часть id. Беседы можно продолжать, даже когда связь между серверами рвется, и они должны быть eventually consistent.

Ты хорошо знаешь этот протокол?

В объеме трех постов на hackernews примерно.

akho
()
Ответ на: комментарий от akho

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

Aceler ★★★★★
()