Pilote Btrfs open source pour Windows, WinBtrfs
(github.com/maharmstone)- WinBtrfs v1.9 est un pilote qui permet de lire et d’écrire le système de fichiers Linux Btrfs sous Windows, et il a été réimplémenté entièrement sans utiliser le code du noyau Linux
- Il doit fonctionner à partir de Windows XP, est également inclus dans le système d’exploitation libre ReactOS, et si Btrfs repose sur un RAID logiciel MD de Linux, WinMD est nécessaire séparément
- Le périmètre fonctionnel inclut la lecture/écriture, RAID0/1/10/5/6, sous-volumes·instantanés, copie reflink, send/receive, compression zlib/LZO/Zstd, prise en charge de LXSS, ainsi que le mappage ACL·ADS·permissions
- L’installation peut se faire en téléchargeant la dernière release puis en installant
btrfs.inf, ou via Chocolatey·Scoop ; sous Windows 10/11 avec Secure Boot, une modification du registre ou la désactivation de Secure Boot peut être nécessaire - Le projet est distribué sous LGPL, mais décline toute responsabilité en cas de corruption du système de fichiers et recommande des sauvegardes, tout en affirmant convenir à un usage quotidien
Ce que fait WinBtrfs
- WinBtrfs est un pilote Windows pour Btrfs, le système de fichiers nouvelle génération de Linux
- Il a été entièrement réimplémenté sans inclure le code du noyau Linux, et doit fonctionner à partir de Windows XP
- Il est également inclus dans le système d’exploitation libre ReactOS
- Si le système de fichiers Btrfs se trouve sur un périphérique RAID logiciel MD créé sous Linux, WinMD est nécessaire pour qu’il soit visible sous Windows
- Parmi les projets liés, on trouve le chargeur de démarrage expérimental Quibble, qui permet de démarrer Windows depuis Btrfs, ainsi que Ntfs2btrfs, qui convertit NTFS sur place
Fonctionnalités prises en charge
- Fonctionnalités de base
- Lecture et écriture du système de fichiers Btrfs
- Détection des partitions Btrfs que Windows ignorerait normalement
- Volumes Btrfs sans partition
- Lecture et écriture asynchrones
- Cache, free-space cache, free space tree
- RAID et gestion des volumes
- RAID0, RAID1, RAID10
- RAID5, RAID6
- Balancing, y compris la reprise d’un balance lancé sous Linux
- Ajout et suppression de périphériques
- degraded mount
- Réduction et extension de volume
- Fonctions du système de fichiers
- Extension shell pour créer et identifier des sous-volumes et instantanés
- Liens physiques, liens symboliques, reparse points
- sparse file, preallocation
- Copie reflink
- send et receive de sous-volumes
- Scrubbing, TRIM/DISCARD
- Interopérabilité Windows·Linux
- Récupération et définition des ACL comme xattr
security.NTACL - Stockage des Alternate Data Streams comme xattr ; par exemple,
:Zone.Identifierest enregistré commeuser.Zone.Identifier - Mappage entre utilisateurs Linux et utilisateurs Windows
- Prise en charge de LXSS, c’est-à-dire « Ubuntu on Windows »
- Passthrough des métadonnées comme les permissions pour LXSS
- Prise en charge du drapeau de répertoire sensible à la casse de Windows 10
- Récupération et définition des ACL comme xattr
- Compression et compatibilité
- Compression zlib, LZO, Zstd
- Le drapeau d’incompatibilité Metadata UUID est pris en charge au niveau de Linux 5.0
- Le RAID1 sur 3 ou 4 disques, ainsi que les checksums xxhash·sha256·blake2, sont pris en charge au niveau de Linux 5.5
- Le block group tree est pris en charge au niveau de Linux 6.1
Travaux encore en attente
- La prise en charge complète de fs-verity reste listée dans les éléments Linux 5.15
- La prise en charge de Zoned reste listée dans les éléments Linux 5.11, avec la réserve que HM-SMR pourrait ne pas être pris en charge sous Windows
- La défragmentation, les quotas Btrfs, la prise en charge complète du transaction log et la prise en charge de TxF, le système de transactions de Windows, figurent dans la liste des tâches à faire
Installation et désinstallation
- Pour l’installation, il faut télécharger la dernière release, décompresser l’archive, puis faire un clic droit sur
btrfs.infet choisir Install - Le pilote est signé et devrait fonctionner directement sur les versions récentes de Windows
- Si Secure Boot est activé sous Windows 10 ou 11, une modification du registre peut être nécessaire pour charger le pilote
- Une méthode plus simple consiste aussi à désactiver Secure Boot dans le BIOS
- Il est indiqué que Windows 11 exige faiblement Secure Boot lors de l’installation, mais qu’il peut être désactivé ensuite
- L’installation via gestionnaire de paquets est aussi possible
- Chocolatey:
choco install winbtrfs - Scoop:
scoop bucket add nonportable,scoop install winbtrfs-np -g
- Chocolatey:
- La désinstallation peut se faire avec la commande
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 btrfs.infou en supprimant « Btrfs controller » dans le Device Manager - Si une suppression via le registre est nécessaire, il faut définir la valeur
HKLM\SYSTEM\CurrentControlSet\services\btrfs\Startà 4 pour désactiver le service, redémarrer, puis supprimer la clé etC:\Windows\System32\drivers\btrfs.sys
Build et mappage des utilisateurs
- Pour compiler avec Visual C++ 2019, il suffit d’ouvrir le répertoire et de laisser CMake le traiter ; si le Windows DDK est correctement installé, cela devrait fonctionner
- Pour compiler avec GCC sous Linux, un compilateur croisé
i686-w64-mingw32oux86_64-w64-mingw32est nécessaire - Le mappage des utilisateurs est stocké dans la clé de registre
HKLM\SYSTEM\CurrentControlSet\services\btrfs\Mappings- Il faut créer un DWORD au nom du SID Windows et y placer la valeur uid Linux
- Le SID actuel peut être obtenu avec
wmic useraccount get name,sid
- Le mappage des groupes est stocké sous
GroupMappings- L’entrée par défaut mappe le groupe Users de Windows vers le gid 100, généralement
userssous Linux - Il est possible de spécifier un SID utilisateur afin que les fichiers créés par un utilisateur donné appartiennent à un groupe spécifique
- L’entrée par défaut mappe le groupe Users de Windows vers le gid 100, généralement
- À noter qu’un processus exécuté avec un jeton User Access Control crée les fichiers avec le SID
BUILTIN\Administrators, et non celui du compte utilisateur
Prise en charge de WSL/LXSS
- Le pilote peut faire du passthrough des métadonnées Linux vers les versions récentes de LXSS
- Pour l’utiliser, il faut configurer
/etc/wsl.confdans l’invite Bash de Windows sous cette forme[automount]enabled = trueoptions = "metadata"mountFsTab = false
- Les changements sont appliqués au redémarrage suivant
- Il est indiqué qu’il devrait être possible d’utiliser
chrootvers une installation Linux réelle
Opérations en ligne de commande
shellbtrfs.dllfournit une interface GUI, mais certaines opérations peuvent être exécutées en ligne de commande avecrundll32.exerundll32n’a aucun moyen de retourner un code d’erreur, donc une commande peut échouer silencieusement- Commandes générales
CreateSubvol <path>CreateSnapshot <source> <destination>ReflinkCopy <source> <destination>; accepte les jokers et plusieurs fichiers source
- Commandes nécessitant les droits administrateur
SendSubvol <source> [-p <parent>] [-c <clone subvol>] <stream file>RecvSubvol <stream file> <destination>StartScrub <drive>StopScrub <drive>
Contraintes importantes pour le dépannage
- Tous les noms de fichiers sont supposés encodés en UTF-8
- Sur les versions récentes de Windows 10 avec Secure Boot activé, il est indiqué que les exigences de signature de Microsoft imposent des conditions qui semblent inaccessibles à un pilote open source
- Une solution de contournement consiste à créer le DWORD
UpgradedSystemdansHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CI\Policy, à le définir sur 1, puis à redémarrer - Ou bien désactiver Secure Boot dans le BIOS
- Une solution de contournement consiste à créer le DWORD
- Dans LXSS, le fait que la racine du lecteur ne soit pas sensible à la casse est un comportement codé en dur par Microsoft
- Il n’est pas possible d’ajouter Btrfs à la boîte de dialogue de formatage native de Windows, car la liste des systèmes de fichiers est codée en dur
- Le formatage Btrfs utilise
mkbtrfs.exe - Si les options spécifiques à Btrfs ne sont pas nécessaires,
format /fs:btrfsfonctionne aussi
- Le formatage Btrfs utilise
- Les NAS Synology semblent utiliser LVM sur les périphériques bloc, et sans pilote LVM pour Windows, ils ne peuvent pas être montés
- Les NAS Thecus utilisent Linux MD RAID ; il faut donc installer aussi WinMD
- Les modèles de permissions Windows et POSIX sont trop différents pour permettre un mappage réellement pratique ; pour empêcher la modification depuis Windows, il est possible de créer des ACL Windows
Changements de la v1.9
- v1.9 est sortie le 15 mars 2024
- La prise en charge du block group tree de Linux 6.1 a été ajoutée
- Un problème de blocage du système sous forte charge a été corrigé
- Les options
/blockgrouptreeet/freespacetreeont été ajoutées àmkbtrfs - Dans
mkbtrfs, la valeur par défaut de/noholesa été alignée sur Linux, donc activée par défaut - La prise en charge des instructions CRC32C a été ajoutée sur aarch64
Debug et options de montage
- WinBtrfs divise les messages de debug en trois niveaux : errors/FIXMEs, warnings et traces
- Le pilote en version release n’enregistre via
DbgPrintque les errors et FIXMEs, visibles avec Microsoft DebugView - Pour joindre le journal de debug complet lors d’un signalement de problème, il faut utiliser la version debug du pilote et des paramètres du registre
DebugLogLevel: 0 pour aucun message, 1 pour errors/FIXMEs, 2 avec warnings inclus, 3 pour toutes les tracesLogDevice: optionnel, périphérique série de sortieLogFile: optionnel, fichier de sortie
- Les options de montage sont stockées sous les sous-clés UUID de chaque système de fichiers dans
HKLM\SYSTEM\CurrentControlSet\Services\btrfs - Principales options
Ignore: ne pas charger ce système de fichiersReadonly: n’autorise pas l’écriture, comme le drapeau LinuxroCompress,CompressForce,CompressType: définissent la compression par défaut, la compression forcée et le type de compression préféréFlushInterval: intervalle de flush des métadonnées, avec une valeur par défaut de 30 secondes comme sous LinuxSubvolId: ID du sous-volume à monter comme racineSkipBalance: ignore la reprise du balance en cours lors du dernier arrêtNoTrim: désactive la prise en charge de TRIMAllowDegraded: autorise le montage d’un volume dégradé avec périphérique manquantNoDataCOW: désactive le copy-on-write pour les nouveaux fichiers, comme le drapeau Linuxnodatacow
Licence et périmètre de responsabilité
- L’ensemble du projet est distribué sous la GNU Lesser General Public Licence, c’est-à-dire la LGPL
- Il est précisé que l’utilisation du logiciel se fait aux risques de l’utilisateur et qu’aucune responsabilité n’est assumée pour d’éventuelles corruptions du système de fichiers
- Tout en indiquant qu’il devrait convenir à un usage quotidien, le projet recommande de faire des sauvegardes
- Des mentions de droits d’auteur et de licences sont incluses pour du code tiers lié à Zlib, LZO, Zstd, BLAKE2 et SHA256
1 commentaires
Avis sur Hacker News
J’ai voulu l’essayer pendant un moment, mais après avoir parcouru les issues GitHub, j’ai vite abandonné
J’y ai vu des problèmes comme des écrans bleus, des blocages, des pics d’utilisation et de la corruption, et je serais prêt à payer pour un pilote btrfs/ZFS stable
Je ne comprends pas bien pourquoi ce genre de projets ne reçoit pas plus d’attention
Donc même si les problèmes mentionnés plus haut sont corrigés, il restera probablement difficile de démarrer Windows depuis btrfs
À Rome, fais comme les Romains : peut-être qu’il faudrait tout simplement ne faire tourner Windows qu’en virtualisation
Le fait que ce soit une réimplémentation complète, sans utiliser le code Linux, est vraiment impressionnant, et la prise en charge de XP/2k3 ainsi que de ReactOS est excellente
Je devrais l’essayer sur l’une de mes vieilles machines
Je ne sais pas trop vers quoi lier ce phénomène, mais il y a cette issue de 2019 sur une bibliothèque QUIC sans entrées/sorties : https://github.com/aiortc/aioquic/issues/4
Ce serait vraiment bien que les systèmes de fichiers suivent aussi ce pattern
Si l’on pouvait réutiliser la logique d’un système de fichiers et l’appliquer à Windows, FUSE, Linux, au stockage linéaire adressable de wasm, etc., la portabilité, la réutilisation et les possibilités de bidouille pourraient devenir énormes
Articles liés :
WinBtrfs – A Windows driver for the next-generation Linux filesystem Btrfs - https://news.ycombinator.com/item?id=15177002 - septembre 2017, 100 commentaires
WinBtrfs v0.7 - https://news.ycombinator.com/item?id=12794214 - octobre 2016, 1 commentaire
Il y a quelques semaines, j’ai essayé de l’utiliser avec un disque dur en btrfs, mais je n’ai pas réussi à le faire fonctionner correctement
Ensuite, j’y ai accédé via WSL : ça a marché quelques fois, puis les échecs sont devenus de plus en plus fréquents, jusqu’à ce qu’il ne puisse même plus être monté
Finalement, j’ai compris qu’il suffisait de démarrer sur une ISO live Linux pour copier/déplacer les fichiers entre le disque Windows et le disque btrfs ; maintenant, j’utilise une ISO live Fedora Workstation sur une clé USB Ventoy
Maintenant, on peut aussi perdre ses données en btrfs sous Windows :-D
J’utilise ce pilote sur mon ordinateur portable depuis un moment
C’est une configuration partagée : Linux pour coder au travail, Windows pour les jeux, les films et les médias
Si vous vous inquiétez d’une corruption des données sur les partitions et disques btrfs, concentrez-vous sur les options de montage du README
J’utilise
Ignorepour la partition système Arch Linux, etReadonlypour tout le resteCela dit, même avec un disque dur externe de 20 To monté entièrement en btrfs avec compression
zstd:2, je n’ai pas rencontré de pics CPU ni de corruptionJe recommande de lire tout le README
L’auteur y répond aux questions que je me posais, et à bien d’autres encore
Je me demande comment ils peuvent dire prendre en charge le RAID 5/6 « de base et avancé »
btrfs lui-même ne le fait pas vraiment, et ce que « de base/avancé » signifie ici n’est pas très clair non plus : https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#raid5...
Le btrfs de Linux prend généralement en charge RAID5, mais il existe des cas limites connus qui rendent son utilisation sûre difficile
En pratique, on est plutôt sur du « utilisable, mais expérimental et réservé aux développeurs »
WinBtrfs liste simplement le mode RAID5 parmi ses fonctionnalités, sans vraiment détailler à quel point il fonctionne bien
Les questions dans les issues liées ont aussi été fermées sans véritable réponse : https://github.com/maharmstone/btrfs/issues/293
Tant que le développeur n’aura pas donné de réponse claire sur son état et ses tests, je ne confierais pas mes données au RAID 5/6
Je ne sais pas pourquoi, mais c’est peut-être parce que les premiers n’ont pas besoin de calculs de parité « avancés »
J’ai utilisé ce pilote et btrfs pour préremplir une bibliothèque sur un Steam Deck
Le téléchargement par le réseau aurait pris beaucoup trop longtemps, et avec ma connexion Internet de l’époque, cela aurait probablement pris 100 fois plus de temps
Ça pourrait devenir le premier système de fichiers depuis FAT à fonctionner directement sous *nix, Mac et Windows
Excellent
Je serais curieux de savoir ce que ça donne vraiment si quelqu’un l’utilise sur la durée ou en production
J’ai vu que TRIM était pris en charge, mais je me demande si RETRIM l’est aussi
Je parle de la fonction nécessaire pour libérer, pendant l’optimisation du lecteur, les zones qui n’ont pas pu être traitées par TRIM au départ parce que la file de commandes était pleine
Je me demande aussi si ça peut servir de remplaçant à NTFS avec parité des données pour quelqu’un qui n’aime pas ReFS, et à quel point c’est mature par rapport à ZFS pour Windows
Ma configuration comporte une partition Windows, une partition Linux (btrfs sur LUKS) et une troisième partition btrfs pour stocker des fichiers
Je ne m’en sers pas souvent, mais quand je m’en sers, je ne remarque même pas sa présence
J’avais l’impression que Windows avait toujours su lire btrfs nativement, et pour un usage consistant simplement à accéder à des fichiers, les modifier et les supprimer, je n’ai utilisé aucune fonctionnalité particulièrement « avancée »
Quand je m’en suis rendu compte et que j’ai annulé le build, deux dossiers portant le même nom mais avec un contenu différent étaient apparus, et j’ai dû supprimer deux fois le même nom de dossier
Il semble y avoir un problème de concurrence dans ce pilote
« Win OpenZFS driver and WinBtrfs driver dont play well with each other »
https://github.com/openzfsonwindows/openzfs/issues/364
D’après ce que j’ai entendu, BTRFS aurait une liste absurdement longue de défauts où il suffit de peu pour qu’il se bloque ou corrompe des données
Forcer sous Windows quelque chose dont la fiabilité est déjà douteuse sur son système d’exploitation natif frôle la folie
Pour s’amuser, pourquoi pas, mais je ne confierais jamais de vraies données à cette combinaison
« Ça marche bien sur mon miroir à 2 disques » n’est qu’une anecdote, pas une donnée
Je me demande si, avec ça, on peut démarrer Windows 10/11 depuis une clé USB Windows formatée en btrfs
Pour avoir utilisé Windows 10 comme ça au quotidien pendant un temps, ça fonctionnait plutôt bien, mais il y a quelques points à surveiller
Il faut une connexion USB stable, ainsi qu’un boîtier de disque USB avec une puce contrôleur fiable et qui ne surchauffe pas
Le disque doit bien résister aux pertes d’alimentation
Malheureusement, je ne connais aucune ressource qui évalue la capacité à gérer les pertes d’alimentation
Certains disques peuvent très mal réagir à une coupure brutale du courant
J’ai eu de bonnes expériences avec un SSD SATA Intel entreprise et avec un disque NVMe dans un Dockcase doté de condensateurs
Si le disque n’apparaît plus, le remettre sous tension peut aider : https://dfarq.homeip.net/fix-dead-ssd/
Il faut aussi mettre en place des sauvegardes automatiques
C’est très utile pour des tests de performances ou des mises à jour de firmware matériel réservées à Windows
Quand on change d’ordinateur, Windows est souvent un peu perdu après le démarrage et il faut redémarrer, puis ça fonctionne
En revanche, je n’ai pas d’expérience avec WinBTRFS ni avec le projet de bootloader séparé, et ce bootloader semble être cassé depuis quelques mois
Démarrer un fichier VHD Windows avec Ventoy peut aussi être une bonne option
Il faut aussi un bootloader séparé
L’auteur a créé une implémentation appelée Quibble, qui prend aussi en charge btrfs
[0] https://github.com/maharmstone/quibble