Troubleshooting - Exécution¶
Problèmes rencontrés lors de l'exécution de compute, verify et compare.
Pour chaque problème : Symptôme -> Cause -> Diagnostic -> Solution.
verify échoue sur tous les fichiers alors que rien n'a changé¶
Symptôme : 100% des fichiers en FAILED, failed.txt liste tous les fichiers
avec No such file or directory, pourtant les données sont intactes sur le disque.
Cause : la base a été calculée depuis un répertoire de travail différent de celui
utilisé pour verify. Les chemins relatifs dans le .b3 ne correspondent plus au
répertoire courant.
Diagnostic :
Si les chemins commencent par ./data/fichier.txt mais que tu es dans /home/user/data,
b3sum cherche ./data/fichier.txt depuis /home/user/data/ - soit
/home/user/data/data/fichier.txt, qui n'existe pas.
# Afficher le répertoire de travail courant
pwd
# Comparer avec le dossier enregistré dans le sidecar
cat hashes.b3.meta.json | grep directory
Solution :
# Option 1 : se positionner dans le bon répertoire avant verify
cd /home/user/projet # répertoire depuis lequel compute a été lancé
bash src/integrity.sh verify hashes.b3
# Option 2 : passer le dossier explicitement en second argument
bash src/integrity.sh verify /bases/hashes.b3 /home/user/projet
Règle à retenir : le répertoire de travail au moment du verify doit être identique
à celui du compute. En cas de doute, le sidecar .meta.json indique le dossier source
enregistré lors du compute.
compute produit un .b3 vide ou avec moins de fichiers qu'attendu¶
Symptôme : le fichier .b3 est créé mais contient 0 ligne, ou un nombre
anormalement bas de fichiers.
Cause 1 - dossier vide : le dossier cible ne contient aucun fichier régulier (uniquement des sous-dossiers vides, ou aucun fichier).
Cause 2 - permissions insuffisantes : certains fichiers ne sont pas lisibles
par l'utilisateur courant. b3sum les ignore silencieusement.
Cause 3 - fichiers cachés : find inclut les fichiers cachés (.git/, .DS_Store).
Si le dossier est un dépôt git, les objets dans .git/ sont indexés.
Diagnostic :
# Compter les fichiers trouvés par find (même algorithme que compute)
find ./mon-dossier -type f | wc -l
# Vérifier les permissions des fichiers
find ./mon-dossier -type f ! -readable
# Voir quels fichiers sont inclus
find ./mon-dossier -type f | head -20
Solution :
# Si le dossier est vide : vérifier le chemin passé à compute
ls -la ./mon-dossier
# Si permissions : corriger ou lancer avec sudo (déconseillé)
chmod -R u+r ./mon-dossier
# Si .git/ indésirable : exclure explicitement via un wrapper
find ./mon-dossier -type f -not -path '*/.git/*' | ...
# Note : integrity.sh n'expose pas d'option d'exclusion native
compare retourne des milliers de "modifiés" inattendus¶
Symptôme : modifies.b3 liste des centaines ou milliers de fichiers comme modifiés,
alors que les données n'ont pas changé. nb_disparus et nb_nouveaux sont aussi
anormalement élevés.
Cause : les deux bases ont été calculées depuis des répertoires de travail différents.
Les préfixes de chemins diffèrent, donc compare ne peut pas faire correspondre les entrées.
Exemple :
- hashes_source.b3 : chemins du type ./data/fichier.txt (compute depuis /srv)
- hashes_dest.b3 : chemins du type ./fichier.txt (compute depuis /srv/data)
Aucun chemin ne correspond - tous les fichiers apparaissent comme "disparus" dans l'une et "nouveaux" dans l'autre, et donc "modifiés" si les hashes matchent par accident.
Diagnostic :
Si les préfixes diffèrent, c'est la cause.
Solution :
# Recalculer les deux bases depuis le même répertoire parent
# avec le même dossier cible relatif
cd /srv
bash src/integrity.sh compute ./data hashes_source.b3
# ... migration ...
bash src/integrity.sh compute ./data hashes_dest.b3
bash src/integrity.sh compare hashes_source.b3 hashes_dest.b3
verify retourne exit 1 alors que la vérification est OK¶
Symptôme : la sortie affiche Vérification OK - N fichiers intègres mais le code
de sortie est 1.
Cause : bug connu dans les versions antérieures à 2.0.1 - l'expression arithmétique
(( nb_fail > 0 )) dans ui.sh retourne exit code 1 quand nb_fail=0 sous set -e,
ce qui tue le processus après l'affichage.
Diagnostic :
Solution : mettre à jour vers la version corrigée. Le fix est dans src/lib/ui.sh,
fonction ui_show_verify_result - remplacer :
# Avant (bugué)
(( nb_fail > 0 )) || [ -n "$lines_err" ] && say " failed.txt"
# Après (correct)
if [ "$nb_fail" -gt 0 ] || [ -n "$lines_err" ]; then say " failed.txt"; fi
Codes de sortie¶
| Code | Commande | Signification |
|---|---|---|
0 |
compute |
Base créée avec succès |
0 |
verify |
Tous les fichiers intègres |
0 |
compare |
Comparaison effectuée (même si des différences existent) |
1 |
compute |
Erreur - dossier introuvable, vide, ou b3sum en échec |
1 |
verify |
Anomalie détectée ou erreur technique |
1 |
compare |
Erreur technique uniquement (différences = exit 0) |
Code 1 sur verify : anomalie ou erreur ?
Le code 1 de verify couvre deux cas distincts. Pour distinguer :
bash src/integrity.sh verify hashes.b3
exit_code=$?
if [ $exit_code -ne 0 ]; then
statut=$(grep "STATUT" ~/integrity_resultats/resultats_hashes/recap.txt)
echo "Exit $exit_code - $statut"
# STATUT : ECHEC -> corruption détectée (comportement attendu)
# STATUT : ERREUR -> erreur technique (base invalide, b3sum absent...)
fi
Espaces et caractères spéciaux dans les chemins¶
b3sum et find gèrent les espaces dans les noms de fichiers via -print0 et sort -z
(séparateur null). Les noms de fichiers avec espaces, apostrophes ou caractères Unicode
sont supportés sans configuration particulière.
En revanche, les arguments passés au shell doivent être quotés :
# Correct
bash src/integrity.sh compute "./mon dossier" "ma base.b3"
# Incorrect - le shell splitte sur les espaces
bash src/integrity.sh compute ./mon dossier ma base.b3
Pour les chemins contenant $, ! ou des backticks, utiliser des guillemets simples :
b3sum lent sur un grand nombre de fichiers¶
Comportement normal : compute appelle b3sum une fois par fichier. Sur 100 000
fichiers de petite taille, le temps est dominé par le coût de lancement de b3sum,
pas par le hachage lui-même.
Indicateur : la barre de progression ETA affiche un ETA qui croît au lieu de décroître.
Solution : pas de workaround natif dans la version actuelle. Pour les volumes très importants (> 100 000 fichiers), privilégier Docker sur une machine avec un SSD NVMe.
Voir aussi¶
- Troubleshooting - Installation
- Troubleshooting - Docker
- Troubleshooting - Pipeline
- Troubleshooting - Résultats
- Formats de fichiers - structure du
.b3et impact sur les chemins