1 poin oleh GN⁺ 2024-04-08 | 1 komentar | Bagikan ke WhatsApp
  • WinBtrfs v1.9 adalah driver yang memungkinkan filesystem Linux Btrfs dibaca dan ditulis di Windows, dan diimplementasikan ulang dari awal tanpa memakai kode kernel Linux
  • Seharusnya berjalan di Windows XP dan versi setelahnya, juga disertakan dalam sistem operasi gratis ReactOS; Btrfs yang berada di atas software RAID MD Linux memerlukan WinMD terpisah
  • Cakupan fiturnya mencakup baca/tulis, RAID0/1/10/5/6, subvolume dan snapshot, reflink copy, send/receive, kompresi zlib/LZO/Zstd, dukungan LXSS, hingga pemetaan ACL, ADS, dan permission
  • Instalasi dapat dilakukan dengan mengunduh rilis terbaru lalu memasang btrfs.inf, atau menggunakan Chocolatey/Scoop; pada lingkungan Secure Boot Windows 10/11, perubahan registry atau penonaktifan Secure Boot mungkin diperlukan
  • Proyek ini didistribusikan dengan lisensi LGPL, tetapi tidak bertanggung jawab atas kerusakan filesystem; meski disebut semestinya cocok untuk penggunaan harian, backup tetap disarankan

Apa yang dilakukan WinBtrfs

  • WinBtrfs adalah driver Windows untuk Btrfs, filesystem generasi berikutnya dari Linux
  • Diimplementasikan ulang dari awal tanpa menyertakan kode kernel Linux, dan seharusnya berjalan di Windows XP dan versi setelahnya
  • Juga disertakan dalam sistem operasi gratis ReactOS
  • Jika filesystem Btrfs berada di atas perangkat software RAID MD yang dibuat di Linux, diperlukan WinMD agar terlihat di Windows
  • Proyek terkait meliputi bootloader eksperimental Quibble yang memungkinkan Windows boot dari Btrfs, serta Ntfs2btrfs yang mengonversi filesystem NTFS di tempat

Fitur yang didukung

  • Fitur dasar
    • Membaca dan menulis filesystem Btrfs
    • Menemukan partisi Btrfs yang biasanya diabaikan Windows
    • Volume Btrfs tanpa partisi
    • Baca dan tulis asinkron
    • Caching, free-space cache, free space tree
  • RAID dan manajemen volume
    • RAID0, RAID1, RAID10
    • RAID5, RAID6
    • Balancing, termasuk melanjutkan balance yang dimulai di Linux
    • Menambah dan menghapus perangkat
    • Degraded mount
    • Mengecilkan dan memperbesar volume
  • Fitur filesystem
    • Ekstensi shell untuk membuat dan mengidentifikasi subvolume serta snapshot
    • Hard link, symbolic link, reparse point
    • Sparse file, preallocation
    • Reflink copy
    • Subvolume send dan receive
    • Scrubbing, TRIM/DISCARD
  • Interoperabilitas Windows dan Linux
    • Mengambil dan menetapkan ACL sebagai xattr security.NTACL
    • Menyimpan Alternate Data Streams sebagai xattr; misalnya :Zone.Identifier disimpan sebagai user.Zone.Identifier
    • Pemetaan pengguna Linux dan pengguna Windows
    • Dukungan LXSS, yaitu “Ubuntu on Windows”
    • Metadata passthrough seperti permission untuk LXSS
    • Dukungan flag direktori case-sensitive di Windows 10
  • Kompresi dan fitur kompatibilitas
    • Kompresi zlib, LZO, Zstd
    • Metadata UUID incompat flag didukung berdasarkan Linux 5.0
    • RAID1 3 dan 4 disk, checksum xxhash, sha256, dan blake2 didukung berdasarkan Linux 5.5
    • Block group tree didukung berdasarkan Linux 6.1

Pekerjaan yang masih tersisa

  • Dukungan penuh fs-verity masih tercatat sebagai item Linux 5.15
  • Dukungan Zoned masih tercatat sebagai item Linux 5.11, dengan catatan bahwa HM-SMR mungkin tidak didukung di Windows
  • Defragmentasi, Btrfs quota, dukungan penuh transaction log, dan dukungan TxF yaitu Windows transactions ada dalam daftar pekerjaan

