An excerpt from the repository, fetched Nov 13, 2026.
Read the project’s introduction
WinBtrfs v1.10
WinBtrfs is a Windows driver for the next-generation Linux filesystem Btrfs.
A reimplementation from scratch, it contains no code from the Linux kernel,
and should work on any version from Windows XP onwards. It is also included
as part of the free operating system ReactOS.
If your Btrfs filesystem is on a MD software RAID device created by Linux, you
will also need WinMD to get this to appear
under Windows.
See also Quibble, an experimental
bootloader allowing Windows to boot from Btrfs, and Ntfs2btrfs,
a tool which allows in-place conversion of NTFS filesystems.
First, a disclaimer:
You use this software at your own risk. I take no responsibility for any damage
it may do to your filesystem. It ought to be suitable for day-to-day use, but
make sure you take backups anyway.
Everything here is released under the GNU Lesser General Public Licence (LGPL);
see the file LICENCE for more info. You are encouraged to play about with the
source code as you will, and I'd appreciate a note (mark@harmstone.com) if you
come up with anything nifty.
See at the end of this document for copyright details of third-party code that's
included here.
Features
Reading and writing of Btrfs filesystems
Basic RAID: RAID0, RAID1, and RAID10
Advanced RAID: RAID5 and RAID6
Caching
Discovery of Btrfs partitions, even if Windows would normally ignore them
Getting and setting of Access Control Lists (ACLs), using the xattr
security.NTACL
Alternate Data Streams (e.g. :Zone.Identifier is stored as the xattr
user.Zone.Identifier)
Mappings from Linux users to Windows ones (see below)
Symlinks and other reparse points
Shell extension to identify and create subvolumes, including snapshots
Hard links
Sparse files
Free-space cache
Preallocation
Asynchronous reading and writing
Partition-less Btrfs volumes
Per-volume registry mount options (see below)
zlib compression
LZO compression
LXSS ("Ubuntu on Windows") support
Balancing (including resuming balances started on Linux)
Device addition and removal
Creation of new filesystems with mkbtrfs.exe and ubtrfs.dll
Scrubbing
TRIM/DISCARD
Reflink copy
Subvol send and receive
Degraded mounts
Free space tree (compat_ro flag free_space_cache)
Shrinking and expanding
Passthrough of permissions etc. for LXSS
Zstd compression
Windows 10 case-sensitive directory flag
Oplocks
Metadata UUID incompat flag (Linux 5.0)
Three- and four-disk RAID1 (Linux 5.5)
New checksum types (xxhash, sha256, blake2) (Linux 5.5)
Block group tree (Linux 6.1)
Todo
Full fs-verity support (Linux 5.15)
Zoned support (Linux 5.11) (HM-SMR not supported on Windows?)
Defragmentation
Support for Btrfs quotas
Full transaction log support
Support for Windows transactions (TxF)
Installation
To install the driver, download and extract the latest release,
right-click btrfs.inf, and choose Install. The driver is signed, so should work out
of the box on modern versions of Windows.
If you using Windows 10 or 11 and have Secure Boot enabled, you may have to make a Registry
change in order for the driver to be loaded - see below. It's easier though
just to turn off Secure Boot in your BIOS, unless you have a particular need for it. Bear in
mind that Windows 11 soft-requires Secure Boot to be installed, but will work fine afterwords
with it turned off.
WinBtrfs is also available on the following package managers:
Chocolatey
choco install winbtrfs
Scoop
scoop bucket add nonportable
scoop install winbtrfs-np -g
Uninstalling
If you want to uninstall, from an elevated command prompt first run:
pnputil /enum-drivers
There should be two entries for btrfs.inf and btrfs-vol.inf, with files of
the form oemNN.inf. Make a note of their names.
Then for each run...
pnputil /delete-driver oemNN.inf /uninstall /force
...and reboot.
If you need to uninstall via the registry, open regedit and set the value of
HKLM\SYSTEM\CurrentControlSet\services\btrfs\Start to 4, to disable the service.
After you reboot, you can then delete the btrfs key and remove
C:\Windows\System32\drivers\btrfs.sys.
Compilation
To compile with Visual C++ 2019, open the directory and let CMake do its thing.
If you have the Windows DDK installed correctly, it should just work.
To compile with GCC on Linux, you will need a cross-compiler set up, for either
i686-w64-mingw32 or x86_64-w64-mingw32. Create a build directory, then use
either mingw-x86.cmake or mingw-amd64.cmake as CMake toolchain files to
generate your Makefile.
Mappings
The user mappings are stored in the registry key
HKLM\SYSTEM\CurrentControlSet\services\btrfs\Mappings. Create a DWORD with the
name of your Windows SID (e.g. S-1-5-21-1379886684-2432464051-424789967-1001),
and the value of your Linux uid (e.g. 1000). It will take effect next time the
driver is loaded.
You can find your current SID by running whoami /user.
Similarly, the group mappings are stored in under GroupMappings. You can find
your group SIDs by running whoami /groups. The default entry maps Windows'
Users group to gid 100, which is usually "users" on Linux.
You can also specify user SIDs here to force files created by a user to belong
to a certain group. The setgid flag also works as on Linux.
Note that processes running under User Access Control tokens create files as
the BUILTIN\Administrators SID (S-1-5-32-544), rather as a user account.
LXSS ("Ubuntu on Windows" / "Windows Subsystem for Linux")
The driver will passthrough Linux metadata to recent versions of LXSS, but you
will have to let Windows know that you wish to do this. From a Bash prompt on
Windows, edit /etc/wsl.conf to look like the following:
[automount]
enabled = true
options = "metadata"
mountFsTab = false
It will then take effect next time you reboot. Yes, you should be able to chroot
into an actual Linux installation, if you wish.
Commands
The DLL file shellbtrfs.dll provides the GUI interface, but it can also be used
with rundll32.exe to carry out some tasks from the command line, which may be
useful if you wish to schedule something to run periodi
Read the full README on GitHub