3 điểm bởi GN⁺ 2024-04-17 | 1 bình luận | Chia sẻ qua WhatsApp
  • BTFS là một hệ thống tệp BitTorrent cho phép mount tệp .torrent hoặc magnet link như một thư mục chỉ đọc trong cây tệp
  • Nội dung tệp sẽ được tải xuống theo yêu cầu khi ứng dụng đọc, và các công cụ thông thường như ls, cat, cp hoạt động đúng như mong đợi
  • Các ứng dụng như vlc, mplayer cũng có thể hoạt động mà không cần thay đổi, nên có thể xử lý nội dung torrent như tệp thông thường
  • Cung cấp cách cài đặt gói trên Debian/Ubuntu, Arch Linux, Gentoo, Fedora, Fedora OSTree, OpenSUSE và macOS
  • Các phụ thuộc trên Linux là fuse3, libtorrent, libcurl, và build từ mã nguồn sử dụng quy trình autoreconf, configure, make

BTFS làm gì

  • BTFS cho phép mount tệp .torrent hoặc magnet link để sử dụng như một thư mục chỉ đọc trong cây tệp
  • Nội dung tệp được tải xuống theo yêu cầu khi ứng dụng thực sự đọc tới
  • Các công cụ hệ thống tệp thông thường vẫn hoạt động nguyên vẹn
    • ls
    • cat
    • cp
  • Ứng dụng cũng có thể dùng mà không cần thay đổi
    • vlc
    • mplayer

Quy trình sử dụng cơ bản

  • Tạo thư mục mount, gắn tệp torrent vào đó, rồi chạy các tệp trong thư mục như tệp thông thường
$ mkdir mnt
$ btfs video.torrent mnt
$ cd mnt
$ vlc video.mp4
  • Thao tác unmount và thoát được thực hiện bằng fusermount
$ fusermount -u mnt

Cài đặt gói

  • Trên Debian/Ubuntu, cài đặt bằng apt-get
# apt-get install btfs
  • Trên Arch Linux, cài đặt bằng pacman
# pacman -S btfs
  • Trên Gentoo, cài đặt bằng emerge
# emerge -av btfs
  • Trên Fedora, cài đặt gói fuse-btfs bằng dnf
# dnf install fuse-btfs
  • Trên Fedora OSTree, cài đặt fuse-btfs bằng rpm-ostree
$ rpm-ostree install fuse-btfs
  • Trên OpenSUSE, cài đặt bằng zypper
# zypper install btfs
  • Trên macOS, sử dụng brew
$ brew install btfs

Phụ thuộc trên Linux

  • Các phụ thuộc cần thiết trên Linux như sau
    • fuse3: trên Ubuntu 22.04 là fuse3
    • libtorrent: trên Ubuntu 22.04 là libtorrent-rasterbar8
    • libcurl: trên Ubuntu 22.04 là libcurl4

Build từ mã nguồn

  • Trên các bản Debian/Ubuntu gần đây, cài đặt các phụ thuộc build rồi clone kho lưu trữ và chạy 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
  • Nếu muốn cài đặt luôn, chạy thêm make install
$ make install
  • Trên macOS, sau khi cài các phụ thuộc bằng brew, dùng cùng quy trình build
$ 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
  • Trên macOS, nếu cần cài đặt thì chạy make install
$ make install

