Копировать на флешку очень медленно?

45

Когда я копирую файлы на устройство USB, это занимает намного больше времени, чем в Windows (то же самое устройство USB, тот же порт), это быстрее, чем скорости USB 1.0 (1 МБ / с), но намного медленнее, чем скорости USB 2.0 (12 МБ / с). На копирование 1,8 ГБ у меня уходит более 10 минут (это должно быть <3 мин.) У меня есть две идентичные флешки SanDisk Cruzer 8 ГБ, и у меня одинаковые проблемы с обоими. У меня есть супер талантливый 32 ГБ USB SSD в соседнем порту, и он работает с ожидаемой скоростью.

Проблема, которую я, похоже, вижу в графическом интерфейсе, заключается в том, что индикатор выполнения почти мгновенно достигает 90%, чуть медленнее завершает работу на 100% и затем зависает там в течение 10 минут. Прерывание копирования в этот момент может привести к повреждению в конце файла. Если я подожду, пока копия завершится успешно.

Любые идеи? вывод dmesg ниже:

[64059.432309] usb 2-1.2: new high-speed USB device number 5 using ehci_hcd
[64059.526419] scsi8 : usb-storage 2-1.2:1.0
[64060.529071] scsi 8:0:0:0: Direct-Access     SanDisk  Cruzer           1.14 PQ: 0 ANSI: 2
[64060.530834] sd 8:0:0:0: Attached scsi generic sg4 type 0
[64060.531925] sd 8:0:0:0: [sdd] 15633408 512-byte logical blocks: (8.00 GB/7.45 GiB)
[64060.533419] sd 8:0:0:0: [sdd] Write Protect is off
[64060.533428] sd 8:0:0:0: [sdd] Mode Sense: 03 00 00 00
[64060.534319] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.534327] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.537988] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.537995] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.541290]  sdd: sdd1
[64060.544617] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.544619] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.544621] sd 8:0:0:0: [sdd] Attached SCSI removable disk
Eloff
источник
Linux откладывает запись на диск в обмен на выполнение других задач быстрее. Просто предположите, попробуйте запустить syncи посмотреть, не ускоряет ли это процесс. <- не проверено, но возможно
RobotHumans
это не имеет смысла, что это отложит его для одного типа USB, но не для другого. Также я, кажется, вспоминаю синхронизацию вызовов Linux каждые 30 секунд или около того? Может быть устаревшим. Я ожидаю, что это какая-то проблема с драйвером или совместимостью, поскольку она зависит от типа устройства.
Eloff
Быть быстрее на других USB-накопителях не в вашем вопросе. Если бы это было так, я бы предложил заглянуть в hdparm. Так что имеет смысл, если вы рассматриваете это с точки зрения того, кто не знает всей вашей настройки, но зависит от вашего вопроса для деталей
RobotHumans
«У меня есть супер талантливый 32 ГБ USB SSD в соседнем порту, и он работает с ожидаемой скоростью». это было там, но хорошо спрятано, я признаю :) Так что это за материал hdparm, на который вы намекаете?
Eloff
Ладно, SSD и флэш-память - это не одно и то же. Но, продвигаясь вперед, hdparm - это утилита, которая позволяет вам вручную устанавливать скорость доступа / вращения
RobotHumans

Ответы:

29

Почему копирование на мой USB-накопитель происходит так медленно в Linux (и быстрее в Windows)?

Кэширование Причина 1. Файл может сделать запись появляются медленнее или быстрее

Проблема, которую я, похоже, вижу в графическом интерфейсе, заключается в том, что индикатор выполнения почти мгновенно достигает 90%, чуть медленнее завершает работу на 100% и затем зависает там в течение 10 минут.

Одна вещь, которую вы должны понять, это кеширование файлов. Linux (и Windows) будут использовать в противном случае «пустую» оперативную память для кэширования операций чтения / записи и ускорения их при последующих обращениях. Кэширование операций копирования для медленных устройств приводит к поведению, которое вы видите - «быстрое завершение» фактически записывает в кеш, а затем замедляется и останавливается, потому что фактическая сброс данных в кеше (синхронизация) на медленное устройство очень долго Если вы прервете в этот момент, данные будут повреждены (как вы заметили), поскольку синхронизация никогда не завершается.

Такое копирование в Windows может показаться более быстрым (включая заявленные скорости в МБ / с), поскольку иногда Windows не будет ожидать синхронизации и объявляет задание выполненным, как только данные записываются в кэш.

Причина 2. Запись большого количества файлов, особенно маленьких, идет медленно

Для копирования 1,8 ГБ

Благодаря тому, как работают флэш-память и файловые системы, самая высокая пропускная способность (скорость) достигается при записи очень больших файлов. Запись большого количества маленьких файлов или даже смешанных данных, содержащих множество маленьких файлов, может сильно замедлить процесс. Это касается и жестких дисков, но в несколько меньшей степени.

