Почему мой компьютер зависает, когда я копирую файл в Pendrive?

61

У меня действительно странная ситуация здесь. Мой компьютер работает нормально, по крайней мере, в большинстве случаев, но есть одна вещь, с которой я не могу справиться. Когда я пытаюсь скопировать файл с моего pendrive, все в порядке - у меня скорость 16-19M / s, это работает довольно хорошо. Но когда я пытаюсь скопировать что-либо в тот же Pendrive, мой компьютер зависает. Указатель мыши перестает двигаться на секунду или две, затем немного перемещается и снова останавливается. Когда что-то играет, например, в Amarok, звук действует как пулемет. Скорость прыгает с 500К / с до 15М / с, в среднем 8М / с. Это происходит только тогда, когда я копирую что-то в Pendrive. Когда процесс копирования завершен, все возвращается на круги своя.

Я перепробовал все - другой Pendrive, другой USB-порт на передней панели или эти порты сзади, я даже поменял USB-контакты на материнской плате (лицевая панель), но независимо от того, куда я кладу флешку, она всегда одинакова. Я попробовал другую файловую систему , - fat32, ext4. У меня нет проблем с устройством на Windows, на моем ноутбуке. Это должен быть мой компьютер или что-то в моей системе. Я понятия не имею, что искать. Я использую тестирование Debian с автономным Openbox. Мой компьютер довольно старый - Pentium D 3 ГГц, 1 ГБ ОЗУ, 1,5 ТБ WD Green диск. Если у вас есть что-то, что поможет мне решить эту проблему, я буду рад это услышать.

Я не знаю, какую еще информацию я должен предоставить, но если вам что-то нужно, просто спросите, я обновлю этот пост как можно скорее.

Я пытался воспроизвести эту проблему на Ubuntu 13.04 Live CD. Я установил свой зашифрованный раздел + зашифрованный своп и подключил мой Pendrive к USB-порту. Затем я попытался запустить некоторые приложения, и теперь у меня ~ 820 МБ в ОЗУ и около 400 МБ в SWAP. Там нет проблем с копированием, нет замораживания вообще, все так, как и должно быть. Итак, похоже, что это вина системы, но где именно? Что вызвало бы такое странное поведение?

Михаил Морфиков
источник
Когда я столкнулся с чем-то похожим, это было потому, что у меня были проблемы с жестким диском на моем ноутбуке. На диске были плохие области, и каждый раз, когда я пытался что-то прочитать из этих областей, он зависал до тех пор, пока не было сделано. Просто идея для изучения. Возможно, у вас есть плохие сектора, из которых вы пытаетесь читать.
Слыблоты
Мой жесткий диск в порядке, по крайней мере, умный, так сказать (после полного сканирования).
Михаил Морфиков
Попробуйте уменьшить приоритет ввода-вывода процесса копирования, например ionice -c3 cp something.tgz /media/pendrive. Это поместит вновь порожденный cpпроцесс в третий (= самый низкий) класс приоритета «idle».
14:00
Я пробовал это, но это не имеет никакого эффекта.
Михаил Морфиков
@MikhailMorfikov FYI, эта проблема была решена в Linux 4.9. Все еще не проверял исправление самостоятельно. YMMV.
Симус Коннор

Ответы:

85

Используете ли вы 64-разрядную версию Linux с большим объемом памяти? В этом случае проблема может заключаться в том, что Linux может на несколько минут заблокировать большие записи на медленных устройствах, таких как, например, SD-карты или USB-накопители. Это известная ошибка, которая должна быть исправлена ​​в более новых ядрах.

Смотрите http://lwn.net/Articles/572911/

Обходной путь: как корневая проблема:

echo $((16*1024*1024)) > /proc/sys/vm/dirty_background_bytes
echo $((48*1024*1024)) > /proc/sys/vm/dirty_bytes

Я добавил его в мой /etc/rc.localфайл на моих 64-битных компьютерах.

TANSTAAFL ; это изменение может (и, вероятно, уменьшит) пропускную способность этих устройств - это компромисс между задержкой и скоростью. Вернуться к предыдущему поведению вы можете

echo 0 > /proc/sys/vm/dirty_background_bytes
echo 0 > /proc/sys/vm/dirty_bytes

... которые являются значениями по умолчанию, что означает, что поведение при обратной записи будет контролироваться параметрами dirty_ratioи dirty_background_ratio.

Примечание для не очень опытных людей с linux: файлы /proc - это псевдофайлы - просто каналы связи между ядром и пользовательским пространством. Никогда не используйте редактор, чтобы изменить или посмотреть на них; вместо этого получите приглашение оболочки --- например, с sudo -i(разновидности Ubuntu) или su rootи используйте echoи cat).

Обновление 2016/04/18 кажется, что, в конце концов, проблема все еще здесь. Вы можете посмотреть на это на LWN.net , в этой статье об очередях обратной записи .

