1 पॉइंट द्वारा GN⁺ 2024-04-08 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • WinBtrfs v1.9 एक ड्राइवर है जो Linux फ़ाइलसिस्टम Btrfs को Windows पर पढ़ने और लिखने की सुविधा देता है, और इसे Linux kernel code का उपयोग किए बिना शुरू से दोबारा implement किया गया है
  • यह Windows XP के बाद के वर्ज़न पर काम करना चाहिए, और मुफ़्त operating system ReactOS में भी शामिल है; Linux के MD software RAID के ऊपर बने Btrfs के लिए अलग WinMD की ज़रूरत होती है
  • फीचर दायरे में read/write, RAID0/1/10/5/6, subvolume·snapshot, reflink copy, send/receive, zlib/LZO/Zstd compression, LXSS support, ACL·ADS·permission mapping तक शामिल हैं
  • इंस्टॉल करने के लिए latest release डाउनलोड करके btrfs.inf इंस्टॉल किया जा सकता है, या Chocolatey·Scoop का उपयोग किया जा सकता है; Windows 10/11 के Secure Boot environment में registry बदलनी पड़ सकती है या Secure Boot disable करना पड़ सकता है
  • प्रोजेक्ट LGPL के तहत वितरित किया जाता है, लेकिन फ़ाइलसिस्टम corruption के लिए ज़िम्मेदारी नहीं लेता, और रोज़मर्रा के उपयोग के लिए उपयुक्त होने का दावा करते हुए भी backup की सिफारिश करता है

WinBtrfs क्या करता है

  • WinBtrfs Linux के next-generation फ़ाइलसिस्टम Btrfs के लिए Windows ड्राइवर है
  • इसमें Linux kernel code शामिल नहीं है और इसे शुरू से दोबारा implement किया गया है, तथा यह Windows XP के बाद के वर्ज़न पर काम करना चाहिए
  • यह मुफ़्त operating system ReactOS में भी शामिल है
  • अगर Btrfs फ़ाइलसिस्टम Linux में बने MD software RAID डिवाइस के ऊपर है, तो उसे Windows में दिखाने के लिए WinMD की ज़रूरत होती है
  • संबंधित प्रोजेक्ट्स में experimental bootloader Quibble शामिल है, जो Windows को Btrfs से boot करने देता है, और Ntfs2btrfs, जो NTFS फ़ाइलसिस्टम को in-place convert करता है

समर्थित फीचर्स

  • बुनियादी फीचर्स
    • Btrfs फ़ाइलसिस्टम पढ़ना और लिखना
    • Windows द्वारा सामान्यतः ignore किए जाने वाले Btrfs partition की पहचान
    • partition-less Btrfs volume
    • asynchronous read और write
    • caching, free-space cache, free space tree
  • RAID और volume management
    • RAID0, RAID1, RAID10
    • RAID5, RAID6
    • Linux में शुरू हुए balance को resume करना सहित balancing
    • डिवाइस जोड़ना और हटाना
    • degraded mount
    • volume shrink और expand
  • फ़ाइलसिस्टम फीचर्स
    • subvolume और snapshot बनाने/पहचानने के लिए shell extension
    • hard link, symbolic link, reparse point
    • sparse file, preallocation
    • reflink copy
    • subvolume send और receive
    • scrubbing, TRIM/DISCARD
  • Windows·Linux interoperability
    • ACL को xattr security.NTACL के रूप में लाना और सेट करना
    • Alternate Data Streams को xattr के रूप में स्टोर करना; उदाहरण के लिए :Zone.Identifier को user.Zone.Identifier के रूप में स्टोर किया जाता है
    • Linux users और Windows users mapping
    • LXSS, यानी “Ubuntu on Windows” support
    • LXSS के लिए permissions आदि metadata passthrough
    • Windows 10 के case-sensitive directory flag का support
  • compression और compatibility फीचर्स
    • zlib, LZO, Zstd compression
    • Metadata UUID incompat flag का support Linux 5.0 के आधार पर
    • 3·4-disk RAID1, xxhash·sha256·blake2 checksum का support Linux 5.5 के आधार पर
    • block group tree का support Linux 6.1 के आधार पर

