1 điểm bởi GN⁺ 2024-04-08 | 1 bình luận | Chia sẻ qua WhatsApp
  • WinBtrfs v1.9 là trình điều khiển cho phép đọc và ghi hệ thống tệp Btrfs của Linux trên Windows, được tái triển khai lại từ đầu mà không dùng mã nhân Linux
  • Trình điều khiển này được kỳ vọng hoạt động từ Windows XP trở lên, cũng đã được tích hợp vào hệ điều hành miễn phí ReactOS, và nếu Btrfs nằm trên thiết bị RAID phần mềm MD của Linux thì cần thêm WinMD
  • Phạm vi tính năng bao gồm đọc/ghi, RAID0/1/10/5/6, subvolume·snapshot, reflink copy, send/receive, nén zlib/LZO/Zstd, hỗ trợ LXSS, cùng ACL·ADS·ánh xạ quyền
  • Có thể cài đặt bằng cách tải bản phát hành mới nhất rồi cài btrfs.inf, hoặc dùng Chocolatey·Scoop; trong môi trường Secure Boot của Windows 10/11 có thể cần chỉnh registry hoặc tắt Secure Boot
  • Dự án được phát hành theo LGPL nhưng không chịu trách nhiệm về hỏng hóc hệ thống tệp, và dù nói rằng phù hợp cho sử dụng hằng ngày vẫn khuyến nghị sao lưu

WinBtrfs làm gì

  • WinBtrfs là trình điều khiển Windows dành cho Btrfs, hệ thống tệp thế hệ mới của Linux
  • Nó được tái triển khai từ đầu mà không bao gồm mã nhân Linux, và được kỳ vọng hoạt động từ Windows XP trở lên
  • Nó cũng đã được tích hợp vào hệ điều hành miễn phí ReactOS
  • Nếu hệ thống tệp Btrfs nằm trên thiết bị RAID phần mềm MD được tạo trên Linux thì cần WinMD để Windows nhìn thấy
  • Các dự án liên quan gồm có bootloader thử nghiệm Quibble cho phép khởi động Windows từ Btrfs, và Ntfs2btrfs để chuyển đổi tại chỗ từ hệ thống tệp NTFS

Tính năng được hỗ trợ

  • Tính năng cơ bản
    • Đọc và ghi hệ thống tệp Btrfs
    • Phát hiện phân vùng Btrfs mà Windows thường sẽ bỏ qua
    • Volume Btrfs không có phân vùng
    • Đọc và ghi bất đồng bộ
    • Caching, free-space cache, free space tree
  • RAID và quản lý volume
    • RAID0, RAID1, RAID10
    • RAID5, RAID6
    • Balancing, bao gồm tiếp tục balance đã khởi chạy trên Linux
    • Thêm và gỡ thiết bị
    • degraded mount
    • Thu nhỏ và mở rộng volume
  • Tính năng hệ thống tệp
    • Shell extension để tạo và nhận diện subvolume và snapshot
    • Hard link, symbolic link, reparse point
    • Sparse file, preallocation
    • Reflink copy
    • Subvolume send và receive
    • Scrubbing, TRIM/DISCARD
  • Tương tác Windows·Linux
    • Lấy và đặt ACL dưới dạng xattr security.NTACL
    • Lưu Alternate Data Streams dưới dạng xattr; ví dụ :Zone.Identifier được lưu thành user.Zone.Identifier
    • Ánh xạ người dùng Linux và người dùng Windows
    • Hỗ trợ LXSS, tức “Ubuntu on Windows”
    • Passthrough metadata như quyền cho LXSS
    • Hỗ trợ cờ thư mục phân biệt chữ hoa chữ thường của Windows 10
  • Nén và khả năng tương thích
    • Nén zlib, LZO, Zstd
    • Metadata UUID incompat flag được hỗ trợ theo chuẩn Linux 5.0
    • RAID1 3·4 đĩa, checksum xxhash·sha256·blake2 được hỗ trợ theo chuẩn Linux 5.5
    • Block group tree được hỗ trợ theo chuẩn Linux 6.1