Rmano
источник
3
У меня есть 64-битная, но только 1 ГБ оперативной памяти, и я должен сказать вам, что это решение работает! Я только что проверил это, и после установки двух параметров больше не происходит замораживание. :)
Михаил Морфиков
1
В моей установке 14.04 uname -aвозвращается 3.13.0-32-generic, так что да. Но я не проверял, был ли патч для проблемы, наконец, интегрирован в ядро ​​или нет. У меня есть машина на 16 ГБ, и, кажется, она работает нормально без обходного пути, хотя я должен сказать, что я не пробовал с особенно медленными устройствами.
Rmano
1
@ IonicăBizău --- это псевдо-файл, не редактировать его vim когда - либо . Получить корневую оболочку (с sudo -i) и использовать вышеупомянутые команды.
Rmano
1
@Rmano Это сработало! Тем не менее, я редактировал его с помощью VIM. Спасибо!
Ионикэ Бизэ
2
Я использую Ubuntu 16.04 на новом ноутбуке (с 16 ГБ ОЗУ). Я был очень зол на эту проблему. Ваше решение работает как шарм! Может быть, вы могли бы добавить, что это все еще может быть необходимо с ядром 4.8.0-45.
LGenzelis
3

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

Чтобы проверить ваши текущие настройки, выполните:

cat /sys/block/sd**X**/device/max_sectors

Вы можете настроить правила зала для этих устройств:

Изменить значение USB "max_sectors" для всей семьи устройств

В этом случае я заменил max_sectors для всех устройств, которые использовали значение по умолчанию от 240 (USB-накопитель) до 32K секторов или 2K секторов.

В моей системе (Mageia 4, 3.14.24 core i7) я должен был сделать это из-за ужасно низкой скорости записи (2 МБ / с) на Kingston DT101 G2 16 ГБ:

vi /usr/lib/udev/rules.d/81-udisks_maxsect.rules

и добавить:

SUBSYSTEMS=="scsi", ATTR{max_sectors}=="240", ATTR{max_sectors}="32678"

И ddскорость записи выросла в 3 раза. mc cpвероятно, в 10-20 раз (после того, как я запустил первый сектор на 8192-м секторе и переформатировал с кластерами, выровненными по 64 тыс.):

fdisk -u /dev/sdh # make DOS compat off if on
mkfs.vfat /dev/sdh1 -n KINGSTON16G -s 128 **-R 4592*** and use *fsck.vfat -v /dev/sdh1

чтобы проверить выравнивание (проверьте, что [начальный сектор данных] должен быть кратным 128 (размер кластера)). Отрегулируйте количество зарезервированных секторов (-R), если необходимо.

По умолчанию max_sectors (240), по-видимому, вызывают сильное усиление записи на некоторых дешевых новых накопителях. Но будьте очень осторожны с такими высокими настройками, подобный эффект достигается в 2048 секторах (вероятно, 1M стереть блоки:

SUBSYSTEMS=="scsi", ATTR{max_sectors}=="240", ATTR{max_sectors}="2048"

Проверьте все ваши старые USB-устройства, чтобы они все еще работали хорошо. Используйте атрибуты vendor / model в файлах правил, чтобы быть более конкретными.

отметка
источник
1

аппаратное и программное обеспечение

Я столкнулся со странной проблемой, похожей на эту, с USB-накопителями, и в моих исследованиях это почти всегда проблема с драйверами или с конкретным оборудованием в ПК / материнской плате.

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

Что делать?

Ваши варианты действительно ограничены здесь. Единственное, что вы можете сделать, - это убедиться, что в вашей системе установлена ​​последняя версия BIOS / прошивки, и что у вас есть последние версии пакетов вашего disto.

Кроме того, все, что я могу предложить, это убедиться, что вы избежите этой ситуации, не пытаясь копировать файлы, пока идет другая копия.

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

Что-нибудь еще?

Если вы действительно одержимы, вы можете попробовать запустить приложение, с которым вы копируете, straceв надежде поймать систему при любом зависании системного вызова. Вы должны быть в состоянии сделать это и из командной строки.

пример

$ strace -o cp1.log cp -r /path/to/dir1 /path/to/usb/. 

Затем, пока он работает, начните еще один.

$ strace -o cp2.log cp -r /path/to/dir2 /path/to/usb/. 

Надеемся, что система зависнет во время этой операции, и, возможно, вам повезет, и вы обнаружите дым в любом из этих файлов журнала.

SLM
источник
Я всегда использую только один случай копирования файлов. Я обновил BIOS (2008), и с тех пор более новой версии нет. Я думаю, что это не BIOS. Мой дистрибутив Debian также обновлен до ветки тестирования. Я попытался использовать, straceи он почти мгновенно остановился, поэтому подождал несколько секунд и остановил процесс. У меня есть журнал 1Mb, но я не могу его прочитать, я не знаю, что искать. Вы можете проверить это здесь pastebin.com/u29RvqgC - это не полный журнал (ограничен 500Kb), но в конце были только строки, подобные тем, что были в конце. Я постараюсь воспроизвести эту проблему с Ubuntu Live CD.
Михаил Морфиков
Я обновил вопрос, как жить тестирование CD.
Михаил Морфиков
@MikhailMorfikov - Я думаю, вы в конце концов поняли, что можете ожидать. Ваше оборудование довольно старое (2008), и вы действительно не можете ничего сделать, кроме того, что я описал выше.
slm
Но даже старые модели способны копировать файлы без проблем.
Михаил Морфиков
@MikhailMorfikov - Возраст - не единственный фактор, но я хотел сказать, что вероятность получения обновлений прошивки или обновлений программного обеспечения для старого оборудования невелика.
slm