πfs: новая файловая система, с которой вам не придётся беспокоиться о данных

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

πfs очень легко собрать. Сперва вам нужно установить пакеты autoconf, automake и libfuse. Например, на Debian это делается так:

sudo apt-get install autotools-dev
sudo apt-get install automake
sudo apt-get install libfuse-dev
./autogen.sh
./configure
make
make install

πfs очень просто использовать:

πfs -o mdd=<metadata directory> <mountpoint>

где metadata directory — это место, где πfs должна хранить метаданные (имена файлов и их местоположения в π), а mountpoint — это точка монтирования вашей обычной файловой системы.

Но как связаны число π и мои данные?

π (или «пи») — это одна из важнейших математических констант, которая обладает интересными свойствами (подробнее о них можно узнать на Википедии).

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

Теперь возникает вопрос: зачем тратить эксабайты на хранение этих данных, если их можно просто найти в π?

И что, прям совсем любой?

Именно! Любой, который создали вы, кто-то другой и который ещё вообще не создали! Нарушение авторских прав? Бросьте, это лишь несколько цифр числа π! Они всегда там были!

Но как найти там мои данные?

Если вы знаете, с какой по счёту цифры числа начинается ваш файл и его длину, его легко извлечь при помощи формулы Бэйли-Боруэйна-Плаффа. Кроме того, её можно использовать для поиска той самой первой цифры.

Чем длиннее искомая последовательность, тем дольше её искать, поэтому есть смысл разбить файлы на небольшие блоки. В этой реализации для повышения производительности файлы разбиваются на отдельные байты, которые ищутся в π.

Я нашёл свои байты, но как запомнить их местоположение?

Ну, вы всегда можете их записать на листок бумаги — но почему бы не записать их в π? Более того, местоположения файлов в числе — это метаданные, и даже если вы их потеряете, сами данные останутся в π — куда им оттуда деться?

Но почему она такая медленная? Файл в 400 строк записывался целых 5 минут!

Это лишь прототип, но не стоит забывать про закон Мура 😉

Источник: GitHub