अभी बाकी काम

  • fs-verity का पूरा support अभी Linux 5.15 item के रूप में बाकी है
  • Zoned support अभी Linux 5.11 item के रूप में बाकी है, और यह संकेत है कि HM-SMR Windows में समर्थित नहीं हो सकता
  • defragmentation, Btrfs quota, पूरा transaction log support, और Windows transactions यानी TxF support to-do list में हैं

इंस्टॉलेशन और हटाना

  • इंस्टॉल करने के लिए latest release डाउनलोड करें, unzip करें, फिर btrfs.inf पर right-click करके Install चुनें
  • ड्राइवर signed है, इसलिए नए Windows वर्ज़न पर इसे सीधे काम करना चाहिए
  • अगर Windows 10 या 11 में Secure Boot enabled है, तो ड्राइवर लोड करने के लिए registry change की ज़रूरत पड़ सकती है
    • एक आसान तरीका BIOS में Secure Boot बंद करना भी बताया गया है
    • Windows 11 इंस्टॉल के समय Secure Boot को ढीले तौर पर required मानता है, लेकिन इंस्टॉल के बाद इसे बंद करने पर भी सिस्टम काम करता है
  • package manager से इंस्टॉल करना भी संभव है
    • Chocolatey: choco install winbtrfs
    • Scoop: scoop bucket add nonportable, scoop install winbtrfs-np -g
  • हटाने के लिए RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 btrfs.inf कमांड या Device Manager में “Btrfs controller” हटाया जा सकता है
  • अगर registry से हटाना हो, तो HKLM\SYSTEM\CurrentControlSet\services\btrfs\Start value को 4 पर सेट करके service disable करें, reboot करें, फिर key और C:\Windows\System32\drivers\btrfs.sys को delete करें

build और user mapping

  • Visual C++ 2019 से build करने के लिए directory खोलें और CMake को प्रोसेस करने दें; अगर Windows DDK ठीक से इंस्टॉल है, तो यह काम करना चाहिए
  • Linux पर GCC से build करने के लिए i686-w64-mingw32 या x86_64-w64-mingw32 cross compiler की ज़रूरत होती है
  • user mapping HKLM\SYSTEM\CurrentControlSet\services\btrfs\Mappings registry key में स्टोर होती है
    • Windows SID नाम का DWORD बनाकर उसमें Linux uid value डालें
    • मौजूदा SID को wmic useraccount get name,sid से देखा जा सकता है
  • group mapping GroupMappings के तहत स्टोर होती है
    • default entry Windows के Users group को Linux में आम तौर पर users वाले gid 100 से map करती है
    • user SID specify करके यह तय किया जा सकता है कि किसी खास user द्वारा बनाई गई file किस group की हो
  • ध्यान रहे कि User Access Control token के तहत चलने वाले process user account के बजाय BUILTIN\Administrators SID के नाम से file बनाते हैं

WSL/LXSS support

  • ड्राइवर नए LXSS वर्ज़न में Linux metadata को passthrough कर सकता है
  • इसे उपयोग करने के लिए Windows के Bash prompt में /etc/wsl.conf को इस रूप में सेट करें
    • [automount]
    • enabled = true
    • options = "metadata"
    • mountFsTab = false
  • बदलाव अगले reboot पर लागू होंगे
  • बताया गया है कि इससे वास्तविक Linux install environment में chroot करना संभव होना चाहिए

command-line काम

  • shellbtrfs.dll GUI interface देता है, लेकिन कुछ काम rundll32.exe से command line पर भी चलाए जा सकते हैं
  • rundll32 में error code लौटाने का तरीका नहीं है, इसलिए command चुपचाप fail हो सकती है
  • सामान्य कमांड
    • CreateSubvol <path>
    • CreateSnapshot <source> <destination>
    • ReflinkCopy <source> <destination> और यह wildcard तथा कई source files स्वीकार कर सकता है
  • administrator privileges वाली कमांड
    • SendSubvol <source> [-p <parent>] [-c <clone subvol>] <stream file>
    • RecvSubvol <stream file> <destination>
    • StartScrub <drive>
    • StopScrub <drive>

