Система блокируется при заполнении дискового ввода-вывода

8

Когда я передаю большой файл с моего внешнего жесткого диска USB3 на внутренний жесткий диск (или наоборот), будь то через Nautilus или через терминал, Ubuntu (Unity) почти полностью блокируется. Такие вещи, как alt-tab, выполняются в течение 20 секунд или более во время передачи файла. Это не тот случай, когда существует много случайных операций чтения / записи на диск, например, при установке пакетов.

Когда я работал под Windows, я мог запускать передачу файлов в фоновом режиме и все еще иметь возможность делать что-то, хотя и медленнее, когда что-то нужно для доступа к диску. Я все еще мог alt-tab просто отлично.

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

Как я могу это исправить? Это довольно раздражает, так как компьютер становится полностью непригодным для копирования файлов. Эта проблема возникает в 14.04 и 15.10. Я вынужден подключить свой жесткий диск к порту USB2, чтобы предотвратить эту проблему, что приводит к гораздо более длительному времени передачи.

Degru
источник
Не должен, но проверьте, помогает ли unix.stackexchange.com/questions/107703/…
Rmano

Ответы:

10

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

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

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

cat /sys/class/block/sda/queue/scheduler    

Для одноразового изменения (до перезагрузки) введите команду

echo cfq | sudo tee /sys/class/block/sda/queue/scheduler

Обратите внимание, что важно внести изменения в то, что у вас есть для внешнего жесткого диска; Мой обычно загружается как SDB. поэтому я бы выдал командуecho cfq | sudo tee /sys/class/block/sdb/queue/scheduler

Я делаю мои изменения постоянными для всех дисков, подключенных к моему компьютеру, добавив параметр ядра elevator=cfqв мой файл grub, который выглядит следующим образом:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash noautogroup elevator=cfq"
Чарльз Грин
источник
Вау, это сработало. Спасибо! Моя система теперь намного быстрее реагирует на передачу и на самом деле быстрее загружает вещи в целом.
2015 г.
Рад слышать, что это помогло.
Чарльз Грин
1
> По умолчанию Ubuntu использует Deadline, но я считаю, что моя система реагирует быстрее, когда я использую Deadline. Я подозреваю, что вы хотели, чтобы эта фраза заканчивалась на «... когда я использую cfq».
markus_b
Я никогда не искал решения по той или иной причине. Я проголосовал за этот ответ, когда он был опубликован несколько дней назад, и теперь у меня была возможность проверить его (мне пришлось перенести много торрентов из Deluge обратно в Transmission, что требовало перепроверки каждого отдельного торрента), и изменение планировщика действительно было улучшение. Система по-прежнему заикается, особенно при переключении рабочих пространств, но наверняка она почти не зависает, как раньше. Спасибо! Этот ответ настолько полезен, что IMO заслуживает награды (а я ее назначаю).
Кос
@kos Это не полное решение, иначе я бы, конечно, был бы намного счастливее - я все еще иногда заикаюсь и нахожу это очень расстраивающим.
Чарльз Грин