Причина 3. Невозможно сравнить скорости записи на USB-накопитель и твердотельный накопитель

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

  • USB-флешка садового сорта обычно состоит из микросхем флэш-памяти, которые записываются последовательно (последовательно), и не имеет собственного кэша.

  • SSD, с другой стороны, содержит контроллер, который записывает данные на микросхемы флэш-памяти параллельно , увеличивая пропускную способность в 2 раза или более по сравнению с USB-накопителем.

    • Если бы ваш SSD на 32 ГБ имел 4x 8 ГБ чипов, он все равно был бы в 4 раза быстрее, чем USB-накопитель при любой операции записи.
    • Твердотельный накопитель также содержит кэш-память ОЗУ (например, жесткие диски), поэтому он может быстро сохранять входящие данные в кэш-памяти и сообщать ОС об этом, в то время как ему все еще приходится записывать эти данные во флэш-память.
  • Таким образом, с одним большим файлом ваши 32 ГБ ГБ с предполагаемой структурой 4x будут в 4 раза быстрее; со многими небольшими файлами это будет в 10 или более раз быстрее, поскольку он может разумно хранить их в своем кэше.


Подводя итог , можно сказать, что это причины, по которым копирование файлов на USB-накопители может выглядеть медленнее в Linux. Это на самом деле медленнее из-за проблемы с оборудованием / драйвером или что-то еще

Правильное сравнение скорости записи между Linux и Windows

  • Прежде всего, забудьте о SSD из-за причины 3. Это как апельсины и яблоки.
  • Чтобы свести на нет влияние причины 1 (кеширование) и причины 2 (маленькие файлы), вам необходимо протестировать один большой файл, размер которого превышает объем ОЗУ в тестовой системе.
  • В Linux вы можете создать его с помощью dd if=/dev/urandom of=largetest bs=1M count=7500, что дает вам тестовый файл 7500 МБ. Предполагая, что в вашей системе менее 4 ГБ ОЗУ, этого достаточно. Скопируйте это на недавно отформатированный флеш-накопитель Sandisk 8GB и определите время
  • Перезагрузитесь в Windows и скопируйте largetestс флешки на жесткий диск. Перезагрузите снова (чтобы удалить его из кеша). Затем отформатируйте USB-накопитель (тот же vfat / FAT32!) И скопируйте largetestс жесткого диска на флешку.
  • Как сравниваются времена?
иш
источник
2
cc: @Eloff Re Причина 1 : Да, синхронизация кэша, безусловно, может повлиять на кажущееся время записи. Но объяснит ли один только кеш, почему он там висит 10 минут ?? Я думаю, что нам нужно больше деталей от ОП. Re Причина 2 : Почему вы предполагаете , эта передача состояла из множества мелких файлов? Я не думаю, что OP предоставляет какие-либо подробности об этой передаче 1,8 Гб, не так ли? Re Причина 3 : Да, SSD это другой зверь. Вероятно, он также будет подключен через SATA, а не через USB. Я думаю, что OP просто неправильно говорил и называл USB-накопитель SSD. Но опять же, нет способа узнать, если мы не получим больше деталей от ОП.
иррациональный Джон
2
Этот ответ явно игнорирует, как вопрос был сформулирован. Вопрос ясно говорит об одном большом файле, и тот факт, что прерывание копирования приводит к искаженному файлу.
zrajm
4
@zrajm это правда. Однако для таких как я, сталкивающихся с той же проблемой, это очень полезно.
Питикос,
Как отключить это поведение кэширования тогда?
Амину Кано
7

Нашел исправление, все, что я сделал, было размонтировал, удалил диск и запустил sudo modprobe ehci_hcdв Терминале. Вставьте диск и agian, sudo modprobe ehci_hcdкогда я вставлю диск и вау 20 / мбс думал, что поделюсь. Надеюсь, мне не придется делать это каждый раз ... но это не сложно ...

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/177235 говорит, что они исправили ошибку.

DJ Radio
источник
Шутки в сторону?? Это сообщение об ошибке датируется декабрем 2007 года и содержит ссылки на Ubuntu Gutsy 7.10. (К вашему сведению: @MarcoCeppi)
иррациональный Джон
3
@irrationalJohn Я не дал ответ, я просто убрал его. Во-вторых, просто потому, что сообщение об ошибке устарело, не означает, что оно все еще недействительно. Это происходит в соответствии с этим
Марко Чеппи
@MarcoCeppi Да, я знаю, ты только редактировал. Вот почему я предварял « FYI: ». Я подумал, что если вы отредактируете это, вы можете (или не можете ) заинтересоваться Я подумал, что если тебе все равно, ты просто проигнорируешь уведомление. Что касается старого сообщения об ошибке, которое все еще актуально ... Более 4 лет назад, и я думаю, по крайней мере, 8 (?) Выпусков позже? Для ошибки производительности? Конечно, это возможно, но это не первое место, где я бы посмотрел. FWIW.
иррациональный Джон
7

