"Eingabe- / Ausgabefehler" mit dem encfs-Ordner im Dropbox-Ordner

2151
eric

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

Ich habe ungefähr 10 Gigs Daten auf einem (Ubuntu) Computer X verschoben, und zwei Tage später, als die Synchronisierung auf einem anderen (Ubuntu) Computer Y beendet war, 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 wurde das Dateisystem beschädigt. Alle Dateien können auf Computer X problemlos gelesen werden. Ich habe mit dieser Eigenschaft etwa 20 Dateien gefunden. da könnte mehr sein. In einem Verzeichnis schlagen normalerweise nur wenige Dateien mit diesem Fehler fehl, und viele andere werden in Ordnung sein.

Ich habe auch das System auf einem Windows-Computer Z ausgeführt; Ich habe mir die Dateien in Z angeschaut und auch IO-Fehler bekommen (obwohl die Windows-Fehlermeldungen eher kryptisch waren). In gewissem Sinne liegt das Problem also gewissermaßen "am Ende von X".

Es ist mir gelungen, zu einem Verzeichnis im eigentlichen verschlüsselten Dropbox-Verzeichnis zu navigieren, das einem Verzeichnis entspricht, in dem die Eingabe- / Ausgabefehler auftreten. Alle (verschlüsselten) Dateien können problemlos gelesen werden. Das Problem scheint also kein tatsächlicher E / A-Fehler bei der physischen Festplatte zu sein. Das Problem scheint bei encfs zu liegen.

Ich habe alle Daten gesichert und könnte sie einfach löschen und neu schreiben, aber die nicht beschädigte Kopie befindet sich auf einem System, das eine sehr langsame Upload-Geschwindigkeit hat (in meinem Haus) und die Synchronisierung dauerte 2 Tage. Ich zögere nicht, neu zu starten (nicht, weil ich keine zwei Tage habe, sondern weil ich mein Internet im Grunde nicht für zwei Tage träge machen möchte).

Google hat mich zu nichts geführt. Ich weiß nicht, was als nächstes zu tun ist, kurz "Neustart und erneut versuchen", was ich, wie ich sage, derzeit hoffentlich vermeiden möchte. Ich verstehe nicht wirklich, wie ein Dateisystem in einem Verzeichnis gespeichert werden kann, und ich weiß nicht, wie ich mit dem Debuggen des Problems beginnen soll.

Wenn ich neustarten muss, kann mir jemand eine nette Möglichkeit geben, zu überprüfen, welche Dateien in einem Verzeichnis IO-Fehler haben? Bearbeiten:file Am Ende habe ich eine schreckliche Methode verwendet: Laufen Sie mit jeder Datei und verwenden Sie sie find, und hacken Sie mich dann zu einer Liste der fehlerhaften Dateien mit grep und emacs. Verwenden Sie eine Methode, die nicht funktioniert, wenn Dateien wie " Ausgabefehler ":-)

EDIT (ein Jahr später): Ich lebe seit über einem Jahr mit diesem Thema. Ich habe Maltes Workaround verwendet . In der letzten Woche habe ich jedoch zum ersten Mal überhaupt Daten verloren. Ich habe wesentliche Änderungen in einem encfs-Verzeichnis vorgenommen, ich habe nichts Außergewöhnliches getan, als Daten zu verschieben, und dann ist mein nächtliches Skript (das ich hinzufügen möchte, mehr als eine Stunde für jede Diskette erforderlich, jede Nacht auf beiden Ubuntu-Maschinen, auf denen Dropbox und Encfs ausgeführt werden) sagte mir, dass bestimmte Dateien an beiden Enden zu E / A-Fehlern führten. Ich musste die Dateien mithilfe der Dropbox-Funktion "Gelöschte Dateien wiederherstellen" wiederherstellen. Dies war ein Problem, da natürlich alle Dateinamen verschlüsselt sind. Daher musste ich encfsctlusw. verwenden .

Dies veranlasste mich zum Handeln. Also biss ich die Kugel und richtete ein zweites Encfs-Verzeichnis ein, diesmal mit verschiedenen globalen Einstellungen (ich weiß nicht, wie ich diese Einstellungen in einem bestimmten Encfs-Verzeichnis ändern soll, und ich bin mir ziemlich sicher, dass dies unmöglich ist, also der einzige Weg, wie ich das tun könnte Soweit ich sehen konnte, war das Kopieren der jetzt 300 Gigs von einem Verzeichnis in ein anderes, das musste ich jetzt tun, da ich bei 500 Gigs keine zwei Kopien in meiner Dropbox speichern kann ein Limit von 1000 Gigs).

