Trình điều khiển Btrfs mã nguồn mở cho Windows, WinBtrfs
(github.com/maharmstone)- 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ànhuser.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
- Lấy và đặt ACL dưới dạng xattr
- 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.infvà 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
- Chocolatey:
- Có thể gỡ bằng lệnh
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 btrfs.infhoặc xóa “Btrfs controller” trong Device Manager - Nếu phải gỡ qua registry, đặt giá trị
HKLM\SYSTEM\CurrentControlSet\services\btrfs\Startthà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-mingw32hoặcx86_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à
userstrê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ể
- Mục mặc định ánh xạ nhóm Users của Windows sang gid 100, thường là
- 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\Administratorschứ 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.conftrong Bash prompt của Windows theo dạng sau[automount]enabled = trueoptions = "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.dllcung cấp giao diện GUI, nhưng một số thao tác có thể chạy từ dòng lệnh bằngrundll32.exerundll32khô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
UpgradedSystemtrongHKEY_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
- Cách lách là tạo DWORD
- 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
- Dùng
- 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,/freespacetreevàomkbtrfs - 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 tracesLogDevice: tùy chọn, là thiết bị nối tiếp để xuất logLogFile: 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ờrocủa LinuxCompress,CompressForce,CompressType: đặt nén mặc định, nén bắt buộc, kiểu nén ưu tiênFlushInterval: khoảng thời gian flush metadata, mặc định là 30 giây như LinuxSubvolId: ID subvolume sẽ được mount làm rootSkipBalance: bỏ qua việc tiếp tục balance đang dở ở lần tắt trướcNoTrim: vô hiệu hóa hỗ trợ TRIMAllowDegraded: 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ờnodatacowcủ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
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
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
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
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
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ùngReadonlylà đượcTuy 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:2Tô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...
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
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
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
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ể
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
“Win OpenZFS driver and WinBtrfs driver dont play well with each other”
https://github.com/openzfsonwindows/openzfs/issues/364
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
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ệ
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