- BTFS คือระบบไฟล์ BitTorrent ที่เมานต์ไฟล์
.torrent หรือ magnet link เพื่อใช้งานเหมือนเป็นไดเรกทอรีแบบอ่านอย่างเดียวในโครงสร้างไฟล์
- เนื้อหาไฟล์จะถูก ดาวน์โหลดแบบออนดีมานด์ เมื่อแอปพลิเคชันอ่านไฟล์ และเครื่องมือทั่วไปอย่าง
ls, cat, cp จะทำงานตามที่คาดไว้
- แอปพลิเคชันอย่าง
vlc, mplayer ก็สามารถทำงานได้โดยไม่ต้องแก้ไข ทำให้จัดการคอนเทนต์ทอร์เรนต์ได้เหมือนไฟล์ทั่วไป
- มีวิธีติดตั้งแพ็กเกจสำหรับ Debian/Ubuntu, Arch Linux, Gentoo, Fedora, Fedora OSTree, OpenSUSE และ macOS
- dependency บน Linux คือ fuse3, libtorrent, libcurl และการ build จากซอร์สใช้ลำดับ
autoreconf, configure, make
BTFS ทำอะไร
- BTFS ช่วยให้เมานต์ไฟล์
.torrent หรือ magnet link เพื่อใช้งานเหมือนเป็นไดเรกทอรีแบบอ่านอย่างเดียวภายในโครงสร้างไฟล์ได้
- เนื้อหาไฟล์จะถูก ดาวน์โหลดแบบออนดีมานด์ เมื่อแอปพลิเคชันอ่านจริง ๆ
- เครื่องมือระบบไฟล์ทั่วไปทำงานได้ตามเดิม
- แอปพลิเคชันก็ใช้ได้โดยไม่ต้องแก้ไข
ขั้นตอนการใช้งานพื้นฐาน
- สร้างไดเรกทอรีสำหรับเมานต์ เชื่อมต่อไฟล์ทอร์เรนต์ แล้วเรียกใช้ไฟล์ในไดเรกทอรีเหมือนไฟล์ทั่วไป
$ mkdir mnt
$ btfs video.torrent mnt
$ cd mnt
$ vlc video.mp4
- การ unmount และออกจากการใช้งานทำด้วย
fusermount
$ fusermount -u mnt
การติดตั้งแพ็กเกจ
- บน Debian/Ubuntu ติดตั้งด้วย
apt-get
# apt-get install btfs
- บน Arch Linux ติดตั้งด้วย
pacman
# pacman -S btfs
- บน Gentoo ติดตั้งด้วย
emerge
# emerge -av btfs
- บน Fedora ติดตั้งแพ็กเกจ
fuse-btfs ด้วย dnf
# dnf install fuse-btfs
- บน Fedora OSTree ติดตั้ง
fuse-btfs ด้วย rpm-ostree
$ rpm-ostree install fuse-btfs
- บน OpenSUSE ติดตั้งด้วย
zypper
# zypper install btfs
$ brew install btfs
dependency บน Linux
- dependency ที่จำเป็นบน Linux มีดังนี้
- fuse3: บน Ubuntu 22.04 คือ
fuse3
- libtorrent: บน Ubuntu 22.04 คือ
libtorrent-rasterbar8
- libcurl: บน Ubuntu 22.04 คือ
libcurl4
Build จากซอร์ส
- บน Debian/Ubuntu รุ่นใหม่ ให้ติดตั้ง build dependency แล้ว clone repository จากนั้นรัน
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
- การ build บน macOS ใช้
brew เพื่อติดตั้ง dependency แล้วใช้ลำดับ 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
- หากต้องการติดตั้งบน macOS ด้วย ให้รัน
make install
$ make install
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ถ้ามี โปรแกรมฝั่งเซิร์ฟเวอร์ ที่ทำงานคู่กันก็คงดี หมายถึงตัวที่ทำหน้าที่เป็นทั้งตัวสร้างไฟล์ทอร์เรนต์, tracker และไฟล์เซิร์ฟเวอร์แบบง่าย ๆ
ในองค์กรขนาดใหญ่ น่าจะเอาข้อมูลสาธารณะปริมาณมหาศาลไปไว้บนเซิร์ฟเวอร์ สร้างทอร์เรนต์ทุกครั้งที่ข้อมูลเปลี่ยน ให้บริการไฟล์
.torrentผ่าน HTTP พร้อมทำหน้าที่เป็น tracker ไปด้วยได้ ส่วนไคลเอนต์ FUSE ก็แค่ห่อด้วยลอจิกง่าย ๆ ที่คอยตรวจจับทอร์เรนต์ใหม่จากเซิร์ฟเวอร์แล้วโหลด/เมานต์ใหม่นานมาแล้วผมเคยทำดิสโทร Linux สำหรับธนาคารตัวหนึ่ง อิงจาก Ubuntu NetBoot ใส่เฉพาะแพ็กเกจขั้นต่ำสำหรับเดสก์ท็อปตามสาขา และเพราะที่สาขาไม่มีเซิร์ฟเวอร์ ดิสโทรจึง seed ตัวเอง ได้ ขอแค่ตั้งค่า wake-on-lan กับ PXE บนสวิตช์ไว้ เครื่องเดียวก็สามารถโคลนเครื่องหลายร้อยเครื่องในอาคารได้ในเวลาค่อนข้างสั้น และเครื่องที่โคลนใหม่ก็กลายเป็น seed ได้ด้วย
ภายในเราใช้ nginx ให้บริการ Ubuntu repository แบบปรับแต่งเอง และรัน tftp/inetd กับ wackamole พอเครื่องติดตั้งเสร็จก็จะดาวน์โหลดทอร์เรนต์จาก “เซิร์ฟเวอร์” แล้วเพิ่มเข้า transmission และเมื่อเสร็จแล้วเครื่องนั้นก็จะกลายเป็น seed โดยเปิด wackamole, inetd, nginx, tracker ฯลฯ ตอนแรกจะ seed อย่างเสถียรให้ได้ 10 เครื่องก่อน พอทุกเครื่องขึ้นมาแล้วค่อยปลุกเครื่องเพิ่ม
เรากระจายอิมเมจไปยังเครื่อง 8,000 เครื่องทั่วสาขาธนาคารหลายร้อยแห่งภายในไม่กี่สัปดาห์ โดยความล่าช้าส่วนใหญ่เกิดจากการจัดการการเปลี่ยนแปลงและแผน rollout เป็นระยะ ๆ สิ่งที่ยากที่สุดจริง ๆ คือการใช้ Linux build เดิมดาวน์โหลด seed แรกไปยังแต่ละสาขา แล้วให้หนึ่งในเครื่องเหล่านั้นทำหน้าที่เป็นเครื่อง seed ทำกันในกว่า 350 สาขา ด้วยลิงก์ที่จำกัด บางแห่งเป็น ISDN 256kbps
ไม่เคยลองใช้จริง เลยไม่รู้ว่า AWS ใส่ tracker ของตัวเองไว้ในไฟล์
.torrentที่ได้หรือเปล่าเครื่องมือนี้ควรอัปเกรดให้ใช้ฟีเจอร์ใหม่ของ BitTorrent v2
https://blog.libtorrent.org/2020/09/bittorrent-v2/
โดยเฉพาะ Merkle hash tree ที่ทำให้มี hash tree แยกตามไฟล์และโครงสร้างไดเรกทอรีได้
แบบนั้นผมจะลบไฟล์ใหญ่ ๆ ได้ง่ายขึ้น เพราะรู้ว่าภายหลังสามารถดาวน์โหลดสำเนาเดียวกันกลับมาได้ง่าย ผมเคยลองทำอะไรคล้าย ๆ กันด้วย IPFS แต่ไม่ค่อยเวิร์ก และก็หาไฟล์ซ้ำไม่เจอด้วย
ถ้ามี BTFS ที่ช่วยซ่อมไฟล์มีเดียที่ “เสียหาย” ได้ก็คงดี เช่น ถ้าดิสก์มีรอยจนบางส่วนหายไป หรือมีเดียที่ผมเลือกตัวเลือก codec ได้ไม่ดี ก็ให้ดาวน์โหลดเฉพาะส่วนที่เสียหายมาซ่อมให้กลับมาเนียน ๆ
http://www.accuraterip.com/
เพราะผมลบไฟล์ที่ไม่จำเป็นอยู่เสมอ จึงต้องใช้รูปแบบทอร์เรนต์บางส่วน
ไม่แน่ใจว่า implementation ของไฟล์ซิสเต็ม NNTP ทำงานได้ดีไหม แต่ก็มี nzbfs อยู่: https://github.com/danielfullmer/nzbfs
แปลกใจที่สิ่งนี้ไม่ได้ถูกใช้มากกว่านี้เลยเอามาโพสต์ จะทำ virtual machine หรือระบบปฏิบัติการเป็น overlay บน BTFS ได้ไหม? ดูเป็นทิศทางที่น่าสนใจ
ตอนบูต initrd จะถูกเมานต์เป็น overlayfs แบบอ่านอย่างเดียว ผมเปิดเผยการตั้งค่าไว้ที่นี่: https://github.com/jhvst/nix-config
ภายหลังผมมีแผนจะเขียนเอกสารกระบวนการ IPFS รวมถึงการตั้งค่าเราเตอร์ PXE ไว้ที่ https://github.com/majbacka-labs/nixos.fi และอาจเปิด build server สาธารณะขนาดเล็กสำหรับตั้งค่า Flake ให้คนที่อยากทดลองกระบวนการนี้ด้วย
https://github.com/uber/kraken
https://cernvm.cern.ch/fs/
เป็นไคลเอนต์ที่สมบูรณ์แบบสำหรับเข้าถึงคอนเทนต์ของ Internet Archive แต่ละรายการของ IA จะมีทอร์เรนต์ที่ใส่ web seed ของ IA แนบมาให้อัตโนมัติ ลองทดสอบด้วย Big Buck Bunny ได้
btfshttps://archive.org/download/BigBuckBunny_124/BigBuckBunny_1...mountpointเห็นบ่อยในชุด ROM หรือ archive นิตยสาร ถ้ารายการเกิน 1000 รายการ ทอร์เรนต์มักจะมีแค่ ประมาณ 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 ที่มี ดัชนีค้นหาแบบ full-text อยู่ด้วย จะทำให้ค้นหาแบบ full-text ในทอร์เรนต์ได้เมื่อต้องการ: https://github.com/bittorrent/sqltorrent
การอภิปรายเมื่อ 4 ปีก่อน:
https://news.ycombinator.com/item?id=23576063
คอมเมนต์ระดับบนสุดของ saurik ในเธรดก่อนหน้าปี 2020 ที่มี 121 คอมเมนต์ สรุปความรู้สึกของฉันต่อสถานการณ์นี้ได้ดี: https://news.ycombinator.com/item?id=23580334
ประเด็นคือ BTFS เป็น IPFS เวอร์ชัน “หนึ่ง CID ต่อครั้ง”
IPFS นั้นเจ๋ง แต่ผมคิดว่าถ้าจะให้ใช้งานได้จริงในชีวิตประจำวัน ต้องมีความก้าวหน้าครั้งใหญ่ในอย่างน้อยสามด้าน อย่างแรก ไม่ควรต้องรันพร็อกซีโหนดในเครื่อง ได้ยินมาว่า Brave มีการรองรับ WebTorrent ในตัว แต่ผมไม่ได้ใช้ Brave เลยไม่รู้ว่าเป็นแค่ชื่อ WebTorrent หรือเป็นอย่างไร
อย่างที่สอง latency ในการ resolve swarm/peer นั้นเจ็บปวดในทำนองเดียวกับ “ของเล่นคริปโต web3” และความหน่วงนั้นทำให้การท่องดูรู้สึกเหมือนสมัยโมเด็ม 14.4k เก่า ๆ
อย่างที่สาม IPFS เหมาะมากกับคอนเทนต์ที่เปลี่ยนไม่บ่อยแต่ได้รับความนิยมสูง เช่น Wikipedia, เกม release, คอนเทนต์ MDN แต่ถ้าคิดถึงการท่องดู repository ของ git การเปลี่ยน “tip” หรือ “main” ให้ชี้ไปยังเวอร์ชันที่อัปเดตนั้นค่อนข้างยุ่งยาก เท่าที่ผมรู้ วิธี resolve CID ล่าสุดมีแค่ IPNS และ DNS ก็มักกลายเป็นหนึ่งในหลายองค์ประกอบที่พันกันเมื่อเกิดเหตุขัดข้อง
ผมรู้ว่าพูดถึงไฟล์ซิสเต็มอื่นที่ไม่ใช่ไฟล์ซิสเต็มที่ส่งเข้ามายาวเกินไป แต่ในขณะที่ผมคงไม่ติดตั้ง BTFS คนที่สนใจไอเดียนี้ก็น่าจะลองอ่านเรื่อง IPFS เพิ่มเติม อย่างไรก็ตาม ควรคำนึงถึงข้อจำกัดในปัจจุบันไว้ด้วย
https://github.com/anacrolix/torrent มี ไดรเวอร์ FUSE มาตั้งแต่ปี 2013 ตอนนี้อยู่ในช่วงเริ่มต้นของการถอดมันออก
WebDAV, FUSE ของบุคคลที่สาม และ HTTP wrapper ต่างก็ทำสิ่งคล้ายกัน คือให้บริการ magnet link, info hash และไฟล์ทอร์เรนต์เหมือนเป็นไฟล์ซิสเต็มแบบเปลี่ยนแปลงไม่ได้ การรองรับ BitTorrent v2 ตอนนี้อยู่ใน master แล้ว