Was habe ich gemacht? Ich habe ein anderes verschlüsseltes Dateispeichersystem ohne Dateinamen-Initialisierungsvektor, keine Initialisierungsvektoren pro Datei und ohne externe IV-Verkettung eingerichtet. Ja ich weiß das ist weniger sicher! Ja ich weiß das funktioniert nicht für alle! Ja, ich weiß sogar, dass eine Sicherheitsüberprüfung für Encfs zu dem Schluss kam, dass ich nicht 100.000 Benutzer-IDs, Passwörter und Kreditkartendaten mithilfe von Encfs speichern sollte! Aber dafür benutze ich nicht encfs. Alles, was ich tun möchte, ist die Verwendung von Dropbox. Wenn Sie jedoch sicherstellen möchten, dass Dropbox gehackt wird oder ein unzufriedener Dropbox-Mitarbeiter Daten verliert, sind meine Daten nicht das, was verkauft wird. Ich habe hier keine Geheimnisse der Munitionsklasse, ich habe nur Fotos von meiner Familie und berufsbezogenen Dingen wie Referenzen, die ich nicht willkürlich durchsickern möchte.

Lassen Sie mich, während ich hier bin, einige andere Links erwähnen, die ich im letzten Jahr gefunden habe, die für dieses Problem möglicherweise relevant sind oder nicht. Ich verstehe nicht genug darüber, wie FUSE funktioniert. Da dies jedoch meine Frage ist und dies seit 1 Jahr ein großes Problem für mich ist, dachte ich, ich würde diese Frage als persönliche Sammlung dessen verwenden, was ich über seine und möglicherweise damit zusammenhängende Probleme entdeckt hatte.

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

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

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

Und auch den Vorschlag für fsckdas encfs-Verzeichnis.

Ich bin kein Fachmann genug, um zu wissen, ob einer von ihnen relevant ist. Was ich weiß ist, dass ich gestern mit Encfs "wieder angefangen habe" und in einigen Monaten wieder berichten werde, ob dies das Problem für mich behoben hat.

UPDATE Zwei Jahre später kann ich jetzt zuversichtlich feststellen, dass das Problem durch das Ändern dieser Einstellungen der Encfs-Datei behoben wurde, was möglicherweise die Sicherheit meiner Systeme beeinträchtigt. Ich habe keine I / O-Fehler, seit ich diese Änderungen in meinem Setup vorgenommen habe.

5
EncFS hat einige Protokollierungen, die hilfreich sein könnten und möglicherweise auf fehlerhafte Sektoren der Festplatte oder möglichen Fehler auf dem Problemcomputer hinweisen ("Y" möglicherweise?). Xen2050 vor 9 Jahren 0
Ich lebe immer noch in Angst vor diesem Problem :-( und bin immer noch nicht weiser, was es verursacht. eric vor 8 Jahren 1
@eric Ich finde es auch frustrierend, daher die Belohnung. Immer noch nicht sicher, wie man das beheben soll Andrew Ferrier vor 8 Jahren 0
Aufgrund von Sicherheitslücken in der aktuellen Version ist die Verwendung von Encfs in einer Dropbox nicht sicher. Weitere Informationen finden Sie unter https://www.cryfs.org/comparison#encfs. Heinzi vor 8 Jahren 0
@Heinzi: das mag wahr sein, aber das ist nicht die Frage. Ich möchte nicht, dass meine Daten sicherer sind. Ich möchte, dass es für eine zufällige Person, die Dropbox gehackt hat und etwas verkaufen will, viel weniger interessant ist als alles unverschlüsselte Zeug. eric vor 8 Jahren 0

3 Antworten auf die Frage

6
malte

Ich habe genau das gleiche Problem, es hat auch erst vor ein paar Wochen angefangen. Nur um dies vollständiger zu machen:

  • Das Verschieben und Wiederherstellen von Dateien behebt die Symptome
  • Alle meine Maschinen sind Ubuntu, daher kann es sich nicht um Windows handeln
  • Ich habe drei Computer in der Sync-Gruppe, und das Problem tritt bei mindestens zwei von ihnen auf. Nachfolgend finden Sie ein erweitertes Skript, mit dem jeder Rechner a) die Fehler auflisten und b) die Fehler der anderen beheben kann

Finden Sie beschädigte Dateien:

saveFile="$(hostname)-corruptFiles" find $dir -exec file {} \;|grep "output error" > /tmp/corruptFilesRaw.txt cat /tmp/corruptFilesRaw.txt | awk -F ":" '' > $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 Liste der beschädigten Dateien zwischen allen Computern synchronisiert werden

Dies ist ein viel besserer Ansatz als meiner (obwohl ich vielleicht Angst hatte, ihn auf mehr als einer Maschine gleichzeitig auszuführen) eric vor 9 Jahren 0
Update: Wenn Ihre Erfahrung in etwa so ist wie meine, wird dies bis zu dem Tag funktionieren, an dem es nicht funktioniert, und Sie haben nur ein paar Daten verloren (Sie haben auf jedem Rechner E / A-Fehler). eric vor 8 Jahren 0
3
Dilyin

