# WinBtrfs: Reading and Writing Btrfs Volumes from Windows

> WinBtrfs is a from-scratch Windows kernel driver for the Linux Btrfs filesystem, shipped under the LGPL. It is for people who dual-boot, move disks between Linux and Windows, or want to mount a Btrfs volume without leaving Windows, and it comes with a clear warning about backups.

**maharmstone/btrfs** — WinBtrfs - an open-source btrfs driver for Windows

- Repository: https://github.com/maharmstone/btrfs
- Stars: 7,805 · Forks: 309
- Language: C
- License: LGPL-3.0
- Published: 2026-09-22 · Updated: 2026-09-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/maharmstone-btrfs

## What WinBtrfs does that Windows cannot do alone

Windows has no Btrfs driver of its own. When you attach a disk formatted with Btrfs, Windows typically does not present it as a usable volume, so the files on it are unreachable until you boot Linux or move the disk to a machine that understands the format. WinBtrfs fills that gap. The README describes it as a reimplementation from scratch that contains no code from the Linux kernel and should work on any version from Windows XP onwards, and it is also included as part of ReactOS. The target reader is someone who runs both operating systems on one machine, or who regularly moves external drives between a Linux box and a Windows one. The driver covers reading and writing, so it is not a read-only rescue viewer. It also handles the parts of Btrfs that make the filesystem interesting: subvolumes, snapshots, reflink copies, compression, RAID levels from RAID0 through RAID6, scrubbing, balancing and send/receive. The README opens with a disclaimer that you use the software at your own risk and that it ought to be suitable for day-to-day use but you should take backups anyway. That sentence sets the tone for everything else: this is a working driver, not a guarantee.

## How the driver attaches to a Btrfs volume

The repository is a Windows kernel driver project written in C, built with CMake, with separate toolchain files for Visual C++ and for MinGW cross-compilation from Linux (mingw-x86.cmake and mingw-amd64.cmake, plus msvc-* variants including an aarch64 target). The installed artifacts are driver packages: the README's uninstall instructions refer to two entries for btrfs.inf and btrfs-vol.inf, with files of the form oemNN.inf, and to C:\Windows\System32\drivers\btrfs.sys. So the architecture is a storage driver plus a volume driver, which is what lets Windows discover Btrfs partitions that it would normally ignore. A separate user-mode DLL, shellbtrfs.dll, provides the GUI and the command-line entry points, and the README notes it can be driven with rundll32.exe. Metadata that has no native Windows equivalent is mapped onto NTFS concepts: ACLs are stored using the xattr security.NTACL, and Alternate Data Streams such as :Zone.Identifier are stored as the xattr user.Zone.Identifier. Ownership is bridged through registry mappings rather than guessed, which is the design decision that matters most for anyone sharing a disk between the two systems. The README also flags an edge case worth knowing about: processes running under User Access Control tokens create files as the BUILTIN\Administrators SID (S-1-5-32-544) rather than as a user account, which changes what ownership you get on new files.

## Installing WinBtrfs and creating your first snapshot

The README's installation path is manual and short: download and extract the latest release from the GitHub releases page, right-click btrfs.inf, and choose Install. The driver is signed, so the README says it should work out of the box on modern versions of Windows. There is a Secure Boot caveat. On Windows 10 or 11 with Secure Boot enabled you may have to make a registry change for the driver to load, and the README suggests it is easier to turn Secure Boot off in the BIOS unless you specifically need it, while noting that Windows 11 soft-requires Secure Boot to be installed but will work afterwards with it turned off. If you prefer a package manager, two are listed. Chocolatey:

```bash
choco install winbtrfs
```

And Scoop, which uses a nonportable bucket because a driver cannot be a portable app:

```bash
scoop bucket add nonportable
scoop install winbtrfs-np -g
```

The -g flag installs globally, which is what a driver package needs. Once the driver is loaded, the shell extension is how you work with subvolumes. The README lists rundll32 entry points for the command line, and warns that rundll32 provides no mechanism to return error codes, so any of these commands may fail silently. Creating a snapshot of one subvolume into another path looks like this:

```bash
rundll32.exe shellbtrfs.dll,CreateSnapshot <source> <destination>
```

Replace the placeholders with real paths. The same DLL exposes CreateSubvol for a new subvolume and ReflinkCopy for a copy-on-write duplicate, and ReflinkCopy also accepts wildcards. Because failures are silent, check the destination in Explorer after each command rather than trusting the exit status. If you need Linux-to-Windows identity mapping, the registry key is HKLM\SYSTEM\CurrentControlSet\services\btrfs\Mappings, where you create a DWORD named after your Windows SID with the value of your Linux uid; the README says it takes effect next time the driver is loaded, and whoami /user prints your current SID.

## Where WinBtrfs stops: quotas, defrag and fs-verity

The README's Todo section is the honest boundary of the project. Full fs-verity support, zoned support, defragmentation, Btrfs quotas, full transaction log support and Windows transactions (TxF) are all listed as unfinished. That is a short list, but the omissions are not equally minor. No quota support means you cannot enforce or inspect Btrfs qgroups from Windows, so a shared volume with per-subvolume limits has to be managed from Linux. No defragmentation means fragmentation that builds up on the Windows side stays there. No full transaction log support is the one with the widest blast radius, because it affects how much of an interrupted operation survives; combined with the README's own warning that rundll32 commands may fail silently, it argues for treating write-heavy operations as something to verify rather than assume. The author's disclaimer at the top is explicit that damage to a filesystem is possible and that backups are the answer. There is also a functional dependency that is easy to miss: if your Btrfs filesystem sits on an MD software RAID device created by Linux, you also need WinMD before the volume will appear under Windows at all. And the driver is not a repair tool. The README lists scrubbing and balancing, including resuming balances started on Linux, but the Btrfs check and restore utilities people search for are Linux-side programs with no Windows equivalent documented here.

