1 puntos por GN⁺ 2024-04-08 | 1 comentarios | Compartir por WhatsApp
  • WinBtrfs v1.9 es un controlador que permite leer y escribir el sistema de archivos Btrfs de Linux en Windows, y fue reimplementado desde cero sin usar código del kernel de Linux
  • Debería funcionar desde Windows XP en adelante, también está incluido en el sistema operativo libre ReactOS, y si Btrfs está sobre RAID por software MD de Linux hace falta WinMD por separado
  • Su alcance funcional incluye lectura/escritura, RAID0/1/10/5/6, subvolúmenes y snapshots, copia reflink, send/receive, compresión zlib/LZO/Zstd, soporte para LXSS, y mapeo de ACL, ADS y permisos
  • La instalación puede hacerse descargando la versión más reciente e instalando btrfs.inf, o usando Chocolatey o Scoop; en entornos con Secure Boot en Windows 10/11 puede ser necesario cambiar el registro o desactivar Secure Boot
  • El proyecto se distribuye bajo LGPL, pero no asume responsabilidad por daños al sistema de archivos y, aunque dice ser apto para uso diario, recomienda hacer respaldos

Qué hace WinBtrfs

  • WinBtrfs es un controlador para Windows del sistema de archivos Btrfs, la siguiente generación en Linux
  • Fue reimplementado desde cero sin incluir código del kernel de Linux, y debería funcionar desde Windows XP en adelante
  • También está incluido en el sistema operativo libre ReactOS
  • Si el sistema de archivos Btrfs está sobre un dispositivo RAID por software MD creado en Linux, hace falta WinMD para que sea visible en Windows
  • Como proyectos relacionados, están el bootloader experimental Quibble, que permite arrancar Windows desde Btrfs, y Ntfs2btrfs, que convierte un sistema de archivos NTFS en el lugar

Funciones compatibles

  • Funciones básicas
    • Lectura y escritura del sistema de archivos Btrfs
    • Detección de particiones Btrfs que Windows normalmente ignoraría
    • Volúmenes Btrfs sin partición
    • Lectura y escritura asíncronas
    • Caché, free-space cache, free space tree
  • RAID y gestión de volúmenes
    • RAID0, RAID1, RAID10
    • RAID5, RAID6
    • Balancing, incluyendo reanudar balances iniciados en Linux
    • Agregar y quitar dispositivos
    • degraded mount
    • Reducir y expandir volúmenes
  • Funciones del sistema de archivos
    • Extensión de shell para crear e identificar subvolúmenes y snapshots
    • Hard links, symlinks, reparse points
    • sparse file, preallocation
    • Copia reflink
    • send y receive de subvolúmenes
    • scrubbing, TRIM/DISCARD
  • Interoperabilidad Windows/Linux
    • Leer y establecer ACL como xattr security.NTACL
    • Guardar Alternate Data Streams como xattr; por ejemplo, :Zone.Identifier se guarda como user.Zone.Identifier
    • Mapeo entre usuarios de Linux y usuarios de Windows
    • Soporte para LXSS, es decir, “Ubuntu on Windows”
    • Passthrough de metadatos como permisos para LXSS
    • Soporte para el flag de directorio sensible a mayúsculas/minúsculas de Windows 10
  • Compresión y compatibilidad
    • Compresión zlib, LZO, Zstd
    • El flag de incompatibilidad Metadata UUID está soportado según Linux 5.0
    • RAID1 de 3 y 4 discos, y checksums xxhash, sha256 y blake2 están soportados según Linux 5.5
    • block group tree está soportado según Linux 6.1

Trabajo pendiente

  • El soporte completo para fs-verity sigue pendiente como parte de Linux 5.15
  • El soporte para Zoned sigue pendiente como parte de Linux 5.11, con la observación de que HM-SMR podría no estar soportado en Windows
  • Desfragmentación, Btrfs quota, soporte completo del transaction log y soporte para TxF, las transacciones de Windows, están en la lista de pendientes

