Вопрос «Ошибки ввода / вывода» с использованием папки encfs внутри папки Dropbox


У меня есть 200-гигабайтная файловая система Encfs, зашифрованная в моем Dropbox и доступ к которой осуществляется несколькими машинами, и до сих пор у меня не было никаких проблем с ней.

Я переместил около 10 гигабайт данных на один (ubuntu) компьютер X, а через 2 дня, когда синхронизация закончилась на другом компьютере (ubuntu) Y, были некоторые проблемы: некоторые из файлов не могут быть прочитаны на Y и дать мне вход / Ошибки вывода, например

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

Так что некоторая файловая система была повреждена. Все файлы могут быть хорошо прочитаны на компьютере X. Я использовал около 20 файлов с этим свойством; может быть и больше. В этом каталоге, как правило, с этой ошибкой не будет работать только несколько файлов, и многие другие будут в порядке.

У меня также есть система, работающая на Windows-машине Z; Я посмотрел файлы в Z, и у меня также были ошибки ввода-вывода (хотя сообщения об ошибках Windows были более загадочными). Поэтому в некотором смысле проблема почти наверняка «на конце X».

Мне удалось перейти в каталог в фактическом зашифрованном каталоге Dropbox, который соответствует каталогу, в котором происходят ошибки ввода / вывода. Все (зашифрованные) файлы могут быть прочитаны нормально, поэтому проблема не является реальной ошибкой ввода-вывода с физическим диском, проблема, похоже, связана с encfs.

У меня есть все резервные копии данных, и я мог бы просто удалить их все и переписать, но неповрежденная копия находится в системе с очень низкой скоростью загрузки (она у меня дома), и для синхронизации потребовалось 2 дня; Я не хочу перезапускать (не потому, что у меня нет двух дней, а потому, что я не хочу, чтобы мой домашний интернет вялый в течение 2 дней).

Google не привел меня ни к чему. Я затрудняюсь узнать, что делать дальше, если не считать «перезагрузки и повторите попытку», который, как я уже сказал, я надеюсь избежать. Я действительно не понимаю, как файловая система может храниться в каталоге, поэтому я не знаю, как начать отладку проблемы.

Если мне нужно перезапустить, может кто-нибудь сказать мне хороший способ проверить, какие файлы в каталоге имеют ошибки ввода-вывода? Редактировать: в конце я использовал ужасный путь - запустил file в каждом файле, используя find, а затем взломать мой путь к списку плохих файлов, используя grep и emacs, используя метод, который не будет работать, если какие-либо файлы называются такими, как «ошибка вывода» :-)

EDIT (через год): Я живу с этим вопросом уже более года. Я использую обходное решение malte, Однако на прошлой неделе, в первый раз, я фактически потерял данные. Я внес существенные изменения в каталог encfs, я не сделал ничего странного, кроме перемещения данных, а затем мой ночной сценарий (который, я могу добавить, занимает более часа, чтобы работать с большим количеством чтения диска каждую ночь на обоих ubuntu, где у меня есть Dropbox и Encfs), сказал мне, что некоторые файлы выдавали ошибки ввода-вывода на обоих концах. Я должен был восстановить файлы с помощью функции «восстановить удаленные файлы» Dropbox, что было больно, потому что, конечно, все имена файлов зашифрованы, поэтому мне пришлось использовать encfsctlи т.п.

Это побудило меня к действию. Поэтому я убрал пулю и установил второй каталог Encfs, на этот раз с разными глобальными настройками (я не знаю, как изменить эти настройки в данном каталоге encfs, и я уверен, что это невозможно, поэтому единственный способ, которым я мог это сделать , насколько я мог видеть, было скопировать 300 концертов из одного каталога в другой, я должен был сделать это сейчас, потому что, когда я получаю до 500 концертов, я не смогу хранить две копии в своем Dropbox, который предел 1000 концертов).

