Pourquoi est-ce arrivé?
Étant donné que les systèmes de fichiers Unix conventionnels fonctionnent différemment des systèmes de fichiers Windows, WSL stocke des informations supplémentaires sur les propriétés des fichiers spécifiques à Linux dans les attributs étendus des fichiers Windows utilisés pour les représenter. Les programmes Windows ordinaires ne connaissent pas ces attributs et ne les conservent pas lorsque vous modifiez le fichier. Des informations importantes sur le fichier sont perdues lorsque cela se produit.
Lorsque WSL essaie de lire un fichier et qu'il ne trouve pas les attributs qu'il attend, une erreur est signalée, tout comme ce qui se passerait si un système de fichiers natif était corrompu. S'il ne voit jamais les attributs d'un fichier en premier lieu, ce fichier est simplement traité comme inexistant et n'apparaîtra pas dans les listes de fichiers.
Le conseil officiel du WSL est
NE PAS, EN AUCUN CAS , créer et / ou modifier des fichiers Linux à l'aide d'applications, d'outils, de scripts, de consoles Windows, etc.
La création / modification de fichiers Linux à partir de Windows entraînera probablement une corruption des données et / ou endommagera votre environnement Linux, vous obligeant à désinstaller et réinstaller votre distribution!
pour cette raison (mais plus grand, plus rouge et avec plus de soulignements). "Fichiers Linux" signifie tout ce qui se trouve dans votre lxss
répertoire. Vous pouvez modifier les fichiers Windows standard depuis Linux via le /mnt/c/...
système de fichiers DrvFS , mais pas l'inverse.
Cependant, la version 1903 de Windows 10 introduit un nouveau mécanisme qui permet de modifier les fichiers en toute sécurité à partir de Windows tant que vous y parvenez. Cela n'aide pas à résoudre le problème des fichiers déjà corrompus, mais cela peut l'éviter à l'avenir.
Que puis-je faire pour le réparer?
Si vous avez déjà modifié un fichier et que vous ne pouvez plus y accéder, il est toujours possible de lire le contenu de Windows lui-même et de restaurer le fichier de cette façon.
Pour ce faire, vous devrez:
- Revenez à l'emplacement du
AppData\Local\lxss
répertoire dans lequel se trouve le fichier à l'aide de l'Explorateur de fichiers et déplacez-le vers un autre emplacement sur votre lecteur, comme votre bureau.
- Redémarrez WSL après cela pour vider son cache interne, ce que vous pouvez faire simplement en fermant tous vos terminaux et en ouvrant un nouveau. Si des processus de serveur d'arrière-plan sont en cours d'exécution, vous devrez également les arrêter.
- Sous Linux à nouveau, accédez à l'emplacement d'origine du fichier corrompu. Il n'apparaîtra plus du tout si vous avez réussi à déplacer le fichier. Courez
ls
pour vérifier.
Vérifiez le fichier que vous avez déplacé: exécutez
cat /mnt/c/Users/.../Desktop/abc
pour voir le contenu original du fichier.
Si tout a fonctionné jusqu'à présent, vous pouvez maintenant copier ce fichier à l'endroit où vous vous attendiez:
cp /mnt/c/Users/.../Desktop/abc ~/alphabet/abc
La cp
commande entraînera WSL pour restaurer les attributs cachés nécessaires sur le fichier.
Ces instructions fonctionneront pour les fichiers de données ordinaires, mais s'il s'agit d'un fichier de système d'exploitation important, vous devrez peut-être réinstaller entièrement . Pour de nombreux programmes non critiques, la suppression du fichier corrompu de Windows et la réinstallation du programme à l'aide du gestionnaire de packages seront suffisantes. Vous ne pourrez pas supprimer le fichier sous Linux une fois qu'il a été corrompu.
Comment puis-je éviter cela à l'avenir?
Ne manipulez jamais aucun fichier du lxss
répertoire à partir de Windows. Au lieu:
Si vous avez un fichier auquel vous souhaitez accéder depuis Windows et Linux, stockez-le en dehors du lxss
répertoire, n'importe où ailleurs sur votre système Windows. Vous pouvez ouvrir des fichiers Windows à partir de Linux en utilisant l' interopérabilité DrvFS automatique : le /mnt/c
répertoire contient tous les fichiers de votre lecteur C: et ils peuvent être lus et écrits à partir de Linux.
À partir de la version 1903 de Windows (mars 2019), WSL inclut un serveur de fichiers spécial qui rend vos fichiers disponibles pour toutes les applications Windows. Si vous courez
explorer.exe .
puis l'Explorateur de fichiers s'ouvrira montrant le répertoire Linux actuel - vous pouvez copier des fichiers dans ou hors de cette fenêtre, ou les éditer avec n'importe quelle application. Le chemin du répertoire sera quelque chose comme \\wsl$\Ubuntu\var\www
: la \\wsl$\
partie envoie l'accès au fichier via un chemin alternatif sûr.
Si vous en êtes capable, ce sera la meilleure voie à suivre (ou parfois le point ci-dessus). Pour les versions plus anciennes, lisez la suite.
S'il y a un fichier dont vous avez besoin à un endroit spécifique, comme un fichier de configuration, et que vous souhaitez le modifier à partir de Windows, vous pouvez créer un lien symbolique depuis Linux vers l'emplacement réel du fichier ou du répertoire:
ln -s /mnt/c/.../abc ~/.config/xyz/abc
Cela fonctionnera tant que le fichier n'a pas besoin d'avoir d'autorisations ou d'attributs spécifiques sous Linux (comme le ferait un exécutable ou une clé SSH).
Alternativement, et peut-être mieux, modifiez vos fichiers Linux à l'aide d'un éditeur Linux dans le terminal. nano
,, vim
et emacs
sont tous facilement disponibles et fonctionnent bien sous WSL, bien qu'ils aient tous leurs bizarreries.
Si vous devez modifier un fichier avec un programme Windows, vous n'avez pas une version Windows récente et vous ne pouvez pas en faire un lien symbolique, faire une copie ailleurs pour le modifier et le recopier à partir de la /mnt/c
suite, tout comme le corriger ci-dessus, ou utiliser le contrôle de version pour synchroniser vos modifications sur plusieurs emplacements.
D'après certaines expérimentations, le bloc-notes ordinaire semble conserver les attributs nécessaires, mais il ne comprend pas les fins de ligne Unix, vous risquez donc de corrompre le contenu vous-même, et je ne compterais pas sur ce comportement dans tous les cas. Comme il s'agit d'une opération explicitement non prise en charge et non documentée, il est peu probable qu'un éditeur Windows soit fiable.