В связи с чем флешки ведут себя очень странно?

Здравствуйте!
Kernel: 4.10.0-32-generic x86_64 (64 bit)
Desktop: MATE 1.18.0  Distro: Linux Mint 18.2 Sonya

После установки нового ядра 4.10.0-32 появились некоторые странности при операциях с флешками (две флешки средней изношенности); хотя при переходе на предыдущее ядро ситуация не изменяется. Флешки отформатированы в FAT32 в Windows.
Во-первых, при удалении файлов с флешки (в 99% случаях - видеофайлы) файлы удаляются очень быстро, и, ЧСХ, после извлечения\вставки флешки возвращаются обратно на флешку. Также появилась проблема, похожая на печально известный баг #12309 - при передачи файлов на флешку начинает дичайше тормозить компьютер, курсор перемещается отрывисто, и т.п.
Вот, например, сегодня, совершив 3-4 попытки, файлы все таки удалились. Начал скидывать на флешку файл в 1.5 гига, начал тормозить компьютер, в итоге все скинулось. Затем скинул несколько файлов по 500 мб без проблем. Затем, извлек и вставил обратно флешку, и она перестала читаться, ссылается на Input/Output error.
Помню, что месяц назад скидывал на флешку (другую) около 6 ГБ данных разного типа; ни тормозов, ни других проблем обнаружено не было.

Подскажите пожалуйста, что это вообще может быть?

P.S. Есть еще несколько странностей при передаче данных. Скидывая, к примеру, 5 файлов в 575 МБ, прогресс в статус-баре быстро доходит до 570 МБ, зависает на некоторое время, отвисает, затем опять быстро доходит до 1140 МБ (как будто, загрузив уже два файла), зависает, и т.д. Также операции передачи файлов долго отменяются - может занять минуту-две после нажатия на соответствующую кнопку.
  • Вопрос задан
  • 1969 просмотров
Решения вопроса 1
@neol
Также появилась проблема, похожая на печально известный баг #12309 - при передачи файлов на флешку начинает дичайше тормозить компьютер, курсор перемещается отрывисто, и т.п.
Вот, например, сегодня, совершив 3-4 попытки, файлы все таки удалились. Начал скидывать на флешку файл в 1.5 гига, начал тормозить компьютер, в итоге все скинулось.

Есть еще несколько странностей при передаче данных. Скидывая, к примеру, 5 файлов в 575 МБ, прогресс в статус-баре быстро доходит до 570 МБ, зависает на некоторое время, отвисает, затем опять быстро доходит до 1140 МБ (как будто, загрузив уже два файла), зависает, и т.д.

Это долбанутость системы ввода/вывода Linux. Когда программа пишет какие-либо данные на диск, на самом деле они пишутся в память, а непосредственная запись происходит при достижении этим буфером размера, заданного параметром sysctl vm.dirty_ratio, который задаётся в процентах от объёма доступной ( MemFree + Cached) оперативной памяти(на самом деле может быть раньше, но об этом ниже). На современных системах порой получается дохрена (в вашем случае ≈ 570 Мб) и в момент записи устройство начинает офигивать от внезапно свалившегося потока данных на запись ( сколько там скорость записи у вашей флешки? 15-30 Мб/с в лучшем случае? ), а вообще все процессы, использующие какой-либо диск, наглухо блокируются до освобождения буфера. Если таких процессов много, то все ядра процессора повисают в iowait и система начинает заметно лагать.

Чтобы как-то жить с этой фигнёй, надо настроить размеры буферов таким образом, чтобы процесс сброса не вызывал блокировку на длительное время. Например:
sysctl vm.dirty_bytes=10485760
sysctl vm.dirty_background_bytes=2621440

vm.dirty_bytes - аналогично vm.dirty_ratio, но в байтах, а не процентах от сферического коня в вакууме. Если задано vm.dirty_bytes, то vm.dirty_ratio обнуляется и не учитывается.

vm.dirty_background_bytes - тоже самое, но для фонового процесса сброса данных (pdflush), который периодически просыпается и смотрит, не надо ли скинуть что-то на диск ( он может начать сброс раньше, чем заполнится буфер, а может и не начать, если не успеет проснуться (= ).

Это слишком низкие значения, но вашу проблему должны решить полностью. Поиграйте с циферками, чтобы подобрать значения, при которых данные не будут писаться слишком часто и система не будет подвисать при копировании на медленные устройства. Сохранить их между перезагрузками можно через /etc/sysctl.conf.

Затем, извлек и вставил обратно флешку, и она перестала читаться, ссылается на Input/Output error.

Если флешка с индикатором записи, то не вытаскивайте ей пока он мигает, даже если ваш файловый менеджер говорит, что уже можно (он, скотина, врёт!). Если индикатора нет, то просто пойдите заварить себе чайку после нажатия кнопки отмонтировать/извлечь или как там её.

PS Указанные параметры достаточно подробно описаны в документации

PPS мог что-то напутать в деталях, так как время уже позднее, но параметры точно те.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Punk_Joker
@Punk_Joker
Software Engineer в ВО Овен
На арче, с ядром 4.10 или 4.11 тоже были проблемы с флешками, но другие. При включении флешки с 3.0 файлы скидывались очень медленно, и более того, не было гарантии, что они все таки сбросятся.
Ответ написан
Из личного опыта могу сказать что обычно проблемы с флешками идут из-за ОС.
Помню у меня одна флешка на 1 г на XP часто теряла данные, а на 8 работала хорошо.
При переходе на 7 ку и выше все работает идеально.
Ответ написан
Комментировать
@telealex
А не может ли быть это следствием простого "некорректного извлечения" флешки из компьютера (или зависание его, или контакт был плохой в разъеме)?
Уменя целая гора побитых клиентских флешек которые ведут себя подробным образом на винде и конечно очень многие хозяева этих флешек считали что "это ерунда извлекать флешку правильно, и так все нормально работает, а информатики дураки все…"
Да и вообще, сейчас все преждевременно устаревает (учатся делать все ненадежней) - взять хотябы даже те контактные дорожки в разъеме флешки - из-за частого перевтыка, они просто истираются (типа как наждачкой) и контакт теряется ну и флешка просто типа "отваливается" прямо во время записи…
у меня у самого лично несколько флешек по 64гб по этой причине валяется неиспользуемые)

Но пользуясь случаем сразу спрошу тут знатоков: как сделать проверку файловой системы на ошибки fat…/ntfs в Линуксе? Ато все-таки Линукс адекватней подключает побитые разделы (после зависания винды/компа)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы