Frage "Eingabe / Ausgabe-Fehler" mit dem Ordner "encfs" im Dropbox-Ordner


Ich habe ein verschlüsseltes 200-Gigabyte-Encfs-Dateisystem, das in meiner Dropbox gespeichert ist und von mehreren Computern aus aufgerufen wird, und ich hatte bis jetzt noch nie Probleme damit.

Ich bewegte ungefähr 10 Gigs von Daten umher auf einem (Ubuntu) Computer X, und 2 Tage später, als die Synchronisierung auf einem anderen (Ubuntu) Computer beendet wurde Y gab es einige Probleme: einige der Dateien können nicht auf Y gelesen werden und geben mir Input / Ausgabefehler, z

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

Irgendwie ist das Dateisystem beschädigt. Alle Dateien können auf Computer X gut gelesen werden. Ich habe ungefähr 20 Dateien mit dieser Eigenschaft gefunden; da könnte mehr sein. In einem Verzeichnis werden normalerweise nur ein paar Dateien mit diesem Fehler fehlschlagen, und viele weitere werden in Ordnung sein.

Ich habe auch das System läuft auf einer Windows-Maschine Z; Ich habe mir die Dateien in Z angeschaut und auch IO-Fehler (obwohl die Windows-Fehlermeldungen eher kryptisch waren). In gewissem Sinne ist das Problem fast sicher "am Ende von X".

Ich habe es geschafft, zu einem Verzeichnis im tatsächlich verschlüsselten Dropbox-Verzeichnis zu navigieren, das einem Verzeichnis entspricht, in dem die Eingabe / Ausgabe-Fehler auftreten. Alle (verschlüsselten) Dateien können gut gelesen werden, daher scheint das Problem kein tatsächlicher E / A-Fehler bei der physischen CD zu sein, das Problem scheint bei encfs zu liegen.

Ich habe alle Daten gesichert und ich könnte einfach alles löschen und neu schreiben, aber die nicht beschädigte Kopie ist auf einem System, das eine sehr langsame Upload-Geschwindigkeit hat (es ist in meinem Haus) und es dauerte 2 Tage zu synchronisieren; Ich zögere, neu zu starten (nicht, weil ich nicht 2 Tage habe, aber weil ich mein Zuhause Internet für 2 Tage im Wesentlichen nicht träge machen will).

Google hat mich zu nichts geführt. Ich weiß nicht, was ich als nächstes tun soll, kurz "Neustart und Versuch noch einmal", was ich, wie ich derzeit hoffe, vermeiden kann. Ich verstehe nicht wirklich, wie ein Dateisystem in einem Verzeichnis gespeichert werden kann, daher weiß ich nicht, wie ich mit der Fehlersuche beginnen soll.

Wenn ich neu starten muss, kann mir jemand eine nette Möglichkeit geben, zu überprüfen, welche Dateien in einem Verzeichnis IO-Fehler haben ?? Bearbeiten: Am Ende habe ich einen schrecklichen Weg benutzt - rennen file für jede Datei mit findund dann hacking meinen Weg zu einer Liste von schlechten Dateien mit Grep und Emacs mit einer Methode, die nicht funktioniert, wenn irgendwelche Dateien Dinge wie "Ausgabe Fehler" genannt werden :-)