1 bình luận

 
GN⁺ 2024-04-17
Ý kiến trên Hacker News
  • Sẽ hay hơn nếu có một chương trình máy chủ đi kèm với cái này. Ý tôi là một chương trình vừa đóng vai trò trình tạo file torrent, tracker, vừa là file server đơn giản
    Trong các tổ chức lớn, có thể đặt một lượng lớn dữ liệu công khai trên máy chủ, tạo torrent mỗi khi dữ liệu thay đổi, cung cấp file .torrent qua HTTP đồng thời để nó đóng vai trò tracker. Với client FUSE, chỉ cần bọc thêm một chút logic đơn giản để phát hiện torrent mới trên máy chủ rồi tải lại/mount lại là được
    Từ lâu rồi tôi từng tạo một bản phân phối Linux cho ngân hàng. Nó dựa trên Ubuntu NetBoot, chỉ đưa vào các gói tối thiểu cho desktop ở chi nhánh, và vì các chi nhánh không có máy chủ nên bản phân phối này tự seeding. Miễn là wake-on-lan và PXE được cấu hình trên switch, chỉ với một máy có thể nhân bản hàng trăm máy trong một tòa nhà trong thời gian khá ngắn, và các bản sao mới cũng có thể trở thành seed
    Bên trong, chúng tôi dùng nginx để cung cấp repository Ubuntu tùy chỉnh và chạy tftp/inetd cùng wackamole. Khi một máy được cài đặt, nó tải torrent từ “máy chủ” và thêm vào transmission; sau khi hoàn tất, chính máy đó cũng trở thành seed và chạy wackamole, inetd, nginx, tracker, v.v. Ban đầu thì seed ổn định cho 10 máy, rồi khi tất cả đã lên, mới đánh thức thêm nhiều máy hơn
    Chúng tôi đã triển khai image cho 8.000 máy trong vài tuần trên hàng trăm chi nhánh ngân hàng; phần lớn độ trễ là do quản lý thay đổi và kế hoạch rollout theo từng giai đoạn. Thực tế, phần khó nhất là tải seed đầu tiên xuống từng chi nhánh thông qua bản build Linux hiện có và dùng một trong số đó làm máy seed. Việc này diễn ra tại hơn 350 chi nhánh với đường truyền thiếu thốn, một số nơi dùng ISDN 256kbps

    • Có một tính năng có thể bạn quan tâm, nhưng theo tôi biết thì có vẻ chỉ AWS S3 triển khai: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjec...
      Tôi chưa từng dùng thực tế nên không biết AWS có đưa tracker riêng của họ vào file .torrent kết quả hay không
    • Nếu mỗi lần dataset được cập nhật lại tạo một torrent mới, chẳng phải client sẽ phải truyền lại cả những dữ liệu không thay đổi sao?
  • Công cụ này nên được nâng cấp để dùng các tính năng mới của BitTorrent v2
    https://blog.libtorrent.org/2020/09/bittorrent-v2/
    Đặc biệt quan trọng là cây băm Merkle, cho phép cây băm theo từng file và cấu trúc thư mục

    • Từ khi biết đến BitTorrent v2, tôi đã mong sẽ có chỉ mục theo từng file trên mạng. Sẽ rất hay nếu có thể gắn nhãn cho hầu hết các file media dung lượng lớn trên ổ đĩa của tôi rằng hiện có bao nhiêu bản sao trong các swarm BitTorrent
      Như vậy sau này tôi có thể dễ dàng xóa các file lớn hơn, vì biết rằng mình có thể tải lại đúng bản sao đó. Trước đây tôi từng thử làm điều tương tự với IPFS nhưng không suôn sẻ, và cũng không tìm được các file trùng lặp
  • Tôi muốn có một BTFS có thể sửa các file media “bị hỏng”. Ví dụ nếu đĩa bị xước làm mất một phần dữ liệu, hoặc media do tôi chọn tùy chọn codec không tốt lắm, thì nó chỉ tải phần bị hỏng về và khôi phục một cách mượt mà

    • Không hẳn là cùng một thứ, nhưng tôi nhớ đến AccurateRip, thứ từng được dùng rất nhiều hồi trước khi mỗi năm còn rip hàng trăm CD
      http://www.accuraterip.com/
    • Sao không dùng một file system duy trì việc đó? Có ZFS, mà lưu trữ cũng rẻ
    • Một cách dùng khác là đưa media vào thư viện của tôi rồi chia sẻ lại. Nếu có thể tự nguyện quét hash của toàn bộ media tôi có, và một client torrent thông minh chỉ cung cấp đúng các file đó, thì sẽ giúp ích rất nhiều cho việc seed các file media hiếm
      Vì tôi luôn xóa các file không cần thiết, nên cần dạng torrent một phần
    • Nếu file đã hỏng thì tính hash để tra cứu bằng cách nào?
    • Có lẽ cứ phân phối file parity cùng với file thật như trên Usenet là được? Bản thân Usenet gần như cũng theo cách này
      Tôi không biết một triển khai file system NNTP có hoạt động tốt không, nhưng cũng có nzbfs: https://github.com/danielfullmer/nzbfs
  • Tôi đăng vì thấy lạ là thứ này không được dùng nhiều hơn. Liệu có thể tạo máy ảo hoặc hệ điều hành như một overlay trên BTFS không? Có vẻ là một hướng thú vị

    • Ngay tuần trước, tôi đã tạo các image PXE boot bằng Nix trên laptop, đưa chúng lên IPFS, rồi boot qua mạng cho server của tôi ở một quốc gia khác thông qua mirror IPFS công khai
      Khi boot, initrd được mount dưới dạng overlayfs chỉ đọc. Tôi đã công khai cấu hình: https://github.com/jhvst/nix-config
      Sau này tôi dự định viết tài liệu về quy trình IPFS, bao gồm cấu hình router PXE, tại https://github.com/majbacka-labs/nixos.fi. Tôi cũng có thể vận hành một máy chủ build công khai nhỏ cho cấu hình Flake, dành cho những ai muốn thử quy trình này
    • Bản thân nó không phải là nhà cung cấp overlay, nhưng uber/kraken là “registry Docker P2P có thể phân phối dữ liệu cấp TB chỉ trong vài giây”. Nó dùng giao thức BitTorrent để chuyển các image Docker đến các cụm quy mô lớn
      https://github.com/uber/kraken
    • CVMFS là một lựa chọn trưởng thành trong lĩnh vực này, được cộng đồng vật lý dùng nhiều để phân phối phần mềm và image container. Nó giúp chia sẻ tài nguyên tính toán một cách đơn giản và hiệu quả
      https://cernvm.cern.ch/fs/
    • Tôi không hiểu rõ ý chính. Một file system chỉ đọc tải file tức thời thì rất hay, nhưng trong hầu hết tình huống nghe không thực tế lắm
    • Thỉnh thoảng lại có ai đó phát minh lại Plan 9 của Bell Labs
  • Đây là client hoàn hảo để truy cập nội dung của Internet Archive. Mỗi mục trên IA tự động được gắn một torrent có chứa web seed của IA. Có thể thử với Big Buck Bunny
    btfs https://archive.org/download/BigBuckBunny_124/BigBuckBunny_1... mountpoint

    • Tôi không rõ cấu trúc nội bộ của IA và BitTorrent, nhưng nếu một mục lưu trữ có quá nhiều tệp thì chúng không được đưa hết vào tệp torrent
      Điều này thường thấy ở các bộ ROM hoặc kho lưu trữ tạp chí. Khi một mục vượt quá 1000 tệp, torrent thường chỉ có khoảng 200 tệp đầu tiên
    • Cách tốt hơn là thế này:
      btplay https://archive.org/download/BigBuckBunny_124/…
  • Bài liên quan:
    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)

  • Xa hơn nữa, sẽ tốt nếu lưu dữ liệu dưới dạng tệp sqlite có chỉ mục tìm kiếm toàn văn. Khi đó có thể tìm kiếm toàn văn torrent khi cần: https://github.com/bittorrent/sqltorrent

  • Thảo luận 4 năm trước:
    https://news.ycombinator.com/item?id=23576063

  • Bình luận cấp cao nhất của saurik trong thread cũ năm 2020 với 121 bình luận tóm tắt khá đúng cảm nhận của tôi về tình huống này: https://news.ycombinator.com/item?id=23580334
    Ý là BTFS là phiên bản “mỗi lần một CID” của IPFS
    IPFS rất hay, nhưng tôi nghĩ để dùng được hằng ngày thì cần tiến bộ lớn ở ít nhất ba mảng. Thứ nhất, không nên phải chạy proxy node cục bộ. Tôi từng nghe nói Brave có hỗ trợ WebTorrent tích hợp sẵn, nhưng tôi không dùng Brave nên không biết đó chỉ là cái tên WebTorrent hay thực sự là như vậy
    Thứ hai, độ trễ khi phân giải swarm/peer gây khó chịu theo kiểu “trò tiền mã hóa web3”, và vì độ trễ đó mà việc duyệt nội dung có cảm giác như thời modem 14.4k ngày xưa
    Thứ ba, IPFS rất tuyệt cho các nội dung ít thay đổi nhưng cực kỳ phổ biến như Wikipedia, bản phát hành game, nội dung MDN. Nhưng nếu nghĩ đến việc duyệt một kho git, việc đổi “tip” hay “main” sang phiên bản đã cập nhật khá rườm rà. Theo tôi biết, cách duy nhất để phân giải CID mới nhất là IPNS, còn DNS là một cơ chế dễ trở thành một trong nhiều yếu tố bị vướng víu mỗi khi có sự cố
    Tôi biết mình đã viết quá dài về một hệ thống tệp khác chứ không phải hệ thống tệp được gửi lên, nhưng trong khi có lẽ tôi sẽ không cài BTFS, những ai quan tâm đến ý tưởng này đáng để đọc thêm về IPFS. Chỉ nên ghi nhớ các giới hạn hiện tại

  • https://github.com/anacrolix/torrent đã có driver FUSE từ năm 2013. Hiện nó đang ở giai đoạn đầu của việc loại bỏ phần đó
    WebDAV, FUSE bên thứ ba và wrapper HTTP đều đang làm những việc tương tự. Đó là cách cung cấp magnet link, info hash và tệp torrent như một hệ thống tệp bất biến. Hỗ trợ BitTorrent v2 hiện đã có trong master