Instalasi dan penghapusan

  • Untuk memasang, unduh rilis terbaru, ekstrak, lalu klik kanan btrfs.inf dan pilih Install
  • Driver sudah ditandatangani sehingga seharusnya langsung berjalan di Windows modern
  • Jika Secure Boot aktif di Windows 10 atau 11, perubahan registry mungkin diperlukan agar driver dapat dimuat
    • Cara yang lebih mudah juga disebutkan, yaitu mematikan Secure Boot dari BIOS
    • Windows 11 disebut mewajibkan Secure Boot secara lemah saat instalasi, tetapi setelah terpasang tetap berjalan meski dimatikan
  • Instalasi melalui package manager juga tersedia
    • Chocolatey: choco install winbtrfs
    • Scoop: scoop bucket add nonportable, scoop install winbtrfs-np -g
  • Penghapusan dapat dilakukan dengan perintah RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 btrfs.inf atau menghapus “Btrfs controller” di Device Manager
  • Jika harus menghapus lewat registry, set nilai HKLM\SYSTEM\CurrentControlSet\services\btrfs\Start menjadi 4 untuk menonaktifkan service, lalu setelah reboot hapus key tersebut dan C:\Windows\System32\drivers\btrfs.sys

Build dan pemetaan pengguna

  • Untuk build dengan Visual C++ 2019, buka direktorinya dan biarkan CMake memprosesnya; seharusnya berjalan jika Windows DDK terpasang dengan benar
  • Untuk build di Linux dengan GCC, diperlukan cross compiler i686-w64-mingw32 atau x86_64-w64-mingw32
  • Pemetaan pengguna disimpan di key registry HKLM\SYSTEM\CurrentControlSet\services\btrfs\Mappings
    • Buat DWORD dengan nama SID Windows dan masukkan nilai uid Linux
    • SID saat ini dapat dicek dengan wmic useraccount get name,sid
  • Pemetaan grup disimpan di bawah GroupMappings
    • Entri default memetakan grup Users di Windows ke gid 100, yang biasanya users di Linux
    • Dengan menentukan SID pengguna, file yang dibuat pengguna tertentu dapat dimasukkan ke grup tertentu
  • Ada catatan bahwa proses yang berjalan dengan token User Access Control membuat file sebagai SID BUILTIN\Administrators, bukan sebagai akun pengguna

Dukungan WSL/LXSS

  • Driver dapat melakukan passthrough metadata Linux ke versi LXSS terbaru
  • Untuk menggunakannya, atur /etc/wsl.conf dari prompt Bash Windows dalam bentuk berikut
    • [automount]
    • enabled = true
    • options = "metadata"
    • mountFsTab = false
  • Perubahan akan diterapkan pada reboot berikutnya
  • Disebutkan bahwa seharusnya bisa chroot ke lingkungan instalasi Linux nyata

Operasi command line

  • shellbtrfs.dll menyediakan antarmuka GUI, tetapi beberapa operasi dapat dijalankan dari command line dengan rundll32.exe
  • Karena rundll32 tidak punya cara untuk mengembalikan error code, perintah dapat gagal secara diam-diam
  • Perintah umum
    • CreateSubvol <path>
    • CreateSnapshot <source> <destination>
    • ReflinkCopy <source> <destination>, yang dapat menerima wildcard dan beberapa file sumber
  • Perintah yang memerlukan hak administrator
    • SendSubvol <source> [-p <parent>] [-c <clone subvol>] <stream file>
    • RecvSubvol <stream file> <destination>
    • StartScrub <drive>
    • StopScrub <drive>

Batasan penting dalam troubleshooting

  • Semua nama file diasumsikan dienkode sebagai UTF-8
  • Pada versi akhir Windows 10 dengan Secure Boot aktif, disebut ada kondisi akibat persyaratan tanda tangan Microsoft yang tampaknya tidak dapat digunakan oleh driver open-source
    • Workaround-nya adalah membuat DWORD UpgradedSystem di HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CI\Policy, mengaturnya ke 1, lalu reboot
    • Atau Secure Boot dapat dimatikan dari BIOS
  • Drive root yang tidak case-sensitive di LXSS adalah perilaku yang di-hardcode oleh Microsoft
  • Btrfs tidak dapat ditambahkan ke dialog format bawaan Windows, karena daftar filesystem di-hardcode
    • Untuk format Btrfs, gunakan mkbtrfs.exe yang disertakan
    • Jika tidak memerlukan opsi khusus Btrfs, format /fs:btrfs juga bisa digunakan
  • Synology NAS tampaknya memakai LVM pada block device, sehingga tidak dapat di-mount tanpa driver LVM untuk Windows
  • Thecus NAS memakai Linux MD RAID, sehingga WinMD harus dipasang bersama
  • Model permission Windows dan POSIX terlalu berbeda sehingga tidak ada pemetaan yang praktis; untuk file yang ingin dicegah agar tidak diedit di Windows, ACL Windows dapat dibuat

