- BTFSは
.torrentファイルやmagnet linkを、ファイルツリー内の読み取り専用ディレクトリのようにマウントして使うBitTorrentファイルシステム
- ファイル内容はアプリケーションが読み取るときにオンデマンドでダウンロードされ、
ls、cat、cpのような一般的なツールが期待どおりに動作する
vlc、mplayerのようなアプリケーションも変更なしで動作できるため、Torrentコンテンツを通常のファイルのように扱える
- Debian/Ubuntu、Arch Linux、Gentoo、Fedora、Fedora OSTree、OpenSUSE、macOSでのパッケージインストール方法を提供している
- Linuxの依存関係はfuse3、libtorrent、libcurlで、ソースビルドは
autoreconf、configure、makeの流れを使う
BTFSの機能
- BTFSは
.torrentファイルまたはmagnet linkをマウントし、ファイルツリー内の読み取り専用ディレクトリのように使えるようにする
- ファイル内容はアプリケーションが実際に読み取るときにオンデマンドダウンロードされる
- 一般的なファイルシステムツールがそのまま動作する
- アプリケーションも変更なしで使用できる
基本的な使用フロー
- マウントディレクトリを作成してTorrentファイルを接続したあと、ディレクトリ内のファイルを通常のファイルのように実行する
$ mkdir mnt
$ btfs video.torrent mnt
$ cd mnt
$ vlc video.mp4
$ fusermount -u mnt
パッケージインストール
- Debian/Ubuntuでは
apt-getでインストールする
# apt-get install btfs
- Arch Linuxでは
pacmanでインストールする
# pacman -S btfs
# emerge -av btfs
- Fedoraでは
dnfでfuse-btfsパッケージをインストールする
# dnf install fuse-btfs
- Fedora OSTreeでは
rpm-ostreeでfuse-btfsをインストールする
$ rpm-ostree install fuse-btfs
- OpenSUSEでは
zypperでインストールする
# zypper install btfs
$ brew install btfs
Linuxの依存関係
- Linuxで必要な依存関係は次のとおり
- fuse3: Ubuntu 22.04では
fuse3
- libtorrent: Ubuntu 22.04では
libtorrent-rasterbar8
- libcurl: Ubuntu 22.04では
libcurl4
ソースビルド
- 最近のDebian/Ubuntuでは、ビルド依存関係をインストールしたあとリポジトリをクローンし、
autoreconf、configure、makeを実行する
$ sudo apt-get install autoconf automake libfuse3-dev libtorrent-rasterbar-dev libcurl4-openssl-dev g++
$ git clone https://github.com/johang/btfs.git btfs
$ cd btfs
$ autoreconf -i
$ ./configure
$ make
- インストールまで行う場合は
make installを追加で実行する
$ make install
- macOSでのビルドは
brewで依存関係をインストールしたあと、同じビルドフローを使う
$ brew install --cask macfuse libtorrent-rasterbar autoconf automake pkg-config
$ git clone https://github.com/johang/btfs.git btfs
$ cd btfs
$ autoreconf -i
$ ./configure
$ make
- macOSでもインストールが必要なら
make installを実行する
$ make install
1件のコメント
Hacker Newsの意見
これと対になるサーバープログラムがあるとよさそう。Torrentファイル生成器、トラッカー、単純なファイルサーバーの役割を兼ねるようなもの
大きな組織なら、サーバーに膨大な公開データを置き、データが変わるたびにTorrentを作り、
.torrentファイルはHTTPで提供しつつトラッカーとしても動かせそう。FUSEクライアント側には、サーバーの新しいTorrentを検知して再ロード/マウントする簡単なロジックをラップすればよいずっと前に銀行向けのLinuxディストリビューションを作ったことがある。Ubuntu NetBootベースで支店デスクトップ用の最小パッケージだけを入れ、支店にはサーバーがなかったのでディストリビューションが自己シードしていた。wake-on-lanとPXEだけをスイッチに設定しておけば、1台から建物内の数百台をかなり短時間で複製でき、新しい複製もシードになれた
内部的にはnginxでカスタムUbuntuリポジトリを提供し、tftp/inetdとwackamoleを動かしていた。マシンがインストールされると「サーバー」からTorrentを受け取ってtransmissionに追加し、完了後はそのマシンもシードになってwackamole、inetd、nginx、trackerなどを起動した。最初は10台を安定してシードし、全台が立ち上がったらさらに多くのマシンを起こす、という流れだった
数百の銀行支店にわたり数週間で8000台へイメージを配布したが、遅延の大半は変更管理と段階的な展開計画によるものだった。実際に一番難しかったのは、既存のLinuxビルドを通じて各支店に最初のシードをダウンロードさせ、そのうち1台をシードマシンとして使わせることだった。350以上の支店で貧弱な回線、一部は256kbps ISDNで進めた
実際に使ったことはないので、AWSが生成される
.torrentに自前のトラッカーを入れているかは分からないこのツールはBitTorrent v2の新機能を使うようアップグレードされるべき
https://blog.libtorrent.org/2020/09/bittorrent-v2/
特に、ファイルごとのハッシュツリーとディレクトリ構造を可能にするマークルハッシュツリーが重要
そうすれば、後で同一のコピーを簡単に再取得できると分かって、大きなファイルをもっと気軽に削除できる。以前IPFSで似たことを試そうとしたがうまくいかず、重複ファイルも見つけられなかった
「破損した」メディアファイルを直してくれるBTFSがあるといい。たとえばディスクに傷がついて一部が欠けていたり、自分が選んだコーデックオプションがいまいちだったメディアなら、壊れた部分だけをダウンロードして滑らかに復旧してくれるようなもの
http://www.accuraterip.com/
不要なファイルは常に削除しているので、部分Torrentの形が必要になる
NNTPファイルシステム実装がちゃんと動くのかは分からないが、nzbfsもある: https://github.com/danielfullmer/nzbfs
これがもっと使われていないのが不思議で投稿した。仮想マシンやOSをBTFS上のオーバーレイとして作れるのでは? 面白い方向に見える
起動時、initrdは読み取り専用のoverlayfsとしてマウントされる。設定は公開している: https://github.com/jhvst/nix-config
いずれPXEルーター設定を含むIPFS手順のドキュメントをhttps://github.com/majbacka-labs/nixos.fiに書く予定。このプロセスを試してみたい人向けに、Flake設定用の小さな公開ビルドサーバーも運用できる
https://github.com/uber/kraken
https://cernvm.cern.ch/fs/
Internet Archive のコンテンツにアクセスするのに最適なクライアント。IA の各アイテムには、IA の Web シードが入った torrent が自動的に付く。Big Buck Bunny で試せる
btfshttps://archive.org/download/BigBuckBunny_124/BigBuckBunny_1...mountpointROM の詰め合わせや雑誌アーカイブでよく見る。項目が 1000 個を超えると、torrent には通常、最初の約 200 個しか入っていない
btplay https://archive.org/download/BigBuckBunny_124/…関連記事:
BTFS – mount any .torrent file or magnet link as directory - https://news.ycombinator.com/item?id=23576063 - June 2020 (121 comments)
BitTorrent file system - https://news.ycombinator.com/item?id=10826154 - Jan 2016 (33 comments)
さらに、データを全文検索インデックス入りの sqlite ファイルとして保存できるとよい。そうすれば、必要なときに torrent を全文検索できる: https://github.com/bittorrent/sqltorrent
4 年前の議論:
https://news.ycombinator.com/item?id=23576063
2020 年の 121 コメントあった以前のスレッドで、saurik のトップコメントがこの状況に対する自分の気持ちをよく要約している: https://news.ycombinator.com/item?id=23580334
BTFS は IPFS の「一度に CID 1 つ」版だということ
IPFS は素晴らしいが、日常的に使えるようになるには、少なくとも 3 つの領域で大きな進展が必要だと思う。第一に、ローカルノードのプロキシを動かさなくてよいこと。Brave には WebTorrent 対応が組み込まれていると聞いたが、Brave を使っていないので、名前だけ WebTorrent なのかどうかは分からない
第二に、スウォーム/ピアの解決レイテンシが「web3 暗号資産のお遊び」と同じように苦痛で、その遅延のせいでブラウズが昔の 14.4k モデム時代のように感じられる
第三に、IPFS は Wikipedia、ゲームのリリース、MDN コンテンツのように、めったに変わらないが非常に人気のあるコンテンツには優れている。しかし git リポジトリを閲覧することを考えると、「tip」や「main」を更新版に切り替えるのはかなり面倒だ。私の知る限り、最新の CID を解決する方法は IPNS しかなく、DNS は障害のたびに絡み合う複数の要素の 1 つになりやすい仕組みだ
投稿されたファイルシステムではない別のファイルシステムについて長々と書きすぎたのは分かっているが、BTFS は自分ではインストールしなさそうな一方で、このアイデアに興味がある人は IPFS をさらに読んでみる価値がある。ただし、現時点の制約は念頭に置いたほうがよい
https://github.com/anacrolix/torrent には 2013 年から FUSE ドライバがあった。現在はそれを削除する初期段階にある
WebDAV、サードパーティー FUSE、HTTP ラッパーはいずれも似たようなことをしている。マグネットリンク、情報ハッシュ、torrent ファイルを不変ファイルシステムのように提供する方式だ。BitTorrent v2 対応は現在 master に入っている