Wenn Sie encfs im Modus "Maximale Sicherheit" ausführen oder wenn Sie "Dateinamen in IV-Header-Verkettung" aktiviert haben, wird der Dropbox-ähnliche Dienst beschädigt. Nicht aktivieren Verwenden Sie es niemals, es ist einfach dumm, sich auf den Dateipfad für die Dateiverschlüsselung IV zu verlassen.

Ich würde "stream" Dateinamencodierung und nur "Per-File-Initialisierungsvektoren" und "Dateilöcher, die durch verschlüsselten Text geleitet werden" verwenden, um die Encfs zuverlässig zu machen.

Und hör nicht auf den Kerl, der sagt, dass encfs anfällig für die Angriffe mit Wasserzeichen ist. Oh, natürlich wegen seiner Natur. Legen Sie einfach nicht das mit den erkennbaren Mustern wie zerrissene CDs ab.

Dies wäre das richtige encfs-Setup. Es ist nur die Unterstützung für eindeutige iv-Dateien pro Dateiende 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. 
Sie haben offensichtlich kein Verständnis für 'Maximum security mode' (maximaler Sicherheitsmodus), @eric. Denken Sie an einen Service wie SpiderOak oder Won / Next Cloud, der diese Unterstützung für die extrem sicheren Typen unter uns bietet. linuxdev2013 vor 8 Jahren 0
@ linuxdev2013: Ich weiß nicht, ob Ihr Kommentar an Dilyin oder mich gerichtet sein soll. Es stimmt, dass ich beim Schreiben der Frage kein Verständnis für die verfügbaren Optionen beim Starten eines neuen encfs-Dateisystems hatte; Jetzt mache ich das, und ich glaube, ich habe in meinem neuen Setup Optionen gewählt, die weitaus Dropbox-freundlicher und strikt weniger Verschlüsselungsfaschist-freundlicher sind. dies stört mich aber momentan nicht. eric vor 8 Jahren 0
2
eric

OK, also wollte ich das heute klären, also habe ich Folgendes getan. YMMV.

Hinweis: Ich habe nie herausgefunden, was das Problem verursacht hat. Tests haben jedoch ergeben, dass das Problem behoben werden kann, wenn ich eine Datei auf dem Computer Y mit einem E / A-Fehler gefunden habe, die dann auf dem Computer X abgelegt und aus dem Dateisystem verschoben würde. Ich mag diese Lösung nicht wirklich, weil es ein zugrunde liegendes Problem gibt, das mich vermutlich wieder beißt, aber ich weiß nicht, wie ich das zugrunde liegende Problem diagnostizieren kann.

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

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

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

[Einige meiner Dateinamen hatten Leerzeichen, aber keiner hatte Zeilenumbrüche oder ähnliches.]

Ich lief wcmit io_problems.txt und stellte fest, dass ich etwas mehr als 2000 Zeilen in dieser Datei hatte und daher etwas mehr als 2000 E / A-Fehler in meinem System. Autsch.

Dann habe ich ein kurzes Emacs-Makro zur Bearbeitung verwendet io_problems.txt: In jeder Zeile habe ich die Zeichenfolge gefunden : ERROR: cannot readund einfach den Rest der Zeile aus dem Doppelpunkt gelöscht. Ich tat dies, indem ich (in 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 ein Emacs tippte . Ich bin mir sicher, ich hätte sed, awk oder was auch immer verwenden können, ich bin nur mehr an emacs gewöhnt. Ich habe die resultierende Datei umbenannt list.txt.

Bisher habe ich noch eine Datei list.txt, die eine Liste von Dateinamen enthält (die Leerzeichen enthalten können), die auf Y problematisch sind.

Nun zum großen Moment: Ich muss diese Liste der Dateien durchlaufen und für jede Datei aus dem Dateisystem verschieben und wieder zurück. 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 ausführliche Tests mit den verschlüsselten Dateien durchgeführt und konnte keine Unterschiede in der Dateien bei X und Y; meine Unkenntnis von encfs / fuse hinderte mich an strengeren Tests, um wirklich herauszufinden, was das Problem war.

2000 Dateien und 10 Sekunden pro Datei bedeuten, dass der gesamte Vorgang mehr als 5 Stunden dauert. Das funktioniert für mich.

Ich warte derzeit auf das Ende dieser Schleife, aber vorläufige Tests deuten darauf hin, dass das Problem langsam aber sicher gelöst wird.

Ich habe das gleiche Problem und habe folgende Beobachtung gemacht: Wenn eine Datei ein Problem auf einer Maschine hat, ist sie niemals auf der Maschine, von der ich die Datei hinzugefügt habe. Ich kann die Datei auf dem 'Quell'-Rechner einwandfrei lesen, aber auf einem oder mehreren meiner anderen Rechner wird' Eingabe / Ausgabefehler 'angezeigt. NZD vor 7 Jahren 0