Việc vẫn còn phải làm

  • Hỗ trợ đầy đủ fs-verity vẫn còn nằm trong mục Linux 5.15
  • Hỗ trợ Zoned vẫn còn nằm trong mục Linux 5.11, với lưu ý rằng HM-SMR có thể không được hỗ trợ trên Windows
  • Chống phân mảnh, Btrfs quota, hỗ trợ đầy đủ transaction log, và hỗ trợ TxF là các mục còn trong danh sách việc cần làm

Cài đặt và gỡ bỏ

  • Để cài đặt, tải bản phát hành mới nhất, giải nén rồi nhấp chuột phải vào btrfs.inf và chọn Install
  • Trình điều khiển đã được ký nên trên Windows mới sẽ hoạt động ngay
  • Nếu Secure Boot được bật trên Windows 10 hoặc 11 thì có thể cần chỉnh registry để nạp trình điều khiển
    • Một cách dễ hơn được nêu ra là tắt Secure Boot trong BIOS
    • Có ghi rằng Windows 11 yêu cầu Secure Boot khá lỏng khi cài đặt, nhưng sau khi cài xong thì vẫn hoạt động nếu tắt đi
  • Cũng có thể cài bằng trình quản lý gói
    • Chocolatey: choco install winbtrfs
    • Scoop: scoop bucket add nonportable, scoop install winbtrfs-np -g
  • Có thể gỡ bằng lệnh RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 btrfs.inf hoặc xóa “Btrfs controller” trong Device Manager
  • Nếu phải gỡ qua registry, đặt giá trị HKLM\SYSTEM\CurrentControlSet\services\btrfs\Start thành 4 để vô hiệu hóa dịch vụ, khởi động lại rồi xóa key và C:\Windows\System32\drivers\btrfs.sys

Build và ánh xạ người dùng

  • Để build bằng Visual C++ 2019, chỉ cần mở thư mục để CMake xử lý; nếu Windows DDK được cài đúng thì sẽ hoạt động
  • Để build bằng GCC trên Linux, cần trình biên dịch chéo i686-w64-mingw32 hoặc x86_64-w64-mingw32
  • Ánh xạ người dùng được lưu trong key registry HKLM\SYSTEM\CurrentControlSet\services\btrfs\Mappings
    • Tạo DWORD với tên là SID của Windows và nhập giá trị uid của Linux
    • Có thể kiểm tra SID hiện tại bằng wmic useraccount get name,sid
  • Ánh xạ nhóm được lưu dưới GroupMappings
    • Mục mặc định ánh xạ nhóm Users của Windows sang gid 100, thường là users trên Linux
    • Có thể chỉ định SID người dùng để tệp do người dùng cụ thể tạo sẽ thuộc về một nhóm cụ thể
  • Cần lưu ý rằng các tiến trình chạy bằng token của User Access Control sẽ tạo tệp bằng SID BUILTIN\Administrators chứ không phải tài khoản người dùng

Hỗ trợ WSL/LXSS

  • Trình điều khiển có thể passthrough metadata Linux cho các phiên bản LXSS mới nhất
  • Để dùng tính năng này, cấu hình /etc/wsl.conf trong Bash prompt của Windows theo dạng sau
    • [automount]
    • enabled = true
    • options = "metadata"
    • mountFsTab = false
  • Các thay đổi sẽ được áp dụng ở lần khởi động tiếp theo
  • Có ghi rằng nên có thể chroot vào một môi trường cài đặt Linux thực sự