Perubahan v1.9

  • v1.9 dirilis pada 15 Maret 2024
  • Dukungan block group tree dari Linux 6.1 ditambahkan
  • Masalah hang saat sistem berada di bawah beban tinggi diperbaiki
  • Opsi /blockgrouptree dan /freespacetree ditambahkan ke mkbtrfs
  • Default /noholes di mkbtrfs diselaraskan menjadi aktif seperti di Linux
  • Dukungan instruksi CRC32C di aarch64 ditambahkan

Opsi debug dan mount

  • WinBtrfs membagi pesan debug menjadi tiga level: errors/FIXMEs, warnings, dan traces
  • Driver versi rilis hanya mencatat errors dan FIXMEs melalui DbgPrint, dan dapat dilihat dengan Microsoft DebugView
  • Saat melaporkan masalah dan ingin melampirkan log debug lengkap, gunakan driver versi debug dan pengaturan registry
    • DebugLogLevel: 0 tanpa pesan, 1 errors/FIXMEs, 2 termasuk warnings, 3 semuanya hingga traces
    • LogDevice: opsional, perangkat serial untuk output
    • LogFile: opsional, file untuk output
  • Opsi mount disimpan pada subkey untuk tiap UUID filesystem di bawah HKLM\SYSTEM\CurrentControlSet\Services\btrfs
  • Opsi utama
    • Ignore: tidak memuat filesystem tersebut
    • Readonly: tidak mengizinkan penulisan, seperti flag ro di Linux
    • Compress, CompressForce, CompressType: mengatur kompresi default, kompresi paksa, dan metode kompresi pilihan
    • FlushInterval: interval flush metadata, dengan default 30 detik seperti Linux
    • SubvolId: ID subvolume yang akan di-mount sebagai root
    • SkipBalance: melewati kelanjutan balance yang sedang berjalan saat shutdown terakhir
    • NoTrim: menonaktifkan dukungan TRIM
    • AllowDegraded: mengizinkan mount volume degraded yang kehilangan perangkat
    • NoDataCOW: menonaktifkan copy-on-write untuk file baru, sama seperti flag nodatacow di Linux

Lisensi dan cakupan tanggung jawab

  • Seluruh proyek didistribusikan di bawah GNU Lesser General Public Licence, yaitu LGPL
  • Disebutkan bahwa penggunaan software menjadi tanggung jawab pengguna, dan proyek tidak bertanggung jawab atas kerusakan yang mungkin terjadi pada filesystem
  • Meski dikatakan seharusnya cocok untuk penggunaan harian, backup tetap disarankan
  • Kode pihak ketiga yang disertakan memuat pemberitahuan hak cipta dan lisensi terkait Zlib, LZO, Zstd, BLAKE2, dan SHA256