Так что же я сделал? Я создал еще одну зашифрованную систему хранения файлов, используя нет Инициализация векторных цепочек, нет для векторов инициализации файлов и нет внешняя цепочка IV. Да, я знаю, что это менее безопасно! Да, я знаю, что это не работает для всех! Да, я даже знаю, что аудит безопасности на Encfs пришел к выводу, что я не должен хранить 100 000 идентификаторов пользователей, паролей и данных кредитной карты, используя Encfs! Но это не то, что я использую encfs для, Все, что я хочу сделать, это использовать Dropbox, но чтобы убедиться, что если Dropbox взломан, или есть недовольный сотрудник Dropbox, который утечки данных, то мои данные не продаются. У меня нет секретов боеприпасов, у меня просто есть фотографии моей семьи и связанные с работой вещи, такие как ссылки, которые я не хочу случайно просачиваться.

Пока я здесь, позвольте мне упомянуть некоторые другие ссылки, которые я нашел в прошлом году, которые могут или не могут иметь отношение к этой проблеме. Я недостаточно понимаю, как работает FUSE. Но учитывая, что это мой вопрос, и это уже одна серьезная проблема для меня в течение 1 года, я думал, что буду использовать этот вопрос в качестве личной коллекции того, что я обнаружил о его и, возможно, связанных с этим проблемах.

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

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

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

А также предложение использовать fsck в каталоге encfs.

Мне недостаточно эксперта, чтобы узнать, имеет ли значение какое-либо из них. То, что я знаю, это то, что по состоянию на вчерашний день я начал «снова запускать» с Encfs, и через пару месяцев я отчитаюсь о том, устранила ли это проблему для меня.

ОБНОВИТЬ Через два года я могу теперь уверенно заявить, что изменение этих настроек файла Encfs устранило проблему за счет возможного ослабления моей безопасности. У меня не было ошибок ввода-вывода, так как я внес изменения в свою настройку.


4
2017-08-01 20:17


происхождения


В EncFS есть некоторые протоколы, которые могут быть полезны, и, возможно, просматривать поврежденные сектора жесткого диска или возможный сбой на проблемном компьютере (возможно, «Y»)? - Xen2050
Я все еще живу в страхе перед этой проблемой: - (и я до сих пор не мудрее того, что его вызывает. - eric
@eric Я нахожу это тоже расстраивающим, следовательно, щедростью. Все еще не уверен, как исправить. - Andrew Ferrier
Из-за уязвимостей безопасности, обнаруженных в текущей версии, использование Encfs в Dropbox небезопасно. Видеть cryfs.org/comparison#encfs для деталей. - Heinzi
@Heinzi: это может быть правдой, но это не вопрос. Я не хочу, чтобы мои данные были безопасными для боеприпасов, я просто хочу, чтобы это было намного менее интересно случайному человеку, который взломал Dropbox и хочет продавать вещи, чем все незашифрованные вещи. - eric


ответы:


Если вы используете encfs в режиме максимальной безопасности или вы включили «имя файла в цепочку заголовков IV», он будет разбит на любую услугу, подобную Dropbox. Не включайте его. На самом деле, никогда не используйте его, просто глупо полагаться на путь файла для шифрования данных файла IV.

Я бы использовал «потоковое» кодирование имен файлов и только для «векторов инициализации для каждого файла» и «Файловые отверстия, прошедшие через зашифрованный текст», чтобы сделать надежным encfs.

И не слушайте парни, которые говорят, что encfs уязвим для атак с водяными знаками. Конечно, это связано с природой. Просто не помещайте туда с узнаваемыми шаблонами, такими как Ripped CD.

Это будет правильная настройка encfs. Включена только уникальная поддержка разрешенного файла для каждого файла.

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



Вы явно не понимаете «Максимальный режим безопасности» @eric, рассмотрите сервис, такой как SpiderOak или Won / Next Cloud, которые изначально поддерживают эту технологию для ультрабезопасных типов. - linuxdev2013
@ linuxdev2013: Я не знаю, должен ли ваш комментарий быть направлен на Диляна или меня. Это правда, что когда я написал вопрос, у меня не было понимания доступных мне вариантов при запуске новой файловой системы encfs; теперь я это делаю, и я считаю, что я выбрал варианты в своей новой настройке, которые гораздо более удобны для использования в Dropbox и, строго говоря, менее шифро-фашистски дружелюбны; однако это меня сейчас не беспокоит. - eric


У меня такая же проблема, она также началась всего пару недель назад. Чтобы сделать это более полным:

  • Перемещение файлов и снова устраняет симптомы
  • Все мои машины - Ubuntu, поэтому он не может быть связан с Windows
  • У меня есть три машины в группе синхронизации, и проблема возникает, по крайней мере, из двух из них. См. Ниже расширенный сценарий, чтобы каждая машина могла: a) перечислить свои Ошибки и b) попытаться исправить остальные