troubleshooting में महत्वपूर्ण सीमाएँ

  • सभी filenames को UTF-8 में encoded माना जाता है
  • Secure Boot enabled होने वाले Windows 10 के बाद के वर्ज़न में Microsoft की signing requirements के कारण ऐसी शर्तें आ गई हैं जो open source ड्राइवरों के लिए उपलब्ध नहीं लगतीं
    • workaround के तौर पर HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CI\Policy में UpgradedSystem DWORD बनाकर उसे 1 पर सेट करें और reboot करें
    • या BIOS में Secure Boot बंद किया जा सकता है
  • LXSS में drive root का case-insensitive होना Microsoft का hardcoded behavior है
  • Windows के built-in format dialog में Btrfs नहीं जोड़ा जा सकता, क्योंकि फ़ाइलसिस्टम सूची hardcoded है
    • Btrfs format के लिए शामिल mkbtrfs.exe का उपयोग करें
    • अगर Btrfs-specific options की ज़रूरत नहीं है, तो format /fs:btrfs भी संभव है
  • Synology NAS ब्लॉक डिवाइस पर LVM इस्तेमाल करता हुआ लगता है, इसलिए Windows के लिए LVM ड्राइवर के बिना उसे mount नहीं किया जा सकता
  • Thecus NAS Linux MD RAID इस्तेमाल करता है, इसलिए WinMD भी साथ में इंस्टॉल करना होगा
  • Windows और POSIX permission model इतने अलग हैं कि व्यावहारिक mapping संभव नहीं है; जिन files को Windows में edit नहीं होने देना हो, उनके लिए Windows ACL बनाई जा सकती है

v1.9 में बदलाव

  • v1.9 को 15 मार्च 2024 को रिलीज़ किया गया
  • Linux 6.1 के block group tree support को जोड़ा गया
  • सिस्टम पर बहुत अधिक load होने पर freeze होने की समस्या ठीक की गई
  • mkbtrfs में /blockgrouptree, /freespacetree options जोड़े गए
  • mkbtrfs में /noholes default को Linux की तरह enabled किया गया
  • aarch64 पर CRC32C instruction support जोड़ा गया

debug और mount options

  • WinBtrfs debug messages को तीन स्तरों में बाँटता है: errors/FIXMEs, warnings, traces
  • release version ड्राइवर केवल errors और FIXMEs को DbgPrint से रिकॉर्ड करता है, जिन्हें Microsoft DebugView में देखा जा सकता है
  • issue report करते समय पूरा debug log attach करने के लिए debug version ड्राइवर और registry settings का उपयोग किया जाता है
    • DebugLogLevel: 0 मतलब कोई message नहीं, 1 मतलब errors/FIXMEs, 2 मतलब warnings भी, 3 मतलब traces तक सब
    • LogDevice: वैकल्पिक, आउटपुट के लिए serial device
    • LogFile: वैकल्पिक, आउटपुट के लिए file
  • mount options HKLM\SYSTEM\CurrentControlSet\Services\btrfs के नीचे हर filesystem UUID subkey में स्टोर होते हैं
  • मुख्य options
    • Ignore: उस filesystem को लोड न करें
    • Readonly: Linux के ro flag की तरह write की अनुमति न दें
    • Compress, CompressForce, CompressType: default compression, forced compression, preferred compression type सेट करें
    • FlushInterval: metadata flush interval; default Linux की तरह 30 seconds है
    • SubvolId: root के रूप में mount होने वाला subvolume ID
    • SkipBalance: पिछले shutdown के समय चल रहे balance को resume करने से छोड़ दें
    • NoTrim: TRIM support disable करें
    • AllowDegraded: missing device वाले degraded volume को mount करने दें
    • NoDataCOW: नई files पर copy-on-write disable करें; यह Linux के nodatacow flag जैसा है

