Question "Erreurs d'entrée / sortie" en utilisant le dossier encfs dans le dossier Dropbox


J'ai un système de fichiers crypté Encfs de 200 gig qui vit dans mon Dropbox et est accessible par plusieurs machines, et je n'ai jamais eu de problèmes avec ce système jusqu'à présent.

J'ai déplacé environ 10 Go de données sur un ordinateur (ubuntu) X, et 2 jours plus tard, lorsque la synchronisation était terminée sur un autre ordinateur (ubuntu) Y, il y avait des problèmes: certains fichiers ne pouvaient pas être lus / Erreurs de sortie, par exemple

$ file myfile.txt
myfile.txt: ERROR: cannot read `myfile.txt' (Input/output error)

Le système de fichiers a donc été corrompu. Tous les fichiers peuvent être lus correctement sur l’ordinateur X. Je possède environ 20 fichiers avec cette propriété; il pourrait y en avoir plus. Dans un répertoire, seuls quelques fichiers échouent généralement avec cette erreur, et beaucoup d'autres seront acceptables.

J'ai également le système en cours d'exécution sur une machine Windows Z; J'ai regardé les fichiers dans Z et j'ai aussi eu des erreurs IO (bien que les messages d'erreur Windows étaient plutôt plus cryptiques). Donc, dans un certain sens, le problème est presque certainement "à la fin de X".

J'ai réussi à naviguer dans un répertoire dans le répertoire Dropbox chiffré qui correspond à un répertoire dans lequel les erreurs d’entrée / sortie se produisent. Tous les fichiers (chiffrés) peuvent être lus correctement, de sorte que le problème ne semble pas être une erreur IO réelle avec le disque physique, le problème semble être avec encfs.

J'ai sauvegardé toutes les données et je pouvais simplement tout supprimer et les réécrire, mais la copie non corrompue se trouve sur un système qui a une vitesse de téléchargement très lente (elle est chez moi) et il a fallu 2 jours pour la synchronisation; Je suis réticent à redémarrer (pas parce que je n'ai pas 2 jours, mais parce que je ne veux pas fondamentalement ralentir mon internet à domicile pendant 2 jours).

Google ne m'a conduit à rien. Je ne sais plus quoi faire, à moins de "redémarrer et réessayer", ce que j'espère éviter. Je ne comprends pas vraiment comment un système de fichiers peut être stocké dans un répertoire, donc je ne sais pas comment déboguer le problème.

Si je dois redémarrer quelqu'un peut-il me dire comment vérifier quels fichiers dans un répertoire ont des erreurs IO? Modifier: à la fin j'ai utilisé une façon horrible - courir file sur chaque fichier, en utilisant find, puis piratage vers une liste de fichiers incorrects utilisant grep et emacs en utilisant une méthode qui ne fonctionnera pas si des fichiers sont appelés des choses comme "erreur de sortie" :-)

EDIT (un an plus tard): Je vis avec ce problème depuis plus d'un an maintenant. J'ai utilisé La solution de malte. Cependant, la semaine dernière, pour la première fois, j'ai effectivement perdu des données. J'ai apporté des modifications substantielles à un répertoire encfs, je n'ai rien fait de bizarre à part le déplacement des données, puis mon script nocturne (qui pourrait prendre plus d’une heure pour lire beaucoup de disques, tous les soirs, à la fois sur le disque dur). Les machines ubuntu sur lesquelles se trouvent Dropbox et Encfs) m'ont dit que certains fichiers donnaient des erreurs d'E / S aux deux extrémités. Je devais restaurer les fichiers en utilisant la fonctionnalité "restaurer les fichiers supprimés" de Dropbox, ce qui était pénible car, bien sûr, tous les noms de fichiers étaient cryptés. encfsctletc.

Cela m'a incité à agir. J'ai donc mordu la balle et mis en place un deuxième répertoire Encfs, cette fois avec différents paramètres globaux (je ne sais pas comment modifier ces paramètres dans un répertoire encfs donné et je suis certain que c'est impossible, donc la seule façon de le faire) , pour autant que je puisse voir, était de copier les maintenant 300 concerts d'un répertoire à un autre, je devais le faire maintenant parce que quand je vais jusqu'à 500 concerts je ne pourrai pas stocker deux copies dans ma boîte de dépôt qui a une limite de 1000 concerts).

Alors qu'est-ce que j'ai fait? Je configure un autre système de stockage de fichiers crypté en utilisant non chaînage du vecteur d'initialisation du nom de fichier, non vecteurs d’initialisation par fichier et non chaînage IV externe. Oui je sais que c'est moins sécurisé! Oui je sais que cela ne marche pas pour tout le monde! Oui, je sais même qu'un audit de sécurité sur Encfs est parvenu à la conclusion que je ne devais pas stocker 100 000 identifiants, mots de passe et détails de carte de crédit à l'aide d'Encfs! Mais ce n'est pas ce que j'utilise pour encfs. Tout ce que je veux faire, c'est utiliser Dropbox mais pour m'assurer que si Dropbox est piraté ou qu'un employé Dropbox mécontent fuit des données, alors mes données ne sont pas vendues. Je n'ai pas de secrets de qualité des munitions ici, j'ai juste des photos de ma famille et des trucs liés au travail comme des références que je ne veux pas divulguer au hasard.

Alors que je suis ici, permettez-moi de mentionner quelques autres liens que j'ai trouvés au cours de l'année dernière et qui pourraient ou non être pertinents pour cette question. Je ne comprends pas assez comment fonctionne FUSE. Mais étant donné que c'est ma question et que cela a été un problème majeur pour moi pendant un an maintenant, je pensais utiliser cette question comme une collection personnelle de ce que j'avais découvert sur ses problèmes et peut-être liés.

https://stackoverflow.com/questions/24966676/transport-endpoint-is-not-connected

https://github.com/vdudouyt/mhddfs-nosegfault

https://github.com/vgough/encfs/issues/109

Et aussi la suggestion d'utiliser fsck sur le répertoire encfs.

Je ne suis pas assez expert pour savoir si l'un ou l'autre est pertinent. Ce que je sais, c’est qu’à partir d’hier, j’ai recommencé avec Encfs, et je vous ferai savoir dans quelques mois si cela a résolu le problème pour moi.

METTRE À JOUR Deux ans plus tard, je peux maintenant affirmer en toute confiance que la modification de ces paramètres de fichier Encfs a résolu le problème, au risque d’affaiblir ma sécurité. Je n'ai pas eu d'erreurs d'E / S depuis que j'ai apporté ces modifications à ma configuration.


4
2017-08-01 20:17


origine


EncFS dispose de certains éléments de journalisation qui pourraient être utiles, et peut-être examiner les secteurs défectueux du disque dur ou une éventuelle défaillance de l'ordinateur en cause ("Y" peut-être?) - Xen2050
Je vis toujours dans la peur de ce problème :-( et je ne suis toujours pas le plus sage de ce qui le cause. - eric
@eric Je trouve cela frustrant aussi, d'où la prime. Je ne sais toujours pas comment réparer. - Andrew Ferrier
En raison de failles de sécurité trouvées dans la version actuelle, l'utilisation d'Encfs dans un Dropbox n'est pas sécurisée. Voir cryfs.org/comparison#encfs pour plus de détails. - Heinzi
@ Heinzi: c'est peut-être vrai, mais ce n'est pas la question. Je ne veux pas que mes données soient sécurisées pour les munitions, je veux juste qu'elles soient beaucoup moins intéressantes pour une personne au hasard qui a piraté Dropbox et veut vendre des choses, que toutes les choses non cryptées. - eric


Réponses:


Si vous exécutez encfs dans le mode "sécurité maximale" ou si vous avez activé "chaînage d'en-tête de fichier à IV", il sera interrompu sur tout service de type Dropbox. Ne pas l'activer En fait, ne l'utilisez jamais, il est tout simplement stupide de compter sur le chemin du fichier pour le cryptage des données de fichier IV.

J'utiliserais les fonctions d'encodage de fichiers "stream" et uniquement les "vecteurs d'initialisation par fichier" et "les trous de fichiers transmis au texte crypté" pour rendre encfs fiable.

Et n'écoutez pas les gars qui disent que encfs est vulnérable aux attaques de tatouage. Oh bien sûr, ça le fait à cause de sa nature. Il suffit de ne pas y mettre les motifs reconnaissables comme les CD déchirés.

Ce serait la configuration correcte de encfs. Seule la prise en charge de fichiers rares à la fin par fichier est activée.

Version 6 configuration; created by EncFS 1.7.4 (revision 20100713)
Filesystem cipher: "ssl/aes", version 3:0:0 (using 3:0:2)
Filename encoding: "nameio/stream", version 2:1:0 (using 2:1:2)
Key Size: 256 bits
Using PBKDF2, with 206833 iterations
Salt Size: 160 bits
Block Size: 1024 bytes
Each file contains 8 byte header with unique IV data.
File holes passed through to ciphertext.

3
2017-07-07 13:52



Vous ne comprenez clairement pas le mode de sécurité maximale @eric, pensez à un service comme SpiderOak ou Won / Next Cloud qui supporte nativement les types ultra sécurisés parmi nous. - linuxdev2013
@ linuxdev2013: Je ne sais pas si votre commentaire est destiné à Dilyin ou à moi. Il est vrai que lorsque j'ai écrit la question, je n'avais aucune compréhension des options à ma disposition lors du démarrage d'un nouveau système de fichiers encfs. maintenant je le fais, et je crois que j'ai choisi des options dans ma nouvelle configuration qui sont beaucoup plus faciles à utiliser dans les dropboxes et, à proprement parler, moins conviviales pour le cryptage; Cependant, cela ne me dérange pas actuellement. - eric


J'ai exactement le même problème, il vient aussi de commencer il y a quelques semaines. Juste pour rendre cela plus complet:

  • Déplacer des fichiers à nouveau corrige les symptômes
  • Toutes mes machines sont Ubuntu, donc il ne peut pas être lié à Windows
  • J'ai trois machines dans le groupe de synchronisation et le problème se produit sur au moins deux d'entre elles. Voir ci-dessous un script étendu pour que chaque machine puisse a) lister ses erreurs et b) essayer de réparer celles des autres

Rechercher des fichiers corrompus:

saveFile="$(hostname)-corruptFiles"
find $dir -exec file {} \;|grep "output error" > /tmp/corruptFilesRaw.txt
cat /tmp/corruptFilesRaw.txt | awk -F  ":" '{print $1}' > $saveFile

Correction des fichiers corrompus:

while read i <&3; do
    #check if file is corrupted on this machine as well
    file "$i" >/dev/null 2>&1
    retcode=$?
    if [ $retcode -eq 0 ]; then
        #if not, fix it
        mv "$i" /tmp/crap
        sleep 5
        mv /tmp/crap "$i"
        sleep 1
    else
        #if it is corrupt here as well, skip it
        echo $i >> /tmp/remainingCorruptedFiles
    fi;
done 3<$fileList

#replace file list with list of remaining corrupt files
rm $fileList
mv /tmp/remainingCorruptedFiles $fileList

J'ai ces deux scripts dans la racine du dossier déchiffré, donc le script et les listes de fichiers corrompus sont synchronisés entre toutes les machines


6
2017-10-02 19:20



C'est une approche bien meilleure que la mienne (bien que j'aie peur de l'exécuter sur plus d'une machine à la fois) - eric
Mise à jour: si votre expérience ressemble à la mienne, cela fonctionnera bien jusqu’au jour où elle ne fonctionnera pas, puis vous perdrez des données (vous avez des erreurs d’E / S sur chaque machine). - eric


OK donc je voulais que cela soit réglé aujourd'hui, alors voici ce que j'ai fait. YMMV.

Note: Je n'ai jamais découvert ce qui avait causé le problème. Mais les tests ont montré que si je trouvais un fichier sur l'ordinateur Y avec une erreur d'E / S, le problème serait résolu si le fichier se trouvait sur l'ordinateur X, le retirant du système de fichiers et le réinsérant. Je n'aime pas vraiment cette solution car il y a un problème sous-jacent qui pourrait vraisemblablement me rater à nouveau, mais je ne sais pas comment diagnostiquer le problème sous-jacent.

OK, j'ai d'abord tout sauvegardé sur l'ordinateur X.

Deuxièmement, j'ai couru (dans le répertoire où tous les problèmes étaient sur Y)

$ find . -exec file '{}' \; | grep "output error" > ~/io_problems.txt

[certains de mes noms de fichiers avaient des espaces mais aucun ne comportait de nouvelles lignes ou quoi que ce soit d'autre]

Iran wc sur io_problems.txt et a constaté que j'avais un peu plus de 2000 lignes dans ce fichier, et donc un peu plus de 2000 erreurs d'E / S sur mon système. Aie.

Ensuite, j'ai utilisé une courte macro emacs pour modifier io_problems.txt: dans chaque ligne j'ai localisé la chaîne : ERROR: cannot read et juste effacer tout le reste de la ligne en partant du côlon. Je l'ai fait en tapant (dans emacs) (C-x ( C-s : ERROR: cannot read [now press left arrow key to get back to the first colon] C-k [right arrow key] C-x ) C-u 2500 C-x e dans emacs. Je suis sûr que j'aurais pu utiliser sed ou awk ou autre chose, je suis juste plus habitué à emacs. J'ai renommé le fichier résultant list.txt .

Jusqu'à présent, je suis resté avec un dossier list.txt qui contient une liste de noms de fichiers (qui peuvent avoir des espaces) qui posent problème sur Y.

Maintenant, pour le grand moment: je dois parcourir cette liste de fichiers et pour chaque fichier, déplacez-le hors du système de fichiers et de nouveau. Les noms de fichiers peuvent contenir des espaces. J'utilise donc un descripteur de fichier pour la boucle.

while read i <&3; do
  mv "$i" ~/crap
  sleep 5
  mv ~/crap "$i"
  sleep 5
  done 3<~/list.txt

Le sommeil est tel que je ne suis pas submergé par Dropbox, ce qui est en quelque sorte à l'origine des problèmes initiaux (bien que je ne pense pas que le problème soit avec dropbox; j'ai fait des tests approfondis avec les fichiers chiffrés et fichiers à X et Y, mon ignorance avec encfs / fuse m'a empêché de faire des tests plus rigoureux pour trouver quel était le problème).

2000 fichiers et 10 secondes par fichier signifient que l’opération complète prendra plus de 5 heures. Cela fonctionne pour moi.

J'attends actuellement la fin de cette boucle mais les tests préliminaires semblent indiquer que le problème est en train d'être résolu lentement mais sûrement.


2
2017-08-02 11:53



J'ai le même problème et j'ai fait l'observation suivante: Si un fichier a un problème sur une machine, ce n'est jamais sur la machine à partir de laquelle j'ai ajouté le fichier. Je peux lire le fichier parfaitement sur la machine "source", mais il signalera une "erreur d'entrée / sortie" sur une ou plusieurs de mes autres machines. - NZD