1 komentar

 
GN⁺ 2024-04-08
Komentar Hacker News
  • Sudah lama ingin mencobanya, tetapi setelah menelusuri issue di GitHub saya langsung mengurungkan niat
    Terlihat masalah seperti blue screen, hang, lonjakan penggunaan sumber daya, dan korupsi data; kalau ada driver btrfs/ZFS yang stabil, saya rela membayar
    Saya benar-benar tidak paham kenapa proyek seperti ini tidak mendapat perhatian lebih besar

    • Kalau memang “rela membayar”, ada tautan donasi: https://github.com/maharmstone/btrfs?tab=readme-ov-file#dona...
    • Karena Microsoft tidak mendukungnya, dan para pengembang driver tidak bisa membaca kode kernel Windows
      Jadi meskipun masalah-masalah tadi diperbaiki, kemungkinan besar tetap akan sulit untuk melakukan boot Windows dari btrfs
      Kalau di mana bumi dipijak di situ langit dijunjung, mungkin Windows memang sebaiknya dijalankan hanya lewat virtualisasi
  • Fakta bahwa ini adalah reimplementasi penuh tanpa memakai kode Linux itu benar-benar keren, dan dukungannya untuk XP/2k3 serta ReactOS juga luar biasa
    Sepertinya saya harus mencobanya di salah satu mesin lama saya

    • Di ekosistem Rust, makin banyak library tanpa I/O dengan pola yang menarik
      Saya tidak yakin paling tepat menautkan ini ke mana, tetapi ada issue tahun 2019 tentang library QUIC tanpa I/O: https://github.com/aiortc/aioquic/issues/4
      Akan sangat bagus kalau file system juga mengikuti pola ini
      Jika logika file system bisa dipakai ulang lalu diterapkan ke Windows, FUSE, Linux, penyimpanan linear-address di wasm, dan sebagainya, portabilitas, reuse, dan kemungkinan untuk diutak-atik akan meningkat sangat besar
    • ReactOS memang menargetkan kompatibilitas API dengan Windows, jadi dukungan untuk XP/2k3 dan ReactOS sekaligus tidak terlalu mengejutkan
  • Tulisan terkait:
    WinBtrfs – A Windows driver for the next-generation Linux filesystem Btrfs - https://news.ycombinator.com/item?id=15177002 - September 2017, 100 komentar
    WinBtrfs v0.7 - https://news.ycombinator.com/item?id=12794214 - Oktober 2016, 1 komentar

  • Beberapa minggu lalu saya mencoba memakainya pada hard drive btrfs, tetapi tidak berhasil membuatnya berfungsi dengan baik
    Setelah itu saya mengaksesnya lewat WSL; sempat beberapa kali berhasil, lalu makin lama makin sering gagal, dan akhirnya bahkan tidak bisa di-mount sama sekali
    Pada akhirnya saya sadar bahwa saya bisa boot ke Linux live ISO lalu menyalin/memindahkan file antara drive Windows dan drive btrfs, dan sekarang saya memakai Fedora Workstation live ISO di USB Ventoy

    • Kedengarannya benar-benar pengalaman yang sama
      Sekarang Anda juga bisa kehilangan data di btrfs dari Windows :-D
  • Saya sudah memakai driver ini di laptop selama beberapa waktu
    Lingkungannya dipakai bersama: Linux untuk coding kerja, Windows untuk game, film, dan media
    Jika khawatir soal korupsi data pada partisi dan drive btrfs, fokuslah pada opsi mount di README
    Gunakan Ignore untuk partisi sistem Arch Linux, dan Readonly untuk sisanya
    Meski begitu, saya juga pernah memakai mount penuh pada HDD eksternal 20TB dengan kompresi btrfs zstd:2 tanpa mengalami lonjakan CPU atau korupsi

  • Saya sarankan membaca seluruh README
    Penulisnya sudah menjawab pertanyaan-pertanyaan yang saya penasaran, bahkan lebih banyak lagi

  • Saya penasaran bagaimana ini bisa mengklaim mendukung RAID 5/6 “dasar dan lanjutan”
    btrfs sendiri tidak benar-benar begitu, dan maksud dari “dasar/lanjutan” di sini juga tidak jelas: https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#raid5...

    • Itu tidak sepenuhnya tepat
      Linux btrfs pada umumnya memang mendukung RAID5, tetapi ada edge case yang sudah diketahui dan membuatnya sulit dipakai dengan aman
      Praktiknya kurang lebih seperti “bisa dipakai, tetapi eksperimental dan hanya untuk pengembang”
      WinBtrfs hanya mencantumkan mode RAID5 sebagai salah satu fitur, tanpa benar-benar membahas seberapa baik implementasinya
      Pertanyaan di issue terkait juga ditutup tanpa jawaban yang substansial: https://github.com/maharmstone/btrfs/issues/293
      Sebelum mendengar jawaban yang jelas dari pengembang tentang status dan pengujiannya, saya tidak akan mempercayakan data pada RAID 5/6
    • Sepertinya RAID0/1/10 disebut RAID “dasar” dan RAID5/6 disebut RAID “lanjutan”
      Saya tidak tahu alasannya, mungkin karena yang pertama tidak memerlukan perhitungan paritas “lanjutan” semacam itu
  • Saya memakai driver ini dan btrfs untuk mengisi library lebih dulu di Steam Deck
    Mengunduh lewat jaringan akan memakan waktu terlalu lama, dan saat itu internet saya mungkin akan butuh 100 kali lebih lama lagi
    Ini mungkin bisa menjadi file system pertama sejak FAT yang langsung bekerja di nix, Mac, dan Windows

    • Semua orang selalu lupa pada UDF
  • Bagus
    Kalau ada yang sudah memakainya dalam jangka panjang atau di lingkungan produksi, saya penasaran bagaimana pengalaman nyatanya
    Saya lihat TRIM didukung, tapi penasaran apakah RETRIM juga didukung
    Maksudnya fitur yang diperlukan untuk melepaskan area yang gagal di-TRIM pada awalnya karena antrean perintah penuh, saat optimasi drive dijalankan
    Saya juga penasaran apakah ini layak dipakai sebagai pengganti NTFS dengan paritas data bagi orang yang tidak suka ReFS, dan seberapa matang dibandingkan ZFS untuk Windows

    • Saya sudah memakainya secara ringan di mesin utama selama beberapa tahun
      Konfigurasinya punya partisi Windows, partisi Linux (btrfs di atas LUKS), dan partisi btrfs ketiga untuk menyimpan file
      Saya tidak sering memakainya, tapi saat dipakai, rasanya sampai tidak sadar kalau itu ada
      Terasa seolah Windows memang sejak awal bisa membaca btrfs secara native, dan untuk penggunaan sebatas akses, modifikasi, dan penghapusan file, saya tidak memakai fitur “lanjutan” apa pun
    • Pernah sekali saya tanpa sengaja menjalankan build Visual Studio dari clone git di btrfs, bukan di drive NTFS utama
      Saat saya sadar dan membatalkan build-nya, muncul dua folder dengan nama yang sama tetapi isi berbeda, dan saya harus menghapus folder dengan nama yang sama itu dua kali
      Sepertinya driver ini punya masalah konkurensi
    • Bisa bermasalah jika WinBTRFS dan OpenZFS on Windows dipasang bersamaan
      “Win OpenZFS driver and WinBtrfs driver dont play well with each other”
      https://github.com/openzfsonwindows/openzfs/issues/364
    • ReFS dan Storage Spaces sudah memenuhi tujuan ini, terintegrasi, dan didukung penuh
      Dari yang saya dengar, BTRFS punya daftar bug yang sangat panjang, sampai-sampai sedikit salah sentuh saja bisa membuatnya macet atau merusak data
      Memaksa sesuatu yang keandalannya diragukan bahkan di sistem operasi native ke Windows itu nyaris gila
      Mencobanya untuk senang-senang tidak masalah, tapi saya sama sekali tidak akan mempercayakan data sungguhan ke kombinasi ini
      “Di mirror 2-disk saya sih jalan dengan baik” itu cuma anekdot, bukan data
  • Saya penasaran apakah dengan ini boot Windows 10/11 dari USB stick Windows yang diformat btrfs jadi memungkinkan

    • Anda bisa memakai Rufus untuk memasang 10/11 sebagai “Windows To Go” ke enclosure drive USB SATA/NVMe
      Dari pengalaman memakai Windows 10 seperti itu setiap hari selama beberapa waktu, itu bekerja cukup baik, meski ada beberapa hal yang perlu diperhatikan
      Anda butuh koneksi USB yang stabil, enclosure drive USB dengan chip kontroler yang stabil dan tidak mudah panas
      Drive-nya juga harus tahan terhadap kehilangan daya
      Sayangnya, saya tidak tahu sumber yang mengevaluasi kemampuan penanganan kehilangan daya
      Beberapa drive bisa mengalami masalah serius saat listrik terputus mendadak
      Saya punya pengalaman baik dengan SSD SATA enterprise Intel dan drive NVMe di Dockcase yang punya kapasitor
      Jika drive tiba-tiba tidak terlihat, menyalakan ulang dayanya bisa membantu: https://dfarq.homeip.net/fix-dead-ssd/
      Sebaiknya atur juga backup otomatis
      Ini sangat berguna untuk pengujian performa atau pembaruan firmware perangkat keras yang khusus Windows
      Saat dipakai berpindah-pindah komputer, setelah boot Windows sering bingung lalu perlu reboot, dan setelah itu biasanya berfungsi
      Namun saya belum pernah mencoba WinBTRFS atau proyek bootloader terpisah, dan bootloader itu tampaknya sedang rusak sejak beberapa bulan lalu
      Menjalankan boot file VHD Windows dengan Ventoy juga mungkin menjadi opsi yang cukup baik
    • Dengan itu saja tidak bisa
      Anda juga memerlukan bootloader terpisah
      Penulisnya membuat implementasi bernama Quibble, dan ini juga mendukung btrfs
      [0] https://github.com/maharmstone/quibble