Instalación y desinstalación

  • Para instalar, descarga la versión más reciente, descomprímela y haz clic derecho en btrfs.inf, luego elige Install
  • El controlador está firmado, así que debería funcionar directamente en versiones recientes de Windows
  • Si Secure Boot está activado en Windows 10 u 11, puede ser necesario modificar el registro para cargar el controlador
    • También se propone como método más fácil desactivar Secure Boot desde el BIOS
    • Se indica que Windows 11 lo exige de forma laxa al instalarse, pero que luego puede desactivarse y seguir funcionando
  • También se puede instalar con gestores de paquetes
    • Chocolatey: choco install winbtrfs
    • Scoop: scoop bucket add nonportable, scoop install winbtrfs-np -g
  • La desinstalación puede hacerse con el comando RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 btrfs.inf o quitando “Btrfs controller” desde Device Manager
  • Si hay que desinstalar vía registro, configura HKLM\SYSTEM\CurrentControlSet\services\btrfs\Start en 4 para desactivar el servicio, reinicia y luego elimina la clave y C:\Windows\System32\drivers\btrfs.sys

Compilación y mapeo de usuarios

  • Para compilar con Visual C++ 2019, basta con abrir el directorio y dejar que CMake lo procese; debería funcionar si Windows DDK está correctamente instalado
  • Para compilar con GCC en Linux, hace falta el cross-compiler i686-w64-mingw32 o x86_64-w64-mingw32
  • El mapeo de usuarios se guarda en la clave de registro HKLM\SYSTEM\CurrentControlSet\services\btrfs\Mappings
    • Crea un DWORD con el nombre del SID de Windows y coloca el valor uid de Linux
    • El SID actual puede consultarse con wmic useraccount get name,sid
  • El mapeo de grupos se guarda bajo GroupMappings
    • La entrada predeterminada mapea el grupo Users de Windows al gid 100, que en Linux normalmente es users
    • Puedes especificar un SID de usuario para que los archivos creados por un usuario concreto pertenezcan a un grupo determinado
  • Hay que tener en cuenta que los procesos ejecutados con un token de User Access Control crean archivos con el SID BUILTIN\Administrators, no con el de la cuenta de usuario

Soporte para WSL/LXSS

  • El controlador puede hacer passthrough de metadatos de Linux a la versión más reciente de LXSS
  • Para usarlo, configura /etc/wsl.conf en el prompt de Bash de Windows con esta forma
    • [automount]
    • enabled = true
    • options = "metadata"
    • mountFsTab = false
  • Los cambios se aplican en el siguiente reinicio
  • Se indica que debería ser posible hacer chroot a un entorno real de instalación Linux

Operaciones de línea de comandos

  • shellbtrfs.dll ofrece una interfaz GUI, pero algunas operaciones pueden ejecutarse desde la línea de comandos con rundll32.exe
  • rundll32 no tiene forma de devolver códigos de error, así que los comandos pueden fallar en silencio
  • Comandos generales
    • CreateSubvol <path>
    • CreateSnapshot <source> <destination>
    • ReflinkCopy <source> <destination>, y puede recibir comodines y varios archivos de origen
  • Comandos que requieren privilegios de administrador
    • SendSubvol <source> [-p <parent>] [-c <clone subvol>] <stream file>
    • RecvSubvol <stream file> <destination>
    • StartScrub <drive>
    • StopScrub <drive>

Restricciones importantes para solución de problemas

  • Se asume que todos los nombres de archivo están codificados en UTF-8
  • Se indica que en versiones más recientes de Windows 10 con Secure Boot activado aparecieron requisitos de firma de Microsoft que al parecer no pueden usarse en controladores open source
    • Una forma de evitarlo es crear el DWORD UpgradedSystem en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CI\Policy, asignarle 1 y reiniciar
    • O bien desactivar Secure Boot desde el BIOS
  • Que la raíz del drive no distinga mayúsculas y minúsculas en LXSS es un comportamiento hardcodeado por Microsoft
  • No se puede agregar Btrfs al diálogo de formateo de Windows, porque la lista de sistemas de archivos está hardcodeada
    • El formateo Btrfs se hace con mkbtrfs.exe
    • Si no hacen falta opciones específicas de Btrfs, también se puede usar format /fs:btrfs
  • Los NAS de Synology aparentemente usan LVM sobre dispositivos de bloques, así que no se pueden montar sin un controlador LVM para Windows
  • Los NAS de Thecus usan Linux MD RAID, así que hay que instalar también WinMD
  • Los modelos de permisos de Windows y POSIX son demasiado distintos como para tener un mapeo práctico; si quieres impedir que un archivo se edite desde Windows, puedes crear un ACL de Windows

