Как устранить медленную скорость при копировании на USB устройства?
Товарищи, здравствуйте! Помогите с решением очень старой и, как показал трехдневный поиск в интернете, частично решенной, но местами проявляющей себя проблемы уровня ядра, берущей корни еще с "бага 12309", вроде как.
Суть проблемы: при копировании относительно тяжелых фалов (от 1 ГБ и более) на блочные USB устройства (конкретно - флешки на разных чипах и разных объемов с фс NTFS) наблюдаю следующее - на скорости ~45МБ\с заполняется буфер I\O и после этого скорость падает до критически малых показателей в ~ 130 Кб/сек, пока буфер не освободится снова и в итоге 1,5 ГБ копируются на флешки непростительных минут 30-40. Система не виснет в ноль, может быть какие-то фризы и наблюдаются. но они не значительны. Прогресс-бары трех разных проводников (Nemo 4.4.2, Thunar 18.04.0 и консольный mc) имеют поведение примерно такое, как описано выше - до середины ползет быстро (~45МБ\с), потом неопределенно долго, ОДНАКО, бывает и так, что прогресс-бар худо-бедно доползет до конца, но штатно отмонтировать флешку не выходит - она все еще занята копированием. То есть в момент, когда файл до конца отправился в буфер - система отчиталась процессу проводника о выполнении, а проводник отчитался мне, но де-факто - копирование из буфера быть может только на середине и это лишь визуальный обман.
Что пробовал:
1) Монтировал флешку с опцией sync - скорость стабильно... Стабильно ничтожная - 130 Кб/сек, как я понял - это минование буфера с последующей прямой записью, но как видите - скорость все равно никчемная.
2) Устанавливал ограничения на дисковый буфер в значение 4 Мб (sysctl переменные: vm_dirty_bytes и vm_backgrounds_ditry_bytes) - не помогло ровным счетом никак (потом выяснил, что это вообще не лекарство)
3) Проверял на режим, в котором примонтирована флешка - режим 2.0.
Как решал проблему:
Получилось случайно, с помощью dd удачно скопировал 10 гиговый фильм блоками по 4 Мб, указав размер блока в параметре bs=, предварительно посмотрев, какие оптимальные размеры блока установлены во флешке командой fdisk. Времени заняло примерно 7 минут, что считаю оптимальным вариантом для 2.0 стандарта. Однако поймите меня правильно, я не хочу применять костыли. Программа dd шикарная, но для своего спектра задач и совсем не хочется прописывать alias'ы и переплетать все сикось-накось.
Что имею:
- Linux Mint 18.04.1 с ядром 5.3.0-46-generic
- BIOS древних ревизий, без возможности настройки Legacy-mode для USB.
- 8 ГБ ОЗУ
- Единственный HDD, разбитый максимально примитивно - / и swap на 16ГБ
Какие крутилки крутить и что менять, прописывать, что делать, в общем, чтобы копированием я пользовался максимально по-домохозяски? Я прошу проявить вашу сдержанность и если этот вопрос в кругу знающих считается детским и глупым - все же дать мне действенный совет, который общепринят. Если нужно больше конкретики по системе (выводы логов, показания мониторов и тд), то я с удовольствием все предоставлю. Всем заранее спасибо!
А если при монтировании указать опцию big_writes?
А если попробовать собрать самую свежую версию NTFS-3G?
Ну и на заметку:
1) держите в голове что драйвер NTFS-3G userspace и он априори будет гораздо медленнее.
2) для себя же старайтесь избегать ntfs, есть куча нативных фс которые понимают андроиды да телевизоры. Есть компромисс в виде exfat(тут уже есть вариант как медленный fuse так и быстрый kernel)
К сожалению, точного однозначного решения нет. Если не получилось сразу, то и не получится, USB-подсистема в Linux определённо худшая из всех.
Серьёзно, проблема известная и очень старая.
Извиняюсь, что старую тему поднимаю.
Но у меня на достаточно новой системе такая проблема
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.3 LTS
Release: 22.04
Codename: jammy
Флешек несколько штук. Все довольно новые (1-2 года) с USB 3. Последнюю вчера купил.
Когда копирую большой файл (гигов 10), то до процентов 50% добегает за пару секунд, а потом стопорится и невероятно медленно доходит до 10%. После попытки отмонтировать еще приходится столько же ждать пока система сообщит о том, что устройство отключено.
Как уже заметили коллеги выше - используй другую отличную от NTFS ФС (exFAT - отличный кандидат). От дистрибутива к дистрибутиву драйвер, отвечающий за USB какой попало поставляют. Один через FUSE работает и там обещанная скорость в пределах вменяемой для 3.0, где-то да, через userspace всякие ntfs-3g, где 15 Мб/с - хороший показатель. В общем, не забывай, что NTFS - проприетарщина и нативной поддержки на уровне ядра мы не увидем никогда. Лично мне, как автору статьи, очень легче жить стало после смены ФС. Ту же exFAT читают и мультиварки.
Да, забыл сказать, что дело не в NTFS. Я сначала его использовал, а затем стал пробовать extFAT. На нем и продолжил все эксперименты. Так вот с extFAT та же проблема.