Поиск поврежденных файлов:

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

Исправить поврежденные файлы:

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

У меня есть два сценария в корне расшифрованной папки, поэтому и скрипт, и списки поврежденных файлов синхронизируются между всеми машинами


6
2017-10-02 19:20



Это гораздо лучший подход, чем мой (хотя я бы боялся запустить его на нескольких машинах сразу) - eric
Обновление: если ваш опыт не похож на мой, тогда он будет работать нормально до тех пор, пока он не сработает, а затем вы просто потеряли некоторые данные (у вас есть ошибки ввода-вывода на каждой машине). - eric


Хорошо, поэтому я хотел сегодня разобраться, так вот что я сделал. YMMV.

Примечание. Я никогда не узнавал, что вызвало проблему. Но тестирование показало, что если я найду файл на компьютере Y с ошибкой ввода-вывода, то возьму файл на компьютере X, вытащив его из файловой системы и снова заново, исправит проблему. Мне не очень нравится это решение, потому что есть основная проблема, которая может, вероятно, снова укусить меня, но я не знаю, как диагностировать основную проблему.

Итак, сначала я сделал резервную копию всего на компьютере X.

Во-вторых, я побежал (в каталоге, где все проблемы были на Y)

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

[у некоторых из моих имен файлов были пробелы, но у них не было строк новой строки или чего-то еще подобного]

Я побежал wc на io_problems.txt и обнаружил, что у меня было чуть более 2000 строк в этом файле и, следовательно, чуть более 2000 ошибок ввода-вывода в моей системе. Уч.

Затем я использовал короткий макрос emacs для редактирования io_problems.txt: в каждой строке я нашел строку : ERROR: cannot read и просто удалил всю оставшуюся часть строки, начиная с двоеточия. Я сделал это, набрав (в 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 в emacs. Я уверен, что мог бы использовать sed или awk или что-то еще, я просто привык к emacs. Я переименовал полученный файл list.txt ,

До сих пор я остался с файлом list.txt который содержит список имен файлов (которые могут иметь пробелы), которые являются проблематичными на Y.

Теперь на большой момент: мне нужно пропустить этот список файлов, и для каждого файла переместите его из файловой системы и снова заново. Имена файлов могут содержать пробелы. Поэтому я использую дескриптор файла для цикла.

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

Сон заключается в том, что я не перегружаю dropbox, что как-то вызвало исходные проблемы (хотя я не считаю, что проблема связана с dropbox, я провел обширное тестирование с зашифрованными файлами и не обнаружил различий в файлы на X и Y, мое незнание с помощью encfs / fuse не позволило мне провести более тщательное тестирование, чтобы действительно найти, в чем проблема).

2000 файлов и 10 секунд на файл означает, что вся операция займет более 5 часов. Это работает для меня.

В настоящее время я жду, когда цикл завершится, но предварительные тесты, похоже, указывают на то, что проблема решается медленно, но верно.


2
2017-08-02 11:53



У меня такая же проблема, и я сделал следующее замечание: если у файла есть проблема на машине, на машине я никогда не добавлял файл. Я могу отлично читать файл на «исходной» машине, но он будет сообщать «Ошибка ввода / вывода» на одной или нескольких моих других машинах. - NZD