Межпланетная файловая система — больше нет необходимости копировать в сеть

    Всем хороша идея IPFS но вот только был один недостаток у неё. Данные загружаемые в сеть копировались в хранилище блоков удваивая занимаемое ими место. Более того файл резался на блоки которые мало пригодны для повторного использования.


    Появилась экспериментальная опция --nocopy, которая избавляет от этого недостатка. Для того чтобы пользоваться ей необходимо выполнить несколько условий.


    Также появился новый тип идентификаторов. Его мы тоже разберём.


    Напомню: InterPlanetary File System — это новая децентрализованная сеть обмена файлами (HTTP-сервер, Content Delivery Network). О ней я начал рассказ в статье "Межпланетная файловая система IPFS".


    image


    --nocopy


    Это опция заставляет IPFS использовать как источник блоков исходные файлы. Тем самым файлы не копируются в хранилище блоков и не занимают в 2 раза больше места.


    Для использования этой опции выполним следующие действия:


    1. необходимо включить Filestore


      ipfs config --json Experimental.FilestoreEnabled true

    2. в каталог где лежит каталог ".ipfs"(он обычно в каталоге пользователя) нужно сделать ссылку на каталог или файл который надо загрузить в сеть


      Файл можно связать hardlink'ом:


      fsutil hardlink "[каталог где .ipfs]\[имя файла]" "[путь к файлу]\[имя файла]"

      или


      mklink /h "[каталог где .ipfs]\[имя файла]" "[путь к файлу]\[имя файла]"

      Каталог можно связать символьной ссылкой:


      linkd "[каталог где .ipfs]\[имя каталога]" "[путь к каталогу]\[имя каталога]"

      или


      mklink /j "[каталог где .ipfs]\[имя каталога]" "[путь к каталогу]\[имя каталога]"

    3. И теперь добавляем


      ipfs add -r -w --nocopy "[каталог где .ipfs]\[имя каталога или файла]"

      Ключ -w оборачивает цель в каталог тем самым сохраняя её имя.


      Результатом будут идентификаторы CIDv1 и CIDv0 (мультихеш)



    WebSeed


    Теперь в магнит или торрент можно будет добавить WebSeed.


    Для файла:


    http://127.0.0.1:8080/ipfs/[идентификатор]/[имя файла]
    http://gateway.ipfs.io/ipfs/[идентификатор]/[имя файла]

    Для каталога:


    http://127.0.0.1:8080/ipfs/[идентификатор]/
    http://gateway.ipfs.io/ipfs/[идентификатор]/

    Пример магнита c WebSeed


    magnet:?xt=urn:btih:953edbe75de612bc966194d2ee60099b3bc1a1aa&dn=Magnet-ссылка.txt&ws=http://gateway.ipfs.io/ipfs/QmfQCxNW9r2974xR5dXopXfQqsEvgexhza6aQgqTGL7Yh3/Magnet-ссылка.txt

    Идентификатор контента (CID)


    В связи с этими изменениями в IPFS появились RAW блоки. Ключ --nocopy автоматически включает использование RAW блоков. Но можно включить этот режим и ключом --raw-leaves. В связи с этим появился новый CID (Content IDentifier) или по русски "идентификатор контента".


    Старый идентификатор


    Называется CIDv0 и обычно имеет постоянный префикс "Qm".


    CIDv0 это просто мультихеш в Base58


    [varint ID хеша][varint длинна хеша][хеш]

    Пример CIDv0: QmPbs8syAxac39bcNuMLpHXnqjKUguqakCM8LN8sZVPD9R


    Новый идентификатор


    У RAW блоков свой CID. Его можно отличить по постоянному префиксу "zb2rh".


    CIDv1 содержит в себе больше информации.


    [префикс основания][varint версия CID][varint тип контента][varint ID хеша][varint длинна хеша][хеш]

    Пример CIDv1: zb2rhe143L6sgu2Nba4TZgFMdPidGMA6hmWhK9wLUoVGWYsR7


    Разберём его на части


    1. zbase58 Bitcoin [префикс основания]


      base58: b2rhe143L6sgu2Nba4TZgFMdPidGMA6hmWhK9wLUoVGWYsR7
      переводим в
      HEX: 01 55 12 20 6D542257CBD1BE7FD0AE8914F42066BCBF1E79487EF67B959A86DBEE4670B386


    2. 01 — v1 [varint версия CID]
    3. 55 — raw binary [varint тип контента]
    4. 12sha2-256 [varint ID хеша]
    5. 20 — 32 байта [varint длинна хеша]
    6. 6D542257CBD1BE7FD0AE8914F42066BCBF1E79487EF67B959A86DBEE4670B386 — sha2-256 digest [хеш]

    Заключение


    Опция --nocopy очень помогает когда вы хотите поделиться с миром например дампом Википедии. Или другими полезными но очень большими по объёму массивами информации.


    Ссылки


    Ссылки в Windows, символьные и не только
    ipfs command reference
    List of experimental IPFS features


    Другие части


    1. Межпланетная файловая система IPFS
    2. Публикуем сайт в межпланетной файловой системе IPFS
    3. Хостим сайт в межпланетной файловой системе IPFS под Windows
    4. Больше нет необходимости копировать в сеть
    5. Переключаем свой сайт на localhost (локальный шлюз IPFS)
    6. Локализуем глобальный шлюз или сайты в IPFS
    Поделиться публикацией
    Похожие публикации
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 14
      +1

      Не обязательно размещать ссылку в самом .ipfs, достаточно в каталоге, в котором находится .ipfs. Обычно это домашний каталог.

        +1
        А использование именно хардлинка для файлов обязательно? Симлинк не прокатит? Тоска же.
          0
          Не обязательно.
            0

            Симлинки на каталоги замечательно работают. На файлы не пробовал.


            Т.е. я просто в /home/balancer создал каталог ipfs-share, куда накидал симлинки на все нужные каталоги с файлами. И расшариваю их из этого каталога.

          0
          Кто-нибудь может пояснить, что за трафик постоянно пропускает через себя работающая IPFS нода, даже когда НЕ загружает никаких данных (нет запросов владельца) и НЕ отдает файлы/блоки из собственного хранилища(предельный случай — в локальном хранилище вообще ничего нет)?

          Как понимаю, она работает ретранслятором, пересылая по цепочке чужие блоки — примерно как ходит трафик в сети TOR. Только в отличии от TOR не понимаю зачем такое вообще нужно? Почему получатель (запрашивающий какой-то контент) не загружает его с ближайшей ноды(нод), в хранилище которых нашлись нужные блоки? Зачем вообще нужны посредники-ретрансляторы и кратное увеличение общего трафика в сети?
            +1
            Как минимум нода обслуживает DHT. А так можно включить режим --debug=true
            и видеть всё что она делает.
            0
            Наткнулся на интересную статью https://habrahabr.ru/post/260339/
            Тема: Программируем BitTorrent-клиент. Чистый Delphi
            Но делфи это же… Zona — вроде как известный торрент клиент, написан на Java, возможно ли такой «торрент клиент» создать самому в одиночку? Сколько нужно времени? Увы в той теме не смог задать вопрос так как публикация старая.
              0
              Есть libtorrent к которому можно прикрутить интерфейс и реализовать нужные плюшки.

              Написать свой простецкий торрент клиент не сложно и может занять наверное не больше недели. Информация по протоколам лежит на bittorrent.org. Вот реализация всех остальных фишек уже может занять более длительное время.

              Опыта у меня ни Delphi ни Java нет. Говорю относительно Lua.
              0
              дк это же sjcx
                0
                Расскажите по подробней. Что такое sjcx и чем оно схоже с ipfs?
                0
                Удобная система для академических целей. По сравнению с торрентами, очень высокая отзывчивость при работе с файлами, независимость от имён файлов и структуры каталогов.

                Вопрос в том, можно ли использовать систему для работы с непубличными уникальными данными (например, контент для узкого круга подписчиков, корпоративные фотографии), хэши которых неизвестны? То есть, насколько возможно установить наблюдение за конкретным участником сети, узнать текущее содержимое его хранилища, что скачивает, что раздаёт?
                  0
                  В эксперементальных есть приватная сеть но IPFS создавалась не для приватных данных. Минимум раз в сутки она публикует в DHT содержимое хранилища блоков.

                  Приватные данные можно шифровать до публикации в сеть. Тогда даже если кто то узнает хеш и скачает их расшифровать то не сможет.
                  0
                  Вот бы базу archive.org в IPFS, заодно и дедубликация где только возможно.

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

                Самое читаемое