Jai « eu besoin dexécuter btrfs balance
sur le système de fichiers de mon seul appareil car jobtenais ENOSPC
même sil y avait effectivement de lespace libre.
Pourquoi cela doit-il être exécuté?
Que fait réellement la balance?
Réponse
Contrairement à la plupart des systèmes de fichiers conventionnels, BTRFS utilise un allocateur en deux étapes. La première étape alloue de grandes régions despace appelées blocs pour des types de données spécifiques , puis la deuxième étape alloue des blocs comme un système de fichiers normal dans ces grandes régions. Il existe trois types de blocs différents:
-
Morceaux de données: ils stockent des données de fichier régulières.
-
Morceaux de métadonnées: ils stockent des métadonnées sur les fichiers, y compris entre autres les horodatages, les sommes de contrôle, les noms de fichiers, la propriété, les autorisations et les attributs étendus.
-
Chunks système: il sagit dun type spécial de chunk qui stocke des données sur lemplacement de tous les autres chunks.
Seul le type de données pour lequel le bloc est alloué peut être stocké dans ce bloc. Le cas le plus courant de nos jours où vous obtenez une erreur -ENOSPC sur BTRFS est que le système de fichiers na plus assez despace pour les données ou les métadonnées des blocs existants et ne peut pas allouer un nouveau bloc. Vous pouvez vérifier que cest le cas en exécution de btrfs fi df
sur le système de fichiers qui a généré lerreur. Si la ligne Données ou Métadonnées affiche une valeur Total qui est significativement différente de la valeur Utilisé, alors cest probablement la cause.
Ce que fait btrfs balance
est de renvoyer des éléments via lallocateur, ce qui entraîne une utilisation de lespace dans les blocs en cours de compactage. Par exemple, si vous avez deux blocs de métadonnées qui sont tous les deux 40% plein, un équilibre les fera devenir un morceau de métadonnées rempli à 80%. En compactant lutilisation de lespace de cette manière, lopération déquilibrage est alors capable de supprimer les blocs maintenant vides, et libère ainsi de la place pour lallocation de nouveaux blocs. Si vous exécutez à nouveau btrfs fi df
après avoir exécuté le solde, vous devriez voir que les valeurs Total et Utilisé sont beaucoup plus proches lune de lautre, car léquilibre a supprimé les morceaux qui nétaient plus nécessaires.