запись dd на USB-флешку вызывает массовое чтение

запись dd на USB-флешку вызывает массовое чтение

В настоящее время я восстанавливаю usb-флешку с помощью образа dd, который я создал ранее. Однако замечена очень низкая скорость записи около ~7 МБ/с, хотя флешка обычно намного быстрее.

Немного осмотревшись, я заметил, что с USB-накопителя считывается много данных, что объясняет низкую производительность записи. В это время к устройству не обращается ничего, кроме dd.

Отредактированная atopстрока:

sdd: busy 101% | read 18020 | write 613 | MBr/s 7.04 | MBw/s 7.1

Я заметил похожее поведение при прямой записи в мой массив md с помощью dd. Однако при записи в смонтированную файловую систему с помощью dd этого не происходит.

Итак, мой вопрос: почему данные считываются с USB-накопителя при прямой записи на блочное устройство и можно ли это предотвратить, чтобы повысить производительность записи?

решение1

Итак, не совсем понятно, что происходит, но я подозреваю, что вы записываете небольшие блоки (по 512 байт) на USB, а затем dd проверяет, правильно ли записан байт, что приводит к ОГРОМНОМУ количеству операций чтения и записи, чтения и записи.

Настройка размера блока на «правильный» размер — нетривиальная задача, но есть несколько правил, как это сделать. В общем, я обнаружил, что размер блока в 64 КБ — это хороший компромисс по большинству направлений, но ваши файловые системы могут вносить изменения в этот размер, если вы используете что-то экзотическое (например zfs, ).

Попробуйте что-то вроде этого: lbzcat image-dd.bz2 | dd of=/deb/sdX bs=64k

Для более подробного обсуждения посетитеэта почта.

решение2

Для меня ddпо умолчанию используется кэш страниц. Я думаю, это нормально для систем с кэшем страниц. Однако кэш страниц требует чтения устройства хранения, что может привести к низкой скорости записи.

Для меня есть 3 способа обойти это и получить полную скорость:

  1. Установите ddразмер блока 4096 или кратный ему. (без чтения)
  2. Установите ddразмер блока достаточно большим. Для меня это было около 1 миллиона и выше. Я получил полную скорость около 1 миллиона. (очень мало чтений)
  3. Не используйте кэш страницы, указав ddпараметр oflags=direct. Установите ddразмер блока достаточно большим, кратным 512. Для меня это было около bs=120kи выше. (без чтений)

Что следует отметить в моей системеразмер блокадля всех устройств хранения данных иразмер страницы4096 байт. Найдено с:

blockdev --getbsz /dev/sd?
getconf PAGESIZE

Такжеразмер секторасоставляет 512 байт. fdiskи, возможно, partedсможет сказать вам размер сектора.

Связанный контент