BEARBEITEN (ein Jahr später): Ich habe seit über einem Jahr mit diesem Thema gelebt. Ich habe benutzt Maltes Workaround. Aber letzte Woche habe ich zum ersten Mal Daten verloren. Ich habe wesentliche Änderungen in einem encfs - Verzeichnis vorgenommen, ich habe nichts Seltsames getan, als Daten zu verschieben, und dann mein nächtliches Skript (das, ich hinzufügen möchte, über eine Stunde benötigt, um jede Nacht mit viel Diskettenlesen zu laufen Ubuntu-Rechner, auf denen Dropbox und Encfs laufen, erzählten mir, dass bestimmte Dateien an beiden Enden E / A-Fehler erzeugten. Ich musste die Dateien mit der Funktion "gelöschte Dateien wiederherstellen" von Dropbox wiederherstellen. Das war ein Problem, denn natürlich sind alle Dateinamen verschlüsselt, so dass ich sie verwenden musste encfsctletc.

Dies veranlasste mich zur Aktion. Also habe ich ein bisschen gebissen und ein zweites Encfs-Verzeichnis eingerichtet, dieses Mal mit anderen globalen Einstellungen (ich weiß nicht, wie ich diese Einstellungen in einem bestimmten encfs-Verzeichnis ändern kann und ich bin mir ziemlich sicher, dass es unmöglich ist, also die einzige Möglichkeit Soweit ich sehen konnte, musste ich die 300 Gigs von einem Verzeichnis in ein anderes kopieren, das musste ich jetzt tun, denn wenn ich auf 500 Gigs komme, kann ich keine zwei Kopien mehr in meiner Dropbox speichern ein Limit von 1000 Gigs).

Was habe ich getan? Ich habe ein anderes verschlüsseltes Dateispeichersystem mit eingerichtet Nein Dateinameninitialisierung Vektorverkettung, Nein Per-Datei-Initialisierungsvektoren und Nein externe IV-Verkettung. Ja, ich weiß, das ist weniger sicher! Ja, ich weiß, das funktioniert nicht für alle! Ja, ich weiß sogar, dass ein Sicherheits-Audit bei Encfs zu der Schlussfolgerung kam, dass ich keine 100.000 User-IDs, Passwörter und Kreditkartendaten mit Encfs speichern sollte! Aber Dies ist nicht das, was ich benutze encfs für. Alles, was ich tun will, ist Dropbox zu benutzen, aber um sicherzustellen, dass, wenn Dropbox gehackt wird, oder es einen verstimmten Dropbox-Angestellten gibt, der Daten verliert, dann sind meine Daten nicht das Zeug, das verkauft wird. Ich habe hier keine Munitionsgeheimnisse, ich habe nur Fotos von meiner Familie und arbeitsbezogene Sachen wie Referenzen, die ich nicht zufällig durchsickern lassen möchte.

Während ich hier bin, möchte ich einige andere Links erwähnen, die ich im letzten Jahr gefunden habe und die für dieses Problem relevant sein könnten oder auch nicht. Ich verstehe nicht genug darüber, wie FUSE funktioniert. Aber da dies meine Frage ist und dies seit einem Jahr ein großes Problem für mich darstellt, dachte ich, ich würde diese Frage als eine persönliche Sammlung dessen verwenden, was ich über seine und möglicherweise verwandten Themen herausgefunden hatte.

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

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

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

Und auch der Vorschlag zu verwenden fsck im Verzeichnis encfs.

Ich bin nicht genug von einem Experten, um zu wissen, ob irgendwelche von diesen relevant sind. Was ich weiß, ist, dass ich seit gestern mit Encfs "wieder angefangen" habe, und ich werde in ein paar Monaten darüber berichten, ob dies das Problem für mich behoben hat.

AKTUALISIEREN Zwei Jahre später kann ich nun zuversichtlich feststellen, dass das Ändern dieser Encfs-Dateieinstellungen das Problem behoben hat, auf Kosten der möglichen Schwächung meiner Sicherheit. Ich hatte keine E / A-Fehler, seit ich diese Änderungen in meinem Setup vorgenommen habe.


4
2017-08-01 20:17


Ursprung


EncFS verfügt über eine Protokollierung, die hilfreich sein kann, und möglicherweise in fehlerhafte Sektoren der Festplatte oder möglichen Fehler auf dem Problemcomputer ("Y" vielleicht?) - Xen2050
Ich habe immer noch Angst vor diesem Problem :-( und bin immer noch nicht klüger, was das verursacht. - eric
@eric Ich finde es auch frustrierend, daher das Kopfgeld. Ich bin mir immer noch nicht sicher, wie ich das beheben soll. - Andrew Ferrier
Aufgrund von Sicherheitslücken in der aktuellen Version ist die Verwendung von Encfs in einer Dropbox nicht sicher. Sehen cryfs.org/comparison#encfs für Details. - Heinzi
@ Heinzi: Das könnte stimmen, aber das ist nicht die Frage. Ich möchte nicht, dass meine Daten sicher sind, ich möchte nur, dass es für eine zufällige Person, die Dropbox gehackt hat und etwas verkaufen will, viel weniger interessant ist als das ganze unverschlüsselte Zeug. - eric


Antworten:


Wenn Sie encfs im Modus "maximale Sicherheit" ausführen oder die Option "Dateiname zu IV-Header-Verkettung" aktiviert haben, werden alle Dropbox-ähnlichen Dienste unterbrochen. Aktivieren Sie es nicht. Benutze es eigentlich nie, es ist einfach nur dumm, sich auf den Dateipfad für die Dateidatenverschlüsselung IV zu verlassen.

Ich würde "stream" Dateinamencodierung und nur "pro-Datei-Initialisierungsvektoren" und "Datei-Löcher, die an Chiffretext übergeben werden" -Features verwenden, um encfs zuverlässig zu machen.

Und hören Sie nicht auf die Guyz, die sagen, dass encfs anfällig für die Wasserzeichenangriffe ist. Oh natürlich, es tut wegen seiner Natur. Stellen Sie einfach nicht das mit den erkennbaren Mustern wie gerippte CDs.

Dies wäre das korrekte encfs-Setup. Nur die Unterstützung einzelner Dateien pro Datei und Sparse ist aktiviert.

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



Sie haben eindeutig kein Verständnis für 'Maximaler Sicherheitsmodus' @eric, betrachten einen Dienst wie SpiderOak oder Won / Next Cloud, die diese Unterstützung für die ultra-sicheren Typen unter uns haben. - linuxdev2013
@ linuxdev2013: Ich weiß nicht, ob dein Kommentar auf Dilyan oder mich gerichtet sein soll. Es stimmt, dass ich, als ich die Frage schrieb, kein Verständnis für die Optionen hatte, die mir beim Start eines neuen encfs-Dateisystems zur Verfügung standen. jetzt tue ich das, und ich glaube, ich habe Optionen in meinem neuen Setup gewählt, die weit mehr Dropbox-freundlich sind und streng genommen weniger Verschlüsselung - faschistisch freundlich; Das stört mich jedoch momentan nicht. - eric


Ich habe genau das gleiche Problem, es hat gerade erst vor ein paar Wochen angefangen. Nur um das zu vervollständigen:

  • Durch das erneute Verschieben von Dateien werden die Symptome behoben
  • Alle meine Maschinen sind Ubuntu, also kann es nicht Windows sein
  • Ich habe drei Maschinen in der Synchronisierungsgruppe, und das Problem tritt bei mindestens zwei von ihnen auf. Siehe unten für ein erweitertes Skript, so dass jede Maschine a) ihre Fehler auflisten und b) versuchen kann, die Fehler der anderen zu beheben