लाइसेंस और ज़िम्मेदारी की सीमा

  • पूरा प्रोजेक्ट GNU Lesser General Public Licence, यानी LGPL, के तहत वितरित किया जाता है
  • software का उपयोग user की अपनी ज़िम्मेदारी पर है, और फ़ाइलसिस्टम को होने वाले संभावित नुकसान के लिए कोई ज़िम्मेदारी नहीं ली जाती
  • इसे रोज़मर्रा के उपयोग के लिए उपयुक्त बताया गया है, फिर भी backup लेने की सिफारिश की गई है
  • शामिल third-party code के लिए Zlib, LZO, Zstd, BLAKE2, SHA256 संबंधी copyright और license notices शामिल हैं

1 टिप्पणियां

 
GN⁺ 2024-04-08
Hacker News की राय
  • कुछ समय से इसे आज़माना चाहता था, लेकिन GitHub issues सरसरी तौर पर देखने के बाद तुरंत ही इरादा छोड़ दिया
    blue screen, लॉकअप, usage spike, corruption जैसी समस्याएँ दिखीं, और अगर कोई स्थिर btrfs/ZFS driver हो तो मैं खुशी-खुशी पैसे देने को तैयार हूँ
    समझ नहीं आता कि ऐसे projects को ज्यादा ध्यान क्यों नहीं मिलता

    • अगर “खुशी-खुशी पैसे देने को तैयार” हैं, तो donation link है: https://github.com/maharmstone/btrfs?tab=readme-ov-file#dona...
    • क्योंकि Microsoft इसे support नहीं करता, और driver developers Windows kernel code पढ़ नहीं सकते
      इसलिए ऊपर बताई गई समस्याएँ ठीक भी हो जाएँ, तब भी Windows को btrfs से boot करना शायद मुश्किल ही रहेगा
      रोम में हो तो रोम के नियम मानो—शायद Windows को बस virtualize करके ही चलाना चाहिए
  • Linux code का इस्तेमाल किए बिना पूरी तरह से reimplementation किया गया है, यह सच में शानदार है, और XP/2k3 व ReactOS तक support करना भी बढ़िया है
    अपनी किसी पुरानी machine पर इसे आज़माकर देखूँगा

    • Rust की तरफ एक दिलचस्प pattern में I/O-less libraries बढ़ रही हैं
      इस phenomenon को कहाँ link करना ठीक रहेगा, पता नहीं, लेकिन 2019 में आया I/O-less QUIC library issue है: https://github.com/aiortc/aioquic/issues/4
      filesystems भी अगर इस pattern को अपनाएँ तो सच में अच्छा होगा
      अगर filesystem logic को reuse करते हुए Windows, FUSE, Linux, wasm के linear address storage वगैरह पर लागू किया जा सके, तो portability, reuse और hackability बहुत ज्यादा बढ़ सकती है
    • ReactOS का लक्ष्य Windows के साथ API compatibility है, इसलिए XP/2k3 और ReactOS दोनों को support करना बहुत चौंकाने वाली बात नहीं है
  • संबंधित पोस्ट:
    WinBtrfs – A Windows driver for the next-generation Linux filesystem Btrfs - https://news.ycombinator.com/item?id=15177002 - सितंबर 2017, 100 comments
    WinBtrfs v0.7 - https://news.ycombinator.com/item?id=12794214 - अक्टूबर 2016, 1 comment

  • कुछ हफ्ते पहले btrfs hard drive पर इसे इस्तेमाल करने की कोशिश की, लेकिन ठीक से चला नहीं पाया
    बाद में WSL से access किया, कुछ बार ठीक चला लेकिन फिर धीरे-धीरे fail होने लगा, और बाद में mount भी नहीं हुआ
    आखिर में समझ आया कि Linux live ISO से boot करके Windows drive और btrfs drive के बीच files copy/move कर सकते हैं, और अब Ventoy USB पर Fedora Workstation live ISO इस्तेमाल कर रहा हूँ

    • बिल्कुल असली experience जैसा लगता है
      अब Windows पर भी btrfs के जरिए data lose किया जा सकता है :-D
  • मैं इस driver को laptop पर कुछ समय से इस्तेमाल कर रहा हूँ
    Linux में काम की coding के लिए, और Windows में games·movies·media के लिए साथ में इस्तेमाल वाला setup है
    अगर btrfs partition और drive के data corruption की चिंता है, तो README के mount options पर ध्यान दें
    Arch Linux system partition के लिए Ignore इस्तेमाल करें, और बाकी सबके लिए Readonly इस्तेमाल करें
    हालांकि 20TB external HDD पर btrfs zstd:2 compression लगाकर पूरी तरह mount करके इस्तेमाल करते हुए भी मुझे CPU spikes या corruption नहीं दिखे

  • README पूरा पढ़ने की सलाह दूँगा
    author ने मेरे मन में आए सवालों और उससे भी ज्यादा बातों के जवाब दे रखे हैं

  • यह कैसे “basic और advanced” RAID 5/6 support करने का दावा करता है, यह जानने की जिज्ञासा है
    btrfs खुद तो ऐसा नहीं करता, और यहाँ “basic/advanced” से क्या मतलब है यह भी अस्पष्ट है: https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#raid5...

    • यह पूरी तरह सही नहीं है
      Linux btrfs भी आम तौर पर RAID5 support करता है, लेकिन कुछ known edge cases हैं जो इसे safe तरीके से इस्तेमाल करना मुश्किल बनाते हैं
      व्यवहार में यह “usable but experimental and developers-only” जैसा है
      WinBtrfs RAID5 mode को बस एक feature के तौर पर list करता है, यह ठीक से नहीं बताता कि यह कितना अच्छे से काम करता है
      संबंधित issue में पूछे गए सवाल भी बिना किसी ठोस जवाब के close कर दिए गए: https://github.com/maharmstone/btrfs/issues/293
      developer से status और testing पर साफ जवाब मिले बिना मैं RAID 5/6 पर data नहीं सौंपूँगा
    • लगता है RAID0/1/10 को “basic” RAID और RAID5/6 को “advanced” RAID कहा जा रहा है
      क्यों, पता नहीं, लेकिन शायद इसलिए कि पहले वाले में “advanced” parity calculations जैसी चीज़ों की जरूरत नहीं होती
  • Steam Deck पर library पहले से भरने के लिए मैंने यह driver और btrfs इस्तेमाल किया
    network से download करने में बहुत समय लग रहा था, और उस समय के internet से शायद उससे 100 गुना ज्यादा समय लगता
    यह FAT के बाद nix, Mac, Windows पर सीधे काम करने वाला पहला filesystem हो सकता है

    • लोग हमेशा UDF को भूल जाते हैं
  • शानदार
    अगर कोई इसे लंबे समय से या production में इस्तेमाल कर रहा है, तो जानना चाहूँगा कि असल में अनुभव कैसा रहा
    देखा कि TRIM support है, लेकिन जानना चाहूँगा कि RETRIM भी support होता है या नहीं
    मेरा मतलब उस feature से है जो शुरू में command queue भर जाने के कारण TRIM न हो पाए क्षेत्रों को drive optimization के दौरान release करने के लिए चाहिए होता है
    यह भी जानना चाहूँगा कि ReFS नापसंद करने वाले लोगों के लिए data parity वाला NTFS alternative के रूप में यह इस्तेमाल लायक है या नहीं, और Windows के लिए ZFS की तुलना में यह कितना mature है

    • कई सालों से main machine पर हल्के-फुल्के तौर पर इस्तेमाल कर रहा हूँ
      Setup में Windows partition, Linux partition (LUKS के ऊपर btrfs), और files रखने के लिए तीसरा btrfs partition है
      अक्सर इस्तेमाल नहीं करता, लेकिन जब करता हूँ तो इसकी मौजूदगी का एहसास भी नहीं होता
      ऐसा लगा जैसे Windows शुरू से ही btrfs को native रूप से पढ़ सकता था, और सिर्फ file access·modify·delete करने जैसे usage में कोई खास “advanced” feature इस्तेमाल नहीं किया
    • एक बार गलती से Visual Studio build main NTFS drive के बजाय btrfs के git clone से चला दिया
      जब ध्यान आया और build cancel किया, तो एक ही नाम लेकिन अलग contents वाले दो folders बन गए थे, और उसी folder name को दो बार delete करना पड़ा
      लगता है इस driver में concurrency issue है
    • WinBTRFS और OpenZFS on Windows को साथ install करने पर समस्या हो सकती है
      “Win OpenZFS driver and WinBtrfs driver dont play well with each other”
      https://github.com/openzfsonwindows/openzfs/issues/364
    • ReFS और Storage Spaces पहले से ही इस उद्देश्य को पूरा करते हैं, integrated हैं और पूरी तरह supported हैं
      सुना है कि BTRFS में ऐसे defects की सूची अविश्वसनीय रूप से लंबी है जिनमें ज़रा-सी गलत छेड़छाड़ पर यह hang हो सकता है या data corrupt कर सकता है
      जिस चीज़ की reliability उसके native operating system पर भी संदिग्ध है, उसे Windows में जबरन fit करके इस्तेमाल करना लगभग पागलपन है
      मज़े के लिए करना ठीक है, लेकिन असली data मैं इस combination के भरोसे बिल्कुल नहीं छोड़ूँगा
      “मेरे 2-disk mirror पर ठीक चलता है” सिर्फ anecdote है, data नहीं
  • जानना चाहूँगा कि इसे इस्तेमाल करने से btrfs से formatted Windows USB stick से Windows 10/11 boot करना संभव हो जाता है या नहीं

    • Rufus का इस्तेमाल करके USB SATA/NVMe drive enclosure में 10/11 को “Windows To Go” के रूप में install किया जा सकता है
      कुछ समय तक Windows 10 को रोज़ इसी तरह इस्तेमाल करने के अनुभव के हिसाब से यह काफी ठीक चला, लेकिन कुछ सावधानियाँ हैं
      स्थिर USB connection चाहिए, और ऐसा USB drive enclosure चाहिए जिसका controller chip स्थिर हो और overheat न करे
      Drive को power loss के प्रति resilient होना चाहिए
      दुर्भाग्य से power loss handling capability का आकलन करने वाली कोई सामग्री मुझे नहीं पता
      कुछ drives अचानक power cut से बड़ी समस्या झेल सकती हैं
      Intel enterprise SATA SSD और capacitors वाले Dockcase के NVMe drive पर मेरा अनुभव अच्छा रहा
      अगर drive दिखाई न दे, तो power दोबारा देना मदद कर सकता है: https://dfarq.homeip.net/fix-dead-ssd/
      automatic backup भी set कर रखना चाहिए
      performance testing या Windows-only hardware firmware updates के लिए यह बहुत उपयोगी है
      जब अलग-अलग computers पर इस्तेमाल करते हैं, तो boot के बाद Windows अक्सर confused हो जाता है और reboot करना पड़ता है; उसके बाद चल जाता है
      हालांकि WinBTRFS या किसी अलग bootloader project का इस्तेमाल करने का अनुभव नहीं है, और वह bootloader कुछ महीनों से फिलहाल टूटा हुआ लगता है
      Ventoy से Windows VHD file boot करना भी एक अच्छा विकल्प हो सकता है
    • अपने-आप में इससे नहीं होगा
      एक अलग bootloader भी चाहिए
      लेखक ने Quibble नाम का implementation बनाया है, और यह भी btrfs support करता है
      [0] https://github.com/maharmstone/quibble