Thao tác dòng lệnh

  • shellbtrfs.dll cung cấp giao diện GUI, nhưng một số thao tác có thể chạy từ dòng lệnh bằng rundll32.exe
  • rundll32 không có cách trả về mã lỗi nên lệnh có thể thất bại một cách im lặng
  • Lệnh thông thường
    • CreateSubvol <path>
    • CreateSnapshot <source> <destination>
    • ReflinkCopy <source> <destination>; có thể nhận wildcard và nhiều tệp nguồn
  • Lệnh cần quyền quản trị viên
    • SendSubvol <source> [-p <parent>] [-c <clone subvol>] <stream file>
    • RecvSubvol <stream file> <destination>
    • StartScrub <drive>
    • StopScrub <drive>

Các giới hạn quan trọng khi khắc phục sự cố

  • Tất cả tên tệp được giả định là mã hóa bằng UTF-8
  • Trên các bản Windows 10 đời sau có bật Secure Boot, có ghi rằng do yêu cầu chữ ký của Microsoft nên xuất hiện điều kiện dường như không thể dùng với trình điều khiển mã nguồn mở
    • Cách lách là tạo DWORD UpgradedSystem trong HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CI\Policy, đặt thành 1 rồi khởi động lại
    • Hoặc có thể tắt Secure Boot trong BIOS
  • Việc thư mục gốc của ổ đĩa trong LXSS không phân biệt chữ hoa chữ thường là hành vi được Microsoft hardcode
  • Không thể thêm Btrfs vào hộp thoại format mặc định của Windows vì danh sách hệ thống tệp đã được hardcode
    • Dùng mkbtrfs.exe đi kèm để format Btrfs
    • Nếu không cần tùy chọn riêng của Btrfs thì cũng có thể dùng format /fs:btrfs
  • Synology NAS có vẻ dùng LVM trên thiết bị khối nên sẽ không thể mount nếu không có trình điều khiển LVM cho Windows
  • Thecus NAS dùng Linux MD RAID nên cần cài thêm WinMD
  • Mô hình quyền của Windows và POSIX khác nhau quá nhiều nên không có cách ánh xạ thực dụng; với các tệp muốn ngăn chỉnh sửa từ Windows, có thể tạo Windows ACL

Thay đổi trong v1.9

  • v1.9 được phát hành ngày 15 tháng 3 năm 2024
  • Đã bổ sung hỗ trợ block group tree của Linux 6.1
  • Đã sửa lỗi hệ thống bị treo khi ở trạng thái tải cao
  • Đã thêm các tùy chọn /blockgrouptree, /freespacetree vào mkbtrfs
  • Trong mkbtrfs, giá trị mặc định của /noholes đã được bật như trên Linux
  • Đã bổ sung hỗ trợ lệnh CRC32C trên aarch64

Debug và tùy chọn mount

  • WinBtrfs chia thông điệp debug thành ba mức: errors/FIXMEs, warnings, traces
  • Bản phát hành của trình điều khiển chỉ ghi errors và FIXMEs qua DbgPrint, có thể xem bằng Microsoft DebugView
  • Khi báo lỗi, có thể dùng trình điều khiển bản debug và cấu hình registry để đính kèm toàn bộ log debug
    • DebugLogLevel: 0 là không có thông điệp, 1 là errors/FIXMEs, 2 bao gồm warnings, 3 là toàn bộ đến traces
    • LogDevice: tùy chọn, là thiết bị nối tiếp để xuất log
    • LogFile: tùy chọn, là tệp để xuất log
  • Tùy chọn mount được lưu trong các khóa con UUID của từng hệ thống tệp dưới HKLM\SYSTEM\CurrentControlSet\Services\btrfs
  • Các tùy chọn chính
    • Ignore: không nạp hệ thống tệp đó
    • Readonly: không cho phép ghi, giống cờ ro của Linux
    • Compress, CompressForce, CompressType: đặt nén mặc định, nén bắt buộc, kiểu nén ưu tiên
    • FlushInterval: khoảng thời gian flush metadata, mặc định là 30 giây như Linux
    • SubvolId: ID subvolume sẽ được mount làm root
    • SkipBalance: bỏ qua việc tiếp tục balance đang dở ở lần tắt trước
    • NoTrim: vô hiệu hóa hỗ trợ TRIM
    • AllowDegraded: cho phép mount volume degraded bị thiếu thiết bị
    • NoDataCOW: vô hiệu hóa copy-on-write cho tệp mới, giống cờ nodatacow của Linux