Я думаю, что вероятность того, что это проблема порта, очень мала. Скорее всего, это проблема LINUX (или конфигурации linux) - поищите, и вы найдете тысячи отчетов о проблемах с медленным USB в linux / ubuntu. Для меня это почти showtopper для Linux - теперь у меня Ubuntu 12.04 LTS и у меня все еще есть эта проблема (поэтому я предпочитаю использовать установку Win7 - в основном / только из-за этого). Эта проблема (или что-то с похожими симптомами) существует уже несколько лет, по-видимому, не устранена. И за это время я попробовал несколько физических ПК с несколькими разными версиями Ubuntu (конфигурация по умолчанию) и 2-3 разных USB-накопителя ....

Питер
источник
5

Просто umountустройство, если оно уже смонтировано, и подключите его вручную /mnt/foldername.

В моем случае,

umount /media/usb0
mount /dev/sdb1 /mnt/sam

После этого справляется очень быстро.

msnfreaky
источник
Это, а rsyncне cpкажется, делает свое дело.
Ирфан
19
Это не имело никакого значения для моей ситуации. Кроме того, на самом деле это не решение без теории, почему это должно иметь значение.
LondonRob
@ Irfan Нет, rsync тоже тормозит ...
sergzach
3

Сейчас 2019 год, и у меня все еще такая же проблема. Поэтому я решил, что я ищу в Интернете решение. Я нашел следующую страницу, которая предлагает один: https://gist.github.com/2E0PGS/f63544f8abe69acc5caaa54f56efe52f

Это говорит:

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

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

Если это работает, вы можете сделать это изменение постоянным при перезагрузке, вставив две строки в конце вашего /etc/rc.localфайла.

Для меня это имело следующий эффект:

Предварительное копирование больших файлов на USB-накопитель началось бы очень быстро (например, 60 МБ / с) и становилось все медленнее и медленнее (<10 МБ / с), пока не выглядело так, как будто оно никогда не закончится.

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

Дженни О'Рейли
источник
1

Если вы переключитесь на USB 3.0, вы перейдете от 1 Мбит / с до 5-8 Мбит / с. Я переключаюсь на USB 3.0 pci и внешний HD и не оглядываюсь назад.

Ghost logger
источник
1

Когда вы смотрите в / etc / mtab, видите ли вы, что устройство было смонтировано с опцией «flush»?

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

GarfieldElCat
источник
Параметр сброса установлен по умолчанию, любой способ остановить это?
Бен Лутгенс
@ Бен Лютгенс - Да, вы можете поместить свою собственную запись в / etc / fstab, у которой нет параметров сброса. Используйте sudo blkid, чтобы найти соответствующий UUID устройства и введите такую ​​запись, как UUID = "здесь ваше устройство uuid" / mnt / <ваша точка монтирования здесь> uid = 1000, gid = 1000, fmask = 0022, dmask = 0022 0 0. Измените uid, gid, чтобы они соответствовали идентификатору пользователя и группе идентификатора обычного пользователя, которого вы используете (как обнаружил getent passwd <ваш пользователь>).
А.Данищевский
Когда я делаю это, все, что изменяется, это то, что я больше не получаю индикатор выполнения для копирования, и копирование, кажется, действительно срабатывает / завершается только тогда, когда я пытаюсь размонтировать устройство, и оно говорит мне «не отключайте, пока операция не будет завершена». ».
Дженни О'Рейли,
0

У меня были некоторые проблемы также со скоростью передачи на внешнем диске WD, после открытия его в Windows SO, я всегда использовал LINUX, после этого скорость передачи была около 1,5 Мб / с, чем я отключил внешний жесткий диск, запустивший dmesg там это было говоря, что sdb1 был непонятно размонтирован, запустил fsck, который сделал несколько ремонтов и после этой скорости передачи снова 20 Мб / с при копировании с sda на внешний диск. fsck - это всегда риск, если у вас есть данные, но это сработало для меня, без потери данных.

anymamundy
источник
-2

У меня тоже была эта проблема, но я использую команду cp, и вы обновляете вашу флешку за считанные секунды;

cp -r -u /home/user/Muziek/ /media/user/Audiousbsti
cp -r -u /home/user/Muziek/ /media/user/4F49-4A65/

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

Барт
источник
-3

Хорошо, у меня была та же проблема в течение трех дней, и как мне удалось сделать резервную копию моего жесткого диска объемом 1 ТБ с помощью rsync, я знаю, что он используется для резервного копирования, но он выполнил свою работу, даже при передаче больших файлов, которые я использую для этого сделай эту работу Если вы хотите использовать его с графическим интерфейсом, я предлагаю установить Grsync, который является графической версией rsync, так как rsync работает на терминале.

Надеюсь, это помогло

Отлично
источник