Finde korrupte Dateien:

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

Korrigierte Dateien reparieren:

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

Ich habe diese beiden Skripts im Stammverzeichnis des entschlüsselten Ordners, sodass sowohl das Skript als auch die Listen der beschädigten Dateien zwischen allen Computern synchronisiert werden


6
2017-10-02 19:20



Dies ist eine viel bessere Herangehensweise als meine (obwohl ich Angst hätte, sie vielleicht auf mehr als einer Maschine gleichzeitig auszuführen). - eric
Update: Wenn Ihre Erfahrung etwas wie meine ist, dann funktioniert das bis zu dem Tag, an dem es nicht funktioniert, und dann haben Sie nur einige Daten verloren (Sie haben E / A-Fehler auf jedem Rechner). - eric


OK, also wollte ich das heute aussortieren, also hier ist was ich getan habe. YMMV.

Hinweis: Ich habe nie herausgefunden, was das Problem verursacht hat. Aber Tests haben gezeigt, dass, wenn ich eine Datei auf Computer Y mit einem I / O-Fehler gefunden habe, die Datei auf Computer X genommen, sie aus dem Dateisystem heraus und wieder hinein verschoben hätte, würde das Problem beheben. Ich mag diese Lösung nicht wirklich, weil es ein zugrunde liegendes Problem gibt, das mich vermutlich wieder beißen könnte, aber ich weiß nicht, wie ich das zugrunde liegende Problem diagnostizieren soll.

OK, also zuerst habe ich alles auf Computer X gesichert.

Zweitens lief ich (in dem Verzeichnis, in dem alle Probleme auf Y waren)

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

[Einige meiner Dateinamen hatten Leerzeichen, aber keine Zeilenumbrüche oder etwas anderes]

ich rannte wc auf io_problems.txt und festgestellt, dass ich nur über 2000 Zeilen in dieser Datei hatte, und damit nur über 2000 E / A-Fehler in meinem System. Autsch.

Dann habe ich ein kurzes Emacs-Makro zum Bearbeiten verwendet io_problems.txt: In jeder Zeile habe ich die Zeichenfolge gefunden : ERROR: cannot read und löschte einfach den Rest der Zeile beginnend mit dem Doppelpunkt. Ich tat dies, indem ich (in Emacs) eintippte (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 in Emacs. Ich bin mir sicher, dass ich sed oder awk oder was auch immer benutzt haben könnte, ich bin nur mehr gewöhnt an Emacs. Ich habe die resultierende Datei umbenannt list.txt .

Bis jetzt bin ich mit einer Datei übrig list.txt Das enthält eine Liste von Dateinamen (die Leerzeichen enthalten können), die für Y problematisch sind.

Jetzt für den großen Moment: Ich muss diese Liste von Dateien durchlaufen und für jede Datei aus dem Dateisystem heraus und wieder einlagern. Die Dateinamen können Leerzeichen enthalten. Also benutze ich einen Dateideskriptor für die Schleife.

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

Der Schlaf ist so, dass ich Dropbox nicht überwältige, was irgendwie die ursprünglichen Probleme verursacht hat (obwohl ich nicht glaube, dass das Problem bei Dropbox liegt; ich habe umfangreiche Tests mit den verschlüsselten Dateien durchgeführt und konnte keine Unterschiede in den Dateien bei X und Y; meine Ignoranz mit encfs / fuse hinderte mich daran, strengere Tests durchzuführen, um das Problem tatsächlich zu finden.

2000 Dateien und 10 Sekunden pro Datei bedeutet, dass die gesamte Operation mehr als 5 Stunden dauert. Das funktioniert für mich.

Ich warte derzeit auf diese Schleife zu beenden, aber vorläufige Tests scheinen darauf hinzuweisen, dass das Problem langsam aber sicher gelöst wird.


2
2017-08-02 11:53



Ich habe das gleiche Problem und habe folgende Beobachtung gemacht: Wenn eine Datei ein Problem auf einer Maschine hat, ist sie nie auf der Maschine, der ich die Datei hinzugefügt habe. Ich kann die Datei auf dem Quellcomputer einwandfrei lesen, aber es wird auf einer oder mehreren meiner anderen Maschinen "Eingabe- / Ausgabefehler" gemeldet. - NZD