Giấy phép và phạm vi trách nhiệm

  • Toàn bộ dự án được phát hành theo GNU Lesser General Public Licence, tức LGPL
  • Có nêu rõ rằng việc sử dụng phần mềm là do người dùng tự chịu trách nhiệm, và tác giả không chịu trách nhiệm với hỏng hóc có thể xảy ra đối với hệ thống tệp
  • Dù nói rằng phần mềm nên phù hợp cho sử dụng hằng ngày, dự án vẫn khuyến nghị sao lưu
  • Mã của bên thứ ba đi kèm gồm các thông báo bản quyền·giấy phép liên quan tới Zlib, LZO, Zstd, BLAKE2 và SHA256

1 bình luận

 
GN⁺ 2024-04-08
Các ý kiến trên Hacker News
  • Tôi đã muốn thử dùng một thời gian, nhưng lướt qua các issue trên GitHub thì bỏ cuộc ngay
    Thấy có các vấn đề như màn hình xanh, bị khóa, mức sử dụng tăng vọt, hỏng dữ liệu; nếu có driver btrfs/ZFS ổn định thì tôi sẵn sàng trả tiền
    Tôi không hiểu lắm vì sao những dự án như thế này lại không được chú ý nhiều hơn

    • Nếu “sẵn sàng trả tiền” thì có liên kết tài trợ: https://github.com/maharmstone/btrfs?tab=readme-ov-file#dona...
    • Vì Microsoft không hỗ trợ, và các lập trình viên driver không thể đọc mã kernel Windows
      Vì vậy, ngay cả khi các vấn đề nói trên được sửa, khả năng boot Windows từ btrfs vẫn có thể còn khó
      Nhập gia tùy tục mà; có lẽ Windows chỉ nên được chạy bằng ảo hóa thôi
  • Việc nó được tái triển khai hoàn toàn mà không dùng mã Linux thật sự rất tuyệt, và việc hỗ trợ cả XP/2k3 lẫn ReactOS cũng rất hay
    Tôi sẽ thử dùng trên một trong những máy cũ của mình

    • Bên Rust đang có một xu hướng thú vị là ngày càng nhiều thư viện không có I/O
      Tôi không biết nên liên kết hiện tượng này ở đâu cho phù hợp, nhưng có một issue về thư viện QUIC không có I/O đăng năm 2019: https://github.com/aiortc/aioquic/issues/4
      Sẽ thật tuyệt nếu hệ thống tệp cũng đi theo mô hình này
      Nếu có thể tái sử dụng logic hệ thống tệp rồi áp dụng cho Windows, FUSE, Linux, kho lưu trữ địa chỉ tuyến tính của wasm, v.v., thì tính di động, khả năng tái sử dụng và khả năng hack sẽ tăng lên rất lớn
    • ReactOS nhắm tới tương thích API với Windows, nên việc hỗ trợ cả XP/2k3 lẫn ReactOS cũng không quá ngạc nhiên
  • Bài liên quan:
    WinBtrfs – Driver Windows cho hệ thống tệp Linux thế hệ mới Btrfs - https://news.ycombinator.com/item?id=15177002 - tháng 9/2017, 100 bình luận
    WinBtrfs v0.7 - https://news.ycombinator.com/item?id=12794214 - tháng 10/2016, 1 bình luận

  • Vài tuần trước tôi đã thử dùng với ổ cứng btrfs nhưng không làm cho nó hoạt động ổn được
    Sau đó tôi truy cập bằng WSL; vài lần đầu thì ổn, rồi dần dần bắt đầu lỗi, về sau thậm chí không mount được nữa
    Cuối cùng tôi nhận ra chỉ cần boot bằng live ISO Linux rồi sao chép/di chuyển tệp giữa ổ Windows và ổ btrfs là được, và hiện giờ tôi đang dùng Fedora Workstation live ISO trên USB Ventoy

    • Nghe đúng là trải nghiệm thật
      Giờ thì ngay cả trên Windows cũng có thể mất dữ liệu với btrfs rồi :-D
  • Tôi đã dùng driver này trên laptop một thời gian
    Môi trường của tôi là dùng chung: trên Linux để lập trình cho công việc, trên Windows để chơi game, xem phim và media
    Nếu lo dữ liệu trên phân vùng và ổ btrfs bị hỏng, hãy chú ý đến tùy chọn mount trong README
    Với phân vùng hệ thống Arch Linux thì dùng Ignore, còn tất cả phần còn lại dùng Readonly là được
    Tuy nhiên, tôi vẫn chưa gặp tình trạng CPU tăng vọt hay hỏng dữ liệu dù mount đầy đủ ổ HDD ngoài 20TB dùng nén btrfs zstd:2

  • Tôi khuyên nên đọc toàn bộ README
    Tác giả đã trả lời những câu hỏi mà tôi tò mò, và còn nhiều nội dung hơn thế nữa

  • Tôi tò mò không biết cái này hỗ trợ RAID 5/6 “cơ bản và nâng cao” như thế nào
    Bản thân btrfs không như vậy, và “cơ bản/nâng cao” ở đây nghĩa là gì cũng khá mơ hồ: https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#raid5...

    • Nói vậy không hoàn toàn chính xác
      Linux btrfs nhìn chung cũng hỗ trợ RAID5, nhưng có các edge case đã biết khiến việc dùng an toàn trở nên khó khăn
      Trên thực tế, nó gần với “dùng được nhưng mang tính thử nghiệm và chỉ dành cho developer” hơn
      WinBtrfs chỉ liệt kê chế độ RAID5 như một tính năng, chứ không thực sự bàn đến việc nó hoạt động tốt đến đâu
      Các câu hỏi trong issue liên quan cũng đã bị đóng mà không có câu trả lời thực chất: https://github.com/maharmstone/btrfs/issues/293
      Trước khi nghe được câu trả lời rõ ràng từ developer về tình trạng và kiểm thử, tôi sẽ không giao dữ liệu cho RAID 5/6
    • Có vẻ họ gọi RAID0/1/10 là RAID “cơ bản” và RAID5/6 là RAID “nâng cao”
      Không rõ vì sao, nhưng có lẽ vì nhóm trước không cần những thứ như tính toán parity “nâng cao”
  • Tôi đã dùng driver này và btrfs để nạp sẵn thư viện cho Steam Deck
    Tải qua mạng thì quá lâu, và với mạng Internet lúc đó chắc sẽ mất lâu hơn gấp 100 lần
    Đây có thể là *hệ thống tệp đầu tiên sau FAT chạy được ngay trên nix, Mac và Windows

    • Mọi người lúc nào cũng quên UDF
  • Tuyệt vời
    Nếu có ai dùng trong thời gian dài hoặc trong production thì tôi tò mò thực tế ra sao
    Tôi thấy có hỗ trợ TRIM, nhưng cũng tò mò liệu có hỗ trợ RETRIM không
    Ý tôi là tính năng cần để giải phóng trong lúc tối ưu hóa ổ đĩa những vùng ban đầu không TRIM được vì hàng đợi lệnh bị đầy
    Tôi cũng tò mò liệu nó có đáng dùng như một giải pháp thay thế NTFS có data parity cho những người ghét ReFS không, và so với ZFS cho Windows thì nó trưởng thành đến mức nào

    • Tôi đã dùng nhẹ nhàng trên máy chính trong vài năm
      Cấu hình gồm một phân vùng Windows, một phân vùng Linux (btrfs trên LUKS), và một phân vùng btrfs thứ ba để lưu tệp
      Tôi không dùng thường xuyên, nhưng khi dùng thì gần như không nhận ra sự tồn tại của nó
      Cảm giác như Windows vốn đã có thể đọc btrfs native từ đầu, và trong mức sử dụng chỉ truy cập/sửa/xóa tệp đơn giản thì tôi không dùng tính năng “nâng cao” nào đáng kể
    • Có lần tôi vô tình chạy build Visual Studio từ một git clone trên btrfs thay vì ổ NTFS chính
      Khi nhận ra và hủy build, đã xuất hiện hai thư mục cùng tên nhưng nội dung khác nhau, và tôi phải xóa cùng một tên thư mục hai lần
      Có vẻ driver này có vấn đề về đồng thời
    • Cài WinBTRFS cùng với OpenZFS on Windows có thể gây vấn đề
      “Win OpenZFS driver and WinBtrfs driver dont play well with each other”
      https://github.com/openzfsonwindows/openzfs/issues/364
    • ReFS và Storage Spaces đã đáp ứng mục đích này, được tích hợp và được hỗ trợ đầy đủ
      Theo những gì tôi nghe được, BTRFS có một danh sách lỗi dài đến phi lý, chỉ cần chạm sai một chút là có thể treo hoặc làm hỏng dữ liệu
      Việc cố nhét vào Windows để dùng một thứ mà ngay cả trên hệ điều hành native độ tin cậy còn đáng ngờ thì gần như là điên rồ
      Thử cho vui thì được, nhưng tôi tuyệt đối sẽ không giao dữ liệu thật cho tổ hợp này
      “Mirror 2 đĩa của tôi chạy ổn” chỉ là giai thoại, không phải dữ liệu
  • Tôi tò mò liệu dùng cái này có thể boot Windows 10/11 từ USB stick Windows được format bằng btrfs không

    • Có thể dùng Rufus để cài 10/11 dưới dạng “Windows To Go” vào enclosure ổ USB SATA/NVMe
      Theo trải nghiệm dùng Windows 10 hằng ngày như vậy trong một thời gian, nó chạy khá ổn, nhưng có vài điểm cần chú ý
      Cần kết nối USB ổn định, và cần enclosure ổ USB có chip controller ổn định, không bị quá nhiệt
      Ổ đĩa cần chịu được mất nguồn
      Tiếc là tôi không biết tài liệu nào đánh giá khả năng xử lý mất nguồn
      Một số ổ có thể gặp vấn đề nghiêm trọng khi bị cắt nguồn đột ngột
      Tôi có trải nghiệm tốt với SSD SATA doanh nghiệp của Intel và ổ NVMe trong Dockcase có tụ điện
      Nếu ổ không còn hiện ra, cấp lại nguồn có thể giúp ích: https://dfarq.homeip.net/fix-dead-ssd/
      Cũng nên thiết lập backup tự động
      Rất hữu ích cho benchmark hoặc cập nhật firmware phần cứng chỉ có trên Windows
      Khi chuyển qua lại giữa các máy tính, sau khi boot Windows thường bị lúng túng rồi phải reboot, và sau đó thì chạy được
      Tuy nhiên tôi chưa có kinh nghiệm dùng WinBTRFS hay dự án bootloader riêng, và bootloader đó có vẻ đã hỏng từ vài tháng trước đến nay
      Boot tệp Windows VHD bằng Ventoy cũng có thể là một lựa chọn không tệ
    • Chỉ riêng nó thì không được
      Cần thêm một bootloader riêng
      Tác giả đã tạo một triển khai tên là Quibble, và cái này cũng hỗ trợ btrfs
      [0] https://github.com/maharmstone/quibble