## WinBtrfs versus mounting the disk in Linux or a VM

The obvious alternative to WinBtrfs is not another Windows driver, because there is no second one in this material to compare against. It is the approach of not mounting Btrfs on Windows: boot Linux, or pass the disk through to a Linux virtual machine, and do the work there. The difference in approach is fundamental. A Linux kernel has the complete, upstream implementation of Btrfs, including the quota, defrag and transaction log features that WinBtrfs lists as Todo. WinBtrfs is a reimplementation written independently, which is why it can run from Windows XP onwards and why it ships as a signed Windows driver package rather than a filesystem module. What you get in exchange is convenience: no reboot, no VM, and Explorer integration for subvolumes and snapshots. What you give up is feature completeness and the maturity of the upstream implementation. For a disk you only need to read occasionally, the VM route costs a little setup and avoids installing a kernel driver entirely. For a disk you work with daily from Windows, the driver earns its place. The choice is really about how often you cross the boundary, not about which implementation is better in the abstract.

## Maintenance, licence and the cost of upgrading

The repository is not archived, and the last push was on 2026-09-14. Release v1.10 is dated 2026-09-01, following v1.9 in March 2024 and v1.8.2 in January 2023. That cadence is worth reading carefully: a gap of roughly two and a half years separates v1.8.2 from v1.9, and then v1.10 arrives about eighteen months later. This is not a project that ships on a schedule, so plan for long stretches without fixes and treat each release as an event. Upgrading is not a package-manager update in the usual sense. The README's uninstall procedure uses pnputil /enum-drivers to find the two btrfs.inf and btrfs-vol.inf entries listed as oemNN.inf, then pnputil /delete-driver oemNN.inf /uninstall /force for each, followed by a reboot. A driver replacement therefore means an elevated command prompt, a reboot, and a fresh install of the new package, which is more disruptive than updating an application. The fallback if uninstall misbehaves is a registry change: set HKLM\SYSTEM\CurrentControlSet\services\btrfs\Start to 4 to disable the service, reboot, then delete the btrfs key and remove C:\Windows\System32\drivers\btrfs.sys. On licensing, the project is released under the GNU Lesser General Public Licence, with the LICENCE file in the repository root and the README pointing to it. LGPL matters most if you redistribute the driver or link against it; the README also notes that third-party code is included and that copyright details appear at the end of the document. That is a question for your own legal review, not something this article can settle.

## Conclusion

WinBtrfs is for Windows users who need to read or write an existing Btrfs volume, especially dual-boot and disk-swapping setups, and for anyone who wants subvolume and snapshot management from Explorer through shellbtrfs.dll. It is not for anyone who needs quotas, defragmentation, full fs-verity or full transaction log support, since those are listed as unfinished in the README's Todo section, and it is not a substitute for a Linux-side repair toolset. Before adopting it, verify that your Windows build will load a signed driver with Secure Boot on, confirm the registry Mappings entries match your Windows SIDs and Linux uids, and test on a scratch filesystem rather than your only copy of the data.

## FAQ

### How do I use Btrfs on Windows?

Install WinBtrfs by downloading and extracting the latest release, then right-clicking btrfs.inf and choosing Install. The driver is signed, so the README says it should work out of the box on modern versions of Windows, though Secure Boot on Windows 10 or 11 may require a registry change or turning Secure Boot off.

### How do I use Btrfs snapshots from Windows?

The shellbtrfs.dll shell extension identifies and creates subvolumes including snapshots. From the command line the README gives rundll32.exe shellbtrfs.dll,CreateSnapshot <source> <destination>, and warns that rundll32 returns no error codes, so the command may fail silently.

### Is Btrfs better than ext4 for a Windows user?

WinBtrfs does not answer that question. It is a Windows driver for reading and writing existing Btrfs filesystems, and the README makes no comparison between filesystems. The feature list covers RAID levels, compression, snapshots, scrubbing and balancing, which is what the driver exposes on Windows.

### How do I install Btrfs on Windows?

Download and extract the latest release, right-click btrfs.inf, and choose Install; the driver is signed. The README also lists Chocolatey with choco install winbtrfs and Scoop with scoop bucket add nonportable followed by scoop install winbtrfs-np -g.

### How do I use Btrfs subvolumes from Windows?

The shellbtrfs.dll shell extension identifies and creates subvolumes. The README also documents rundll32.exe shellbtrfs.dll,CreateSubvol <path> for creating one from the command line, and notes that rundll32 cannot return error codes.

### How do I use Btrfs scrub from Windows?

Scrubbing is listed among the driver's features, alongside balancing, including resuming balances started on Linux. The README does not document a Windows command for starting a scrub, so the command-line entry points it does list are CreateSubvol, CreateSnapshot and ReflinkCopy.

## Sources

- [Issues](https://github.com/maharmstone/btrfs/issues)
- [License: LGPL-3.0](https://github.com/maharmstone/btrfs/blob/master/LICENSE)
- [maharmstone/btrfs on GitHub](https://github.com/maharmstone/btrfs)
- [README](https://github.com/maharmstone/btrfs/blob/master/README.md)
- [Releases](https://github.com/maharmstone/btrfs/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/maharmstone-btrfs