Cambios en v1.9

  • v1.9 fue lanzado el 15 de marzo de 2024
  • Se agregó soporte para block group tree de Linux 6.1
  • Se corrigió un problema que hacía que el sistema se colgara bajo carga alta
  • Se agregaron las opciones /blockgrouptree y /freespacetree a mkbtrfs
  • En mkbtrfs, el valor predeterminado de /noholes se ajustó para que quede activado como en Linux
  • Se agregó soporte para la instrucción CRC32C en aarch64

Opciones de depuración y montaje

  • WinBtrfs divide los mensajes de depuración en tres niveles: errors/FIXMEs, warnings y traces
  • La versión release del controlador solo registra errors y FIXMEs con DbgPrint, y pueden verse con Microsoft DebugView
  • Para adjuntar el log completo de depuración al reportar un problema, se usa la versión debug del controlador junto con configuración en el registro
    • DebugLogLevel: 0 es sin mensajes, 1 es errors/FIXMEs, 2 incluye warnings, 3 incluye traces
    • LogDevice: opcional, dispositivo serial al que se enviará la salida
    • LogFile: opcional, archivo al que se enviará la salida
  • Las opciones de montaje se guardan bajo subclaves por UUID de cada sistema de archivos en HKLM\SYSTEM\CurrentControlSet\Services\btrfs
  • Opciones principales
    • Ignore: no cargar ese sistema de archivos
    • Readonly: no permitir escritura, como el flag ro de Linux
    • Compress, CompressForce, CompressType: configuran compresión predeterminada, compresión forzada y método de compresión preferido
    • FlushInterval: intervalo de flush de metadatos; el valor predeterminado es 30 segundos, igual que en Linux
    • SubvolId: ID del subvolumen que se montará como raíz
    • SkipBalance: omite reanudar el balance que estaba en progreso al momento del último apagado
    • NoTrim: desactiva el soporte TRIM
    • AllowDegraded: permite montar volúmenes degraded con dispositivos faltantes
    • NoDataCOW: desactiva copy-on-write para archivos nuevos, igual que el flag nodatacow de Linux

Licencia y alcance de responsabilidad

  • El proyecto completo se distribuye bajo la GNU Lesser General Public Licence, es decir, LGPL
  • Se especifica que el uso del software es responsabilidad del usuario y que no se asume responsabilidad por posibles daños al sistema de archivos
  • Aunque se afirma que debería ser apto para uso diario, se recomienda hacer respaldos
  • Se incluyen avisos de copyright y licencia para código de terceros relacionado con Zlib, LZO, Zstd, BLAKE2 y SHA256

