WinBtrfs, driver btrfs de código aberto para Windows
(github.com/maharmstone)- WinBtrfs v1.9 é um driver que permite ler e gravar o sistema de arquivos Btrfs do Linux no Windows, reimplementado do zero sem usar código do kernel Linux
- Deve funcionar a partir do Windows XP e também está incluído no sistema operacional livre ReactOS; para Btrfs sobre RAID de software MD do Linux é necessário o WinMD separadamente
- O escopo de recursos inclui leitura/gravação, RAID0/1/10/5/6, subvolumes e snapshots, reflink copy, send/receive, compressão zlib/LZO/Zstd, suporte a LXSS e até mapeamento de ACL, ADS e permissões
- A instalação pode ser feita baixando a release mais recente e instalando
btrfs.inf, ou usando Chocolatey e Scoop; em ambientes com Secure Boot no Windows 10/11 pode ser necessário alterar o registro ou desativar o Secure Boot - O projeto é distribuído sob LGPL, mas não se responsabiliza por corrupção do sistema de arquivos e, embora afirme ser adequado para uso diário, recomenda backup
O que o WinBtrfs faz
- WinBtrfs é um driver para Windows do Btrfs, o sistema de arquivos de próxima geração do Linux
- Foi reimplementado do zero sem incluir código do kernel Linux e deve funcionar a partir do Windows XP
- Também está incluído no sistema operacional livre ReactOS
- Se o sistema de arquivos Btrfs estiver sobre um dispositivo RAID de software MD criado no Linux, será necessário o WinMD para que ele apareça no Windows
- Projetos relacionados incluem o bootloader experimental Quibble, que permite inicializar o Windows a partir de Btrfs, e o Ntfs2btrfs, que converte o sistema de arquivos NTFS no local
Recursos suportados
- Recursos básicos
- Leitura e gravação do sistema de arquivos Btrfs
- Detecção de partições Btrfs que o Windows normalmente ignoraria
- Volumes Btrfs sem partição
- Leitura e gravação assíncronas
- Cache, free-space cache, free space tree
- RAID e gerenciamento de volumes
- RAID0, RAID1, RAID10
- RAID5, RAID6
- Balancing, incluindo retomada de balances iniciados no Linux
- Adição e remoção de dispositivos
- degraded mount
- Redução e expansão de volume
- Recursos do sistema de arquivos
- Extensão de shell para criar e identificar subvolumes e snapshots
- Hard links, links simbólicos, reparse point
- Sparse file, preallocation
- reflink copy
- subvolume send e receive
- scrubbing, TRIM/DISCARD
- Interoperabilidade Windows·Linux
- Obter e definir ACL como xattr
security.NTACL - Armazenar Alternate Data Streams como xattr; por exemplo,
:Zone.Identifieré armazenado comouser.Zone.Identifier - Mapeamento entre usuários Linux e usuários Windows
- Suporte a LXSS, ou seja, “Ubuntu on Windows”
- passthrough de metadados como permissões para LXSS
- Suporte ao sinalizador de diretório sensível a maiúsculas/minúsculas do Windows 10
- Obter e definir ACL como xattr
- Compressão e compatibilidade
- Compressão zlib, LZO, Zstd
- O sinalizador incompatível Metadata UUID é suportado com base no Linux 5.0
- RAID1 de 3 e 4 discos, checksums xxhash·sha256·blake2 são suportados com base no Linux 5.5
- block group tree é suportado com base no Linux 6.1
Trabalho que ainda falta
- O suporte completo a fs-verity continua pendente como item do Linux 5.15
- O suporte a Zoned continua pendente como item do Linux 5.11, com a observação de que HM-SMR pode não ser suportado no Windows
- Desfragmentação, quota do Btrfs, suporte completo ao transaction log e suporte a TxF, o sistema de transações do Windows, estão na lista de tarefas
Instalação e remoção
- A instalação é feita baixando a release mais recente, extraindo o arquivo e clicando com o botão direito em
btrfs.infpara selecionar Install - O driver é assinado e deve funcionar diretamente nas versões mais recentes do Windows
- Se o Secure Boot estiver ativado no Windows 10 ou 11, pode ser necessário alterar o registro para carregar o driver
- Como método mais simples, também é sugerido desativar o Secure Boot na BIOS
- O Windows 11 exige Secure Boot de forma mais branda na instalação, mas é informado que ele continua funcionando mesmo se for desativado depois
- Também é possível instalar com gerenciadores de pacotes
- Chocolatey:
choco install winbtrfs - Scoop:
scoop bucket add nonportable,scoop install winbtrfs-np -g
- Chocolatey:
- A remoção pode ser feita com o comando
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 btrfs.infou removendo “Btrfs controller” no Device Manager - Se for necessário remover via registro, defina o valor
HKLM\SYSTEM\CurrentControlSet\services\btrfs\Startcomo 4 para desativar o serviço, reinicie e então exclua a chave eC:\Windows\System32\drivers\btrfs.sys
Build e mapeamento de usuários
- Para compilar com Visual C++ 2019, basta abrir o diretório e deixar o CMake processá-lo; se o Windows DDK estiver instalado corretamente, deve funcionar
- Para compilar no Linux com GCC, é necessário um compilador cruzado
i686-w64-mingw32oux86_64-w64-mingw32 - O mapeamento de usuários é armazenado na chave de registro
HKLM\SYSTEM\CurrentControlSet\services\btrfs\Mappings- Crie um DWORD com o nome do SID do Windows e insira o valor uid do Linux
- O SID atual pode ser verificado com
wmic useraccount get name,sid
- O mapeamento de grupos é armazenado em
GroupMappings- A entrada padrão mapeia o grupo Users do Windows para o gid 100, normalmente
users, no Linux - É possível especificar um SID de usuário para que arquivos criados por um usuário específico pertençam a um grupo específico
- A entrada padrão mapeia o grupo Users do Windows para o gid 100, normalmente
- Há a observação de que processos executados com token do User Access Control criam arquivos usando o SID
BUILTIN\Administrators, e não a conta do usuário
Suporte a WSL/LXSS
- O driver pode fazer passthrough de metadados Linux para versões recentes do LXSS
- Para usar isso, configure
/etc/wsl.confno prompt Bash do Windows da seguinte forma[automount]enabled = trueoptions = "metadata"mountFsTab = false
- As mudanças passam a valer na próxima reinicialização
- É informado que deve ser possível fazer chroot em um ambiente Linux instalado de fato
Operações de linha de comando
shellbtrfs.dllfornece uma interface GUI, mas algumas operações podem ser executadas pela linha de comando comrundll32.exerundll32não tem como retornar códigos de erro, então os comandos podem falhar silenciosamente- Comandos gerais
CreateSubvol <path>CreateSnapshot <source> <destination>ReflinkCopy <source> <destination>, que pode receber curingas e vários arquivos de origem
- Comandos que exigem privilégios de administrador
SendSubvol <source> [-p <parent>] [-c <clone subvol>] <stream file>RecvSubvol <stream file> <destination>StartScrub <drive>StopScrub <drive>
Limitações importantes na solução de problemas
- Todos os nomes de arquivo são assumidos como codificados em UTF-8
- Em versões mais recentes do Windows 10 com Secure Boot ativado, é informado que surgiram exigências de assinatura da Microsoft que aparentemente não podem ser usadas por drivers de código aberto
- Uma forma de contornar isso é criar o DWORD
UpgradedSystememHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CI\Policy, definir seu valor como 1 e reiniciar - Ou desativar o Secure Boot na BIOS
- Uma forma de contornar isso é criar o DWORD
- No LXSS, o fato de a raiz da unidade não diferenciar maiúsculas de minúsculas é um comportamento hardcoded da Microsoft
- Não é possível adicionar Btrfs à própria caixa de diálogo de formatação do Windows, porque a lista de sistemas de arquivos é hardcoded
- A formatação em Btrfs usa o
mkbtrfs.exeincluído - Se não forem necessárias opções específicas de Btrfs,
format /fs:btrfstambém pode ser usado
- A formatação em Btrfs usa o
- O Synology NAS aparentemente usa LVM em dispositivos de bloco, então não pode ser montado sem um driver LVM para Windows
- O Thecus NAS usa RAID MD do Linux, então é necessário instalar também o WinMD
- Os modelos de permissão do Windows e do POSIX são diferentes demais para haver um mapeamento prático; para arquivos que você não quer permitir editar no Windows, é possível criar ACLs do Windows
Mudanças da v1.9
- v1.9 foi lançada em 15 de março de 2024
- Foi adicionado suporte ao block group tree do Linux 6.1
- Foi corrigido um problema em que o sistema travava sob carga alta
- Foram adicionadas as opções
/blockgrouptreee/freespacetreeaomkbtrfs - O padrão de
/noholesnomkbtrfsfoi ajustado para ficar ativado por padrão, como no Linux - Foi adicionado suporte a instruções CRC32C em aarch64
Debug e opções de montagem
- O WinBtrfs divide as mensagens de debug em três níveis: errors/FIXMEs, warnings e traces
- A versão release do driver registra apenas errors e FIXMEs via
DbgPrint, e isso pode ser visto com o Microsoft DebugView - Para anexar o log completo de debug ao reportar problemas, use a versão debug do driver e configurações de registro
DebugLogLevel: 0 sem mensagens, 1 errors/FIXMEs, 2 inclui warnings, 3 inclui tudo até tracesLogDevice: opcional, dispositivo serial para saídaLogFile: opcional, arquivo para saída
- As opções de montagem são armazenadas sob cada subchave de UUID do sistema de arquivos em
HKLM\SYSTEM\CurrentControlSet\Services\btrfs - Opções principais
Ignore: não carrega esse sistema de arquivosReadonly: não permite gravação, como o sinalizadorrodo LinuxCompress,CompressForce,CompressType: definem compressão padrão, compressão forçada e método de compressão preferidoFlushInterval: intervalo de flush de metadados; o padrão é 30 segundos, como no LinuxSubvolId: ID do subvolume a ser montado como raizSkipBalance: ignora a retomada de um balance que estava em andamento no último desligamentoNoTrim: desativa suporte a TRIMAllowDegraded: permite montar volumes degraded com dispositivos ausentesNoDataCOW: desativa copy-on-write para arquivos novos, igual ao sinalizadornodatacowdo Linux
Licença e escopo de responsabilidade
- O projeto inteiro é distribuído sob a GNU Lesser General Public Licence, ou LGPL
- Está explicitado que o uso do software é por conta e risco do usuário, e que não há responsabilidade por possíveis danos ao sistema de arquivos
- Embora seja dito que ele deve ser adequado para uso diário, também é recomendado fazer backup
- Estão incluídos avisos de copyright e licença para códigos de terceiros relacionados a Zlib, LZO, Zstd, BLAKE2 e SHA256
1 comentários
Comentários do Hacker News
Eu queria testar isso há um tempo, mas dei uma olhada nas issues do GitHub e desisti na hora
Vi problemas como tela azul, travamentos, picos de uso e corrupção, e eu pagaria tranquilamente por um driver estável de btrfs/ZFS
Não entendo muito bem por que projetos assim não recebem mais atenção
Então, mesmo que os problemas mencionados acima sejam corrigidos, provavelmente ainda será difícil inicializar o Windows a partir de btrfs
Em Roma, faça como os romanos; talvez o Windows simplesmente tenha que rodar apenas virtualizado
O fato de ser uma reimplementação completa sem usar código do Linux é muito legal, e o suporte até para XP/2k3 e ReactOS também é excelente
Vou ter que testar isso em uma das minhas máquinas antigas
Não sei qual seria o melhor lugar para linkar isso, mas há uma issue de 2019 sobre uma biblioteca QUIC sem I/O: https://github.com/aiortc/aioquic/issues/4
Seria muito bom se sistemas de arquivos seguissem esse padrão também
Se desse para reutilizar a lógica do sistema de arquivos e aplicá-la ao Windows, FUSE, Linux, armazenamento com endereçamento linear em wasm etc., isso poderia aumentar enormemente a portabilidade, a reutilização e a hackeabilidade
Posts relacionados:
WinBtrfs – Um driver do Windows para o sistema de arquivos Linux de nova geração Btrfs - https://news.ycombinator.com/item?id=15177002 - setembro de 2017, 100 comentários
WinBtrfs v0.7 - https://news.ycombinator.com/item?id=12794214 - outubro de 2016, 1 comentário
Tentei usar isso em um HD btrfs há algumas semanas, mas não consegui fazer funcionar direito
Depois tentei acessar via WSL, e até funcionou algumas vezes, mas foi falhando cada vez mais, e mais tarde nem montava
No fim, percebi que bastava inicializar com uma ISO live do Linux e copiar/mover os arquivos entre a unidade do Windows e a unidade btrfs, e agora estou usando a ISO live do Fedora Workstation no Ventoy USB
Agora também dá para perder dados em btrfs no Windows :-D
Estou usando esse driver no meu notebook já faz um tempo
É um ambiente compartilhado, com Linux para programar no trabalho e Windows para jogos, filmes e mídia
Se você estiver preocupado com corrupção de dados na partição e na unidade btrfs, basta prestar atenção nas opções de montagem do README
Use
Ignorena partição de sistema do Arch Linux eReadonlyem todo o restoDito isso, também usei um HDD externo de 20 TB com compressão btrfs
zstd:2montado completamente, e não tive picos de CPU nem corrupçãoRecomendo ler o README inteiro
O autor responde às perguntas que eu tinha e a muitas outras também
Fico curioso sobre como isso diz suportar RAID 5/6 “básico e avançado”
O próprio btrfs não suporta isso dessa forma, e também não está claro o que “básico/avançado” quer dizer aqui: https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#raid5...
O btrfs no Linux em geral suporta RAID5, mas há casos de borda conhecidos que tornam difícil usá-lo com segurança
Na prática, é algo mais próximo de “utilizável, mas experimental e só para desenvolvedores”
O WinBtrfs apenas lista o modo RAID5 como um de seus recursos, sem tratar adequadamente de quão bem isso funciona
As perguntas na issue relacionada também foram encerradas sem respostas concretas: https://github.com/maharmstone/btrfs/issues/293
Eu não confiaria meus dados a RAID 5/6 antes de ouvir do desenvolvedor uma resposta clara sobre o estado e os testes
Não sei por quê, mas talvez seja porque os primeiros não exigem cálculos de paridade “avançados”
Usei esse driver e btrfs para pré-carregar a biblioteca no Steam Deck
Baixar pela rede demorava demais, e pela minha internet na época provavelmente levaria 100 vezes mais tempo
Isso pode acabar sendo o primeiro sistema de arquivos que simplesmente funciona em nix, Mac e Windows desde o FAT
Excelente
Se alguém usa isso há muito tempo ou em produção, tenho curiosidade de saber como foi na prática
Vi que TRIM é suportado, mas queria saber se RETRIM também é
Quero dizer a função necessária para liberar durante a otimização da unidade as áreas que não puderam ser trimadas no início porque a fila de comandos estava cheia
Também queria saber se serve como um substituto do NTFS com paridade de dados para quem não gosta do ReFS, e quão maduro é em comparação com o ZFS para Windows
A configuração tem uma partição Windows, uma partição Linux (btrfs sobre LUKS) e uma terceira partição btrfs para armazenar arquivos
Não uso com frequência, mas quando uso é a ponto de nem perceber que ele está lá
Parecia como se o Windows sempre tivesse conseguido ler btrfs nativamente e, nesse nível de uso de apenas acessar, modificar e apagar arquivos, não usei nenhum recurso mais “avançado”
Quando percebi e cancelei o build, haviam surgido duas pastas com o mesmo nome, mas com conteúdos diferentes, e tive que apagar o mesmo nome de pasta duas vezes
Parece que esse driver tem problemas de concorrência
“Win OpenZFS driver and WinBtrfs driver dont play well with each other”
https://github.com/openzfsonwindows/openzfs/issues/364
Pelo que ouvi, a lista de falhas do BTRFS é absurdamente longa, com casos em que ele trava ou corrompe dados por qualquer mexida errada
Forçar algo de confiabilidade questionável até no sistema operacional nativo para dentro do Windows beira a insanidade
Brincar com isso por diversão tudo bem, mas eu nunca confiaria dados reais a essa combinação
“No meu espelho de 2 discos funciona bem” é só anedota, não é dado
Fico curioso se usar isso permite dar boot no Windows 10/11 a partir de um pendrive Windows formatado em btrfs
Pela minha experiência usando o Windows 10 assim diariamente por um tempo, funciona bem razoavelmente, mas há alguns cuidados
Você precisa de uma conexão USB estável e de um enclosure USB com chip controlador estável e que não superaqueça
A unidade precisa ser resistente a perda de energia
Infelizmente, não conheço nenhum material que avalie a capacidade de lidar com perda de energia
Algumas unidades podem sofrer bastante com corte repentino de energia
Tive boas experiências com SSDs SATA enterprise da Intel e com unidades NVMe em um Dockcase com capacitores
Se a unidade deixar de aparecer, religar a energia pode ajudar: https://dfarq.homeip.net/fix-dead-ssd/
Também é bom configurar backup automático
É muito útil para testes de desempenho ou atualizações de firmware de hardware exclusivo de Windows
Ao usar em computadores diferentes, muitas vezes o Windows fica confuso após o boot e precisa reiniciar; depois disso funciona
Mas não tenho experiência com WinBTRFS nem com projetos de bootloader separados, e esse bootloader parece estar quebrado atualmente já há alguns meses
Dar boot em um arquivo VHD do Windows com Ventoy também pode ser uma boa opção
Também é necessário um bootloader separado
O autor criou uma implementação chamada Quibble, que também suporta btrfs
[0] https://github.com/maharmstone/quibble