- 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
- Ứng dụng cũng có thể dùng mà không cần thay đổi
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
$ 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
Ý 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
.torrentqua 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à đượcTừ 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
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
.torrentkết quả hay khôngCô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
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à
http://www.accuraterip.com/
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
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ị
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
https://github.com/uber/kraken
https://cernvm.cern.ch/fs/
Đâ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
btfshttps://archive.org/download/BigBuckBunny_124/BigBuckBunny_1...mountpointĐ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
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