1 comentarios

 
GN⁺ 2024-04-08
Opiniones en Hacker News
  • Quise probarlo durante un tiempo, pero después de revisar los issues de GitHub me rendí de inmediato.
    Vi problemas como pantallazos azules, bloqueos, picos de uso y corrupción; si existiera un driver estable de btrfs/ZFS, con gusto pagaría por él.
    No termino de entender por qué este tipo de proyectos no reciben más atención.

    • Si “con gusto pagaría”, hay un enlace para donaciones: https://github.com/maharmstone/btrfs?tab=readme-ov-file#dona...
    • Porque Microsoft no le da soporte y los desarrolladores de drivers no pueden leer el código del kernel de Windows.
      Así que, incluso si se arreglan los problemas mencionados, es probable que arrancar Windows desde btrfs siga siendo difícil.
      Donde fueres, haz lo que vieres; quizá Windows simplemente haya que ejecutarlo solo virtualizado.
  • Me parece realmente genial que sea una reimplementación completa sin usar código de Linux, y también es excelente que soporte XP/2k3 e incluso ReactOS.
    Tendré que probarlo en alguna de mis máquinas viejas.

    • En el mundo de Rust está creciendo un patrón interesante de bibliotecas sin entrada/salida.
      No sé bien dónde convendría enlazar este fenómeno, pero hay un issue de 2019 sobre una biblioteca QUIC sin entrada/salida: https://github.com/aiortc/aioquic/issues/4
      Sería muy bueno que los sistemas de archivos siguieran este patrón.
      Si se pudiera reutilizar la lógica del sistema de archivos y aplicarla a Windows, FUSE, Linux, almacenamiento de direcciones lineales en wasm, etc., la portabilidad, la reutilización y la posibilidad de hackearlo crecerían enormemente.
    • ReactOS busca ser compatible a nivel de API con Windows, así que no sorprende demasiado que soporte tanto XP/2k3 como ReactOS.
  • Artículos relacionados:
    WinBtrfs – A Windows driver for the next-generation Linux filesystem Btrfs - https://news.ycombinator.com/item?id=15177002 - septiembre de 2017, 100 comentarios
    WinBtrfs v0.7 - https://news.ycombinator.com/item?id=12794214 - octubre de 2016, 1 comentario

  • Hace unas semanas intenté usarlo con un disco duro btrfs, pero no logré hacerlo funcionar bien.
    Después accedí mediante WSL; algunas veces funcionó, pero empezó a fallar cada vez más y al final ni siquiera montaba.
    Finalmente me di cuenta de que podía arrancar con una ISO live de Linux y copiar/mover archivos entre el disco de Windows y el disco btrfs; ahora uso la ISO live de Fedora Workstation desde un USB con Ventoy.

    • Suena como una experiencia muy real.
      Ahora también se pueden perder datos en btrfs desde Windows :-D
  • Llevo un tiempo usando este driver en mi laptop.
    Es un entorno compartido: en Linux lo uso para programar por trabajo, y en Windows para juegos, películas y medios.
    Si te preocupa la corrupción de datos en particiones y discos btrfs, conviene enfocarse en las opciones de montaje del README.
    Para la partición del sistema Arch Linux uso Ignore, y para todo lo demás uso Readonly.
    Dicho eso, aun montando y usando por completo un HDD externo de 20 TB con compresión btrfs zstd:2, no he sufrido picos de CPU ni corrupción.

  • Recomiendo leer todo el README.
    El autor respondió las preguntas que me daban curiosidad y muchas más.

  • Me da curiosidad cómo puede decir que soporta RAID 5/6 “básico y avanzado”.
    btrfs en sí no lo hace, y tampoco queda claro qué significa aquí “básico/avanzado”: https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#raid5...

    • Eso no es del todo correcto.
      Linux btrfs por lo general sí soporta RAID5, pero tiene casos límite conocidos que dificultan usarlo de forma segura.
      En la práctica está más cerca de “usable, pero experimental y solo para desarrolladores”.
      WinBtrfs solo enumera el modo RAID5 como una de sus funciones, pero no aborda bien qué tan correctamente funciona.
      Las preguntas en el issue relacionado también se cerraron sin una respuesta sustancial: https://github.com/maharmstone/btrfs/issues/293
      No confiaría mis datos a RAID 5/6 antes de obtener una respuesta clara del desarrollador sobre su estado y pruebas.
    • Parece que llaman RAID “básico” a RAID0/1/10 y RAID “avanzado” a RAID5/6.
      No sé por qué, pero quizá sea porque los primeros no requieren cosas como cálculos de paridad “avanzados”.
  • Usé este driver y btrfs para precargar la biblioteca en una Steam Deck.
    Descargar por la red habría tardado demasiado, y con mi internet de ese momento creo que habría tardado 100 veces más.
    Este podría ser el primer *sistema de archivos que simplemente funciona en nix, Mac y Windows desde FAT.

    • Todos siempre se olvidan de UDF
  • Excelente
    Si alguien lo ha usado durante mucho tiempo o en producción, me da curiosidad saber cómo le fue en la práctica.
    Vi que TRIM está soportado, pero me pregunto si también soporta RETRIM.
    Me refiero a la función necesaria para liberar, durante la optimización de la unidad, las áreas que no pudieron recibir TRIM al principio porque la cola de comandos estaba llena.
    También me pregunto si podría servir como alternativa a NTFS con paridad de datos para quienes no quieren ReFS, y qué tan maduro es comparado con ZFS para Windows.

    • Lo he usado de forma ligera en mi máquina principal durante varios años.
      Mi configuración tiene una partición de Windows, una partición de Linux (btrfs sobre LUKS) y una tercera partición btrfs donde guardo archivos.
      No la uso con frecuencia, pero cuando la uso, ni siquiera noto que está ahí.
      Se sentía como si Windows siempre hubiera podido leer btrfs de forma nativa, y en un uso limitado a acceder, modificar y borrar archivos, no usé ninguna función “avanzada” en particular.
    • Una vez ejecuté por error una compilación de Visual Studio desde un clon de git en btrfs, en lugar de hacerlo en la unidad NTFS principal.
      Cuando me di cuenta y cancelé la compilación, habían aparecido dos carpetas con el mismo nombre pero distinto contenido, y tuve que borrar dos veces el mismo nombre de carpeta.
      Este controlador parece tener problemas de concurrencia.
    • Instalar WinBTRFS junto con OpenZFS on Windows puede causar problemas.
      “Win OpenZFS driver and WinBtrfs driver dont play well with each other”
      https://github.com/openzfsonwindows/openzfs/issues/364
    • ReFS y Storage Spaces ya cumplen ese propósito, están integrados y cuentan con soporte completo.
      Por lo que he oído, BTRFS tiene una lista absurdamente larga de fallas en las que, si tocas algo apenas mal, se cuelga o corrompe datos.
      Forzar en Windows algo cuya confiabilidad ya es dudosa incluso en su sistema operativo nativo es casi una locura.
      Está bien para probar por diversión, pero jamás confiaría datos reales a esta combinación.
      “En mi espejo de 2 discos funciona bien” es solo una anécdota, no datos.
  • Me pregunto si con esto se puede arrancar Windows 10/11 desde una memoria USB de Windows formateada con btrfs.

    • Con Rufus puedes instalar 10/11 como “Windows To Go” en una carcasa USB para unidades SATA/NVMe.
      Por mi experiencia usando Windows 10 así todos los días durante un tiempo, funcionaba bastante bien, pero hay varias cosas a tener en cuenta.
      Necesitas una conexión USB estable y una carcasa USB con un chip controlador estable que no se sobrecaliente.
      La unidad debe resistir bien las pérdidas de energía.
      Lamentablemente, no conozco recursos que evalúen esa capacidad de manejo ante pérdida de energía.
      Algunas unidades pueden sufrir bastante con cortes repentinos de energía.
      Tuve buenas experiencias con un SSD SATA empresarial de Intel y con una unidad NVMe en un Dockcase con capacitores.
      Si la unidad deja de aparecer, volver a aplicarle energía puede ayudar: https://dfarq.homeip.net/fix-dead-ssd/
      También conviene configurar copias de seguridad automáticas.
      Es muy útil para pruebas de rendimiento o para actualizaciones de firmware de hardware que solo tienen herramientas para Windows.
      Cuando lo usas cambiando de computadora, muchas veces Windows se confunde después de arrancar y hay que reiniciar; luego funciona.
      Eso sí, no he usado WinBTRFS ni ningún proyecto de bootloader aparte, y ese bootloader parece estar roto desde hace unos meses.
      Arrancar un archivo VHD de Windows con Ventoy también podría ser una buena opción.
    • Por sí solo, no.
      También necesitas un bootloader aparte.
      El autor creó una implementación llamada Quibble, que también soporta btrfs.
      [0] https://github.com/maharmstone/quibble