WinBTRFS es un controlador de Windows para el sistema de archivos Linux de próxima generación BTRFS. Una reimplementación desde cero, no contiene código del kernel de Linux, y debe funcionar en cualquier versión desde Windows XP en adelante. También se incluye como parte del sistema operativo libre Reactos.
Si su sistema de archivos BTRFS está en un dispositivo RAID de software MD creado por Linux, también necesitará WinMD para que esto aparezca en Windows.
Consulte también Quberble, un cargador de arranque experimental que permite que Windows se inicie desde BTRFS y NTFS2BTRFS, una herramienta que permite la conversión en el lugar de los sistemas de archivos NTFS.
Primero, un descargo de responsabilidad:
Utiliza este software bajo su propio riesgo. No asumro ninguna responsabilidad por ningún daño que pueda hacer a su sistema de archivos. Debería ser adecuado para el uso diario, pero asegúrese de tomar copias de seguridad de todos modos.
Todo aquí se publica bajo la Licencia Pública General Lesser GNU (LGPL); Consulte la licencia de archivo para obtener más información. Se le recomienda jugar con el código fuente como lo hará, y agradecería una nota ([email protected]) si se le ocurre algo ingenioso.
Vea al final de este documento para obtener detalles de derechos de autor del código de terceros que se incluye aquí.
mkbtrfs.exe y ubtrfs.dllfree_space_cache )Para instalar el controlador, descargue y extraiga la última versión, haga clic con el botón derecho en btrfs.inf y elija Instalar. El controlador está firmado, por lo que debería funcionar fuera de la caja en versiones modernas de Windows.
Si usa Windows 10 u 11 y tiene un arranque seguro habilitado, es posible que deba hacer un cambio de registro para que el controlador se cargue, consulte a continuación. Sin embargo, es más fácil apagar el arranque seguro en su BIOS, a menos que tenga una necesidad particular de él. Tenga en cuenta que Windows 11 Soft-solicita el arranque seguro para ser instalado, pero funcionará bien después de que se apague.
WinBTRFS también está disponible en los siguientes administradores de paquetes:
choco install winbtrfs
scoop bucket add nonportable
scoop install winbtrfs-np -g
Si desea desinstalar, desde un símbolo del sistema ejecutar:
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 btrfs.inf
Es posible que deba dar el camino completo a btrfs.inf.
También puede ir al Administrador de dispositivos, encontrar "Controlador BTRFS" en "Volúmenes de almacenamiento", haga clic derecho y elija "Desinstalar". Marque la casilla de verificación para desinstalar el controlador también y deje que Windows se reinicie.
Si necesita desinstalar a través del registro, abra Regedit y establezca el valor de HKLM System CurrentControlSet Services BTRFS Start to 4, para deshabilitar el servicio. Después de reiniciar, puede eliminar la tecla BTRFS y eliminar C: Windows System32 Drivers Btrfs.sys.
Para compilar con Visual C ++ 2019, abra el directorio y deje que Cmake haga lo suyo. Si tiene el DDK de Windows instalado correctamente, debería funcionar.
Para compilar con GCC en Linux, necesitará una configuración de compilador cruzado, para i686-w64-mingw32 o x86_64-w64-mingw32 . Cree un directorio de compilación, luego use mingw-x86.cmake o mingw-amd64.cmake como archivos CMake Toolchain para generar su makfile.
Las asignaciones de usuario se almacenan en la clave de registro HKLM System CurrentControlset Services BTRFS Mapeaciones. Cree un DWORD con el nombre de su Windows SID (por ejemplo, S-1-5-21-1379886684-2432464051-424789967-1001), y el valor de su UID Linux (por ejemplo, 1000). Entrará en vigencia la próxima vez que se cargue el controlador.
Puede encontrar su SID actual ejecutando wmic useraccount get name,sid .
Del mismo modo, las asignaciones grupales se almacenan en GroupMappings. La entrada predeterminada mapea el grupo de usuarios de Windows a GID 100, que generalmente es "usuarios" en Linux. También puede especificar el usuario SIDS aquí para forzar los archivos creados por un usuario para pertenecer a un determinado grupo. La bandera SetGid también funciona como en Linux.
Tenga en cuenta que los procesos que se ejecutan en tokens de control de acceso de usuario crean archivos como el SID de Builtin Administrators (S-1-5-32-544), más bien como una cuenta de usuario.
El controlador pasará a través de metadatos de Linux a versiones recientes de LXSS, pero deberá informar a Windows que desea hacer esto. Desde un mensaje BASH en Windows, editar /etc/wsl.conf para que se vea como lo siguiente:
[automount]
enabled = true
options = "metadata"
mountFsTab = false
Luego entrará en vigencia la próxima vez que reinicie. Sí, debería poder ver una instalación real de Linux, si lo desea.
El archivo dll shellbtrfs.dll proporciona la interfaz GUI, pero también se puede usar con rundll32.exe para llevar a cabo algunas tareas desde la línea de comando, lo que puede ser útil si desea programar algo para ejecutar periódicamente.
Tenga en cuenta que RunDLL32 no proporciona un mecanismo para devolver ningún código de error, por lo que cualquiera de estos comandos puede fallar en silencio.
rundll32.exe shellbtrfs.dll,CreateSubvol <path>
rundll32.exe shellbtrfs.dll,CreateSnapshot <source> <destination>
rundll32.exe shellbtrfs.dll,ReflinkCopy <source> <destination> Esto también acepta comodines y cualquier número de archivos de origen.
Los siguientes comandos necesitan varios privilegios, y por lo tanto deben ejecutarse como administrador para trabajar:
rundll32.exe shellbtrfs.dll,SendSubvol <source> [-p <parent>] [-c <clone subvol>] <stream file> Los indicadores -p y -c son como btrfs send en Linux. Puede especificar cualquier número de subvolúmenes de clonos.
rundll32.exe shellbtrfs.dll,RecvSubvol <stream file> <destination>
rundll32.exe shellbtrfs.dll,StartScrub <drive>
rundll32.exe shellbtrfs.dll,StopScrub <drive>
En la página de versiones, hay archivos zip para descargar que contienen los PDB. O puede probar el servidor de símbolos http://symbols.burntcomma.com/ - En Windbg, configure su ruta de símbolos en algo como esto:
symsrv*symsrv.dll*C:symbols*http://msdl.microsoft.com/download/symbols;symsrv*symsrv.dll*C:symbols*http://symbols.burntcomma.com
El controlador supone que todos los nombres de archivo están codificados en UTF-8. Este debería ser el valor predeterminado en la mayoría de las configuraciones hoy en día: si no está utilizando UTF -8, probablemente valga la pena buscar convertir sus archivos.
Para las versiones posteriores de Windows 10, Microsoft introdujo requisitos más onerosos para la firma, que aparentemente no están disponibles para los conductores de código abierto.
Para trabajar en torno a esto, vaya a HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlCIPolicy en Regedit, cree un nuevo valor de DWORD llamado UpgradedSystem y establezca en 1, y reinicie.
O siempre puede apagar el arranque seguro en su configuración de BIOS.
Esto es algo que Microsoft codifica en LXSS, presumiblemente para detener a las personas que manejan sus sistemas ejecutando mkdir /mnt/c/WiNdOwS .
Con la extensión de la carcasa instalada, haga clic con el botón derecho en la unidad en Explorer, haga clic en Propiedades y vaya a la pestaña BTRFS. Debe haber un botón que le permita cambiar la letra de la unidad.
En Regedit, intente eliminar las entradas relevantes en HKEY_LOCAL_MACHINESYSTEMMountedDevices , luego reiniciando.
Use el programa de línea de comandos incluido mkbtrfs.exe. No podemos agregar BTRFS al cuadro de diálogo propio de Windows, desafortunadamente, ya que su lista de sistemas de archivos ha sido codificado. También puede ejecutar format /fs:btrfs , si no necesita establecer ninguna opción específica de BTRFS.
Si el cuadro de diálogo de formato de Windows se niega a aparecer, intente ejecutar Format.com con el indicador /FS, por ejemplo, format /fs:ntfs D: .
La sinología parece usar LVM para sus dispositivos de bloque. Hasta que alguien escriba un controlador LVM para Windows, no tiene suerte.
THECUS utiliza la RAID MD de Linux para sus dispositivos de bloque. También necesitará instalar WinMD.
Asegúrese de tener KB3033929 instalado. O considere instalar desde un ISO de "depósito en garantía" que incluye todas las actualizaciones.
Se sabe que el software de lectura del sistema de archivos de Paragon deshabilita Automount. Deshabilite o desinstale Paragon, luego vuelva a habilitar AutomOUNT ejecutando diskpart y escriba automount enable .
En versiones muy antiguas de Windows (XP, Server 2003?), Windows ignora por completo las particiones de Linux. Si este es el caso para usted, intente ejecutar fdisk en Linux y cambiar su tipo de partición del 83 al 7.
No hay mapeo entre los modelos de permiso de Windows y Posix, son demasiado diferentes para que esto sea práctico. Si esto lo molesta, puede crear un ACL de Windows en archivos que no desea poder editar.
V1.9 (2024-03-15):
V1.8.2 (2023-01-10):
V1.8.1 (2022-08-23):
V1.8 (2022-03-12):
V1.7.9 (2021-10-02):
V1.7.8.1 (2021-06-13):
V1.7.8 (2021-06-09):
inode_cacheV1.7.7 (2021-04-12):
V1.7.6 (2021-01-14):
V1.7.5 (2020-10-31):
V1.7.4 (2020-08-23):
V1.7.3 (2020-05-24):
V1.7.2 (2020-04-10):
V1.7.1 (2020-03-02):
V1.7 (2020-02-26):
case=dir Opción estableceV1.6 (2020-02-04):
V1.5 (2019-11-10):
V1.4 (2019-08-31):
V1.3 (2019-06-10):
V1.2.1 (2019-05-06):
V1.2 (2019-05-05):
V1.1 (2018-12-15):
V1.0.2 (2018-05-19):
V1.0.1 (2017-10-15):
V1.0 (2017-09-04):
free_space_cache )V0.10 (2017-05-02):
btrfs checkV0.9 (2017-03-05):
V0.8 (2016-12-30):
btrfs fi usageV0.7 (2016-10-24):
raid56 )V0.6 (2016-08-21):
V0.5 (2016-07-24):
V0.4 (2016-05-02):
V0.3 (2016-03-25):
btrfs checkV0.2 (2016-03-13):
CcCopyReadV0.1 (2016-02-21):
WinBTRFS tiene tres niveles de mensajes de depuración: errores y fijadores, advertencias y rastros. La versión de lanzamiento del controlador solo muestra los errores y fixmes, que registra a través de DbgPrint . Puede ver estos mensajes a través del programa de Microsoft DeBugview, disponible en https://technet.microsoft.com/en-gb/sysinternals/debugview.
Si desea informar un problema, sería de gran ayuda si también pudiera adjuntar un registro de depuración completo. Para hacer esto, necesitará usar las versiones de depuración de los controladores; Copie los archivos en depuración x64 o depuración x86 en x64 o x86. También deberá establecer las entradas de registro en HKLM System CurrentControlset Services Btrfs:
DebugLogLevel (DWORD): 0 para no mensajes, 1 para errores y fijadores, 2 para advertencias también y 3 para absolutamente todo, incluidas las trazas.LogDevice (cadena, opcional): el dispositivo serie al que desea emitir, como DeviceSerial0 . Esto probablemente solo sea útil en máquinas virtuales.LogFile (String, Opcional): el archivo al que desea emitir, si LogDevice no está configurado. Tenga en cuenta que este es un nombre de archivo de núcleo, por lo que tendrá que prefijarlo con " ?? " (por ejemplo, " ?? c: btrfs.log"). Probablemente no sea evidente, pero no almacene esto en un volumen que el controlador mismo está usando, o causará un bucle infinito. El controlador creará subkeyys en el registro en HKLM System CurrentControlSet Services BTRFS para cada sistema de archivos montado, llamado así por su UUID. Si no está seguro de qué UUID se refiere a qué volumen, puede verificar el uso de btrfs fi show en Linux. Puede agregar opciones de montaje por volumen a esta subterránea, lo que entrará en vigencia en el reinicio. Si se establece un valor en la clave anterior, lo usará de forma predeterminada.
Ignore (DWORD): configure esto en 1 para decirle al controlador que no intente cargar este sistema de archivos. Con la bandera Readonly , esto probablemente sea redundante.
Readonly (dWord): configure esto en 1 para decirle al controlador que no permita escribir en este volumen. Este es el equivalente de la bandera ro en Linux.
Compress (DWORD): configure esto en 1 para decirle al controlador que escriba archivos como comprimidos de forma predeterminada. Este es el equivalente de la bandera compress en Linux.
CompressForce (DWORD): Establezca esto en 1 para forzar la compresión, es decir, para ignorar el indicador de inodo nocompress e incluso intentar compresión de archivos incompresibles. Esta no es una buena idea, pero es el equivalente de la bandera compress-force en Linux.
CompressType (DWORD): configure esto en 1 para preferir la compresión de Zlib, 2 para preferir la compresión LZO, o 3 para preferir la compresión de ZSTD. El valor predeterminado es 0, que utiliza la compresión ZSTD o LZO si se establecen los indicadores de incompat, y ZLIB de lo contrario.
FlushInterval (DWORD): el intervalo en segundos entre las descargas de metadatos. El valor predeterminado es 30, como en Linux: el parámetro se llama commit allí.
ZlibLevel (DWORD): un número entre -1 y 9, que determina cuánto tiempo de CPU se dedica a tratar de comprimir archivos. Es posible que desee jugar con esto si tiene una CPU rápida pero un disco lento, o viceversa. El valor predeterminado es 3, que es el valor codificado en Linux.
MaxInline (DWORD): el tamaño máximo que se permitirá para archivos "en línea", es decir, los almacenados en los metadatos. El valor predeterminado es 2048, que también es el valor predeterminado en las versiones modernas de Linux: el parámetro se llama max_inline allí. Se recortará al valor máximo, que a menos que haya cambiado el tamaño de su nodo será un tono de menos de 16 kb.
SubvolId (QWORD): la ID del subvolumen que intentaremos montar como raíz. Si no existe, este parámetro será ignorado en silencio. La ID del subvolumen se puede encontrar en la hoja de propiedades de inodo; Está en hex allí, en lugar de decimal en las herramientas de Linux. El valor predeterminado es lo que se ha establecido a través de btrfs subvolume set-default ; o, por defecto eso, subvolumen 5. El parámetro equivalente en Linux se llama subvolid .
SkipBalance (DWORD): Establezca en 1 para decirle al conductor que no intente reanudar un equilibrio que se estaba ejecutando cuando el sistema se apagó por última vez. El valor predeterminado es 0. El parámetro equivalente en Linux es skip_balance .
NoPNP (DWORD): útil solo para depurar, esto obliga a los volúmenes a aparecer en lugar de exponerlos a través del método habitual de plug and play.
ZstdLevel (DWORD): Nivel de compresión ZSTD, predeterminado 3.
NoTrim (DWORD): configure esto en 1 para deshabilitar el soporte de TRIM.
AllowDegraded (DWORD): configure esto en 1 para permitir el montaje de un volumen degradado, es decir, uno con un dispositivo falta. Se le recomienda encarecidamente que no habilite esto a menos que lo necesite.
NoRootDir (DWORD): si ha cambiado su subvolumen predeterminado, ya sea de forma nativa o por una opción de registro, habrá un directorio oculto llamado $ raíz que apunta a dónde estaría normalmente la raíz. Establezca este valor en 1 para evitar que esto aparezca.
NoDataCOW (DWORD): configure esto en 1 para deshabilitar Copy-on-write para archivos nuevos. Este es el equivalente de la bandera nodatacow en Linux.
Agradecería cualquier comentario que pueda tener, positivo o negativo: [email protected].
Este código contiene partes del siguiente software:
Copyright (c) 1995-2017 Jean-Loup Gailly y Mark Adler
Este software se proporciona 'as-es', sin ninguna garantía expresa o implícita. En ningún caso los autores serán responsables de los daños derivados del uso de este software.
Se otorga permiso a cualquier persona para usar este software para cualquier propósito, incluidas las aplicaciones comerciales, y para alterarlo y redistribuirlo libremente, sujeto a las siguientes restricciones:
WinBTRFS contiene partes de una versión temprana de LZO, que es Copyright 1996 Markus Oberhumer. Las versiones modernas tienen licencia bajo la GPL, pero esto tenía licencia bajo la LGPL, por lo que creo que está bien usarlo.
Copyright (c) 2016-presente, Facebook, Inc. Todos los derechos reservados.
Redistribución y uso en formularios de origen y binarios, con o sin modificación, se permiten siempre que se cumplan las siguientes condiciones:
Las redistribuciones del código fuente deben retener el aviso de derechos de autor anterior, esta lista de condiciones y el siguiente descargo de responsabilidad.
Las redistribuciones en forma binaria deben reproducir el aviso de derechos de autor anterior, esta lista de condiciones y el siguiente descargo de responsabilidad en la documentación y/u otros materiales provistos con la distribución.
Ni el nombre de Facebook ni los nombres de sus contribuyentes pueden usarse para respaldar o promover productos derivados de este software sin un permiso específico por escrito previo.
Este software es proporcionado por los titulares de derechos de autor y contribuyentes "tal cual" y cualquier garantía expresa o implícita, incluidas, entre otros, las garantías implícitas de comerciabilidad y idoneidad para un propósito particular se renuncian. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, Incluso si se le aconseja la posibilidad de tal daño.
https://github.com/Blake2/Blake2 (dominio público)
https://github.com/amosnier/sha-2 (dominio público)