Запись на флешку приводит к массовому чтению

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

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

отредактированный atop линия:

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

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

Поэтому мой вопрос: почему при записи непосредственно на блочное устройство читается с флешки и можно ли это предотвратить, чтобы улучшить производительность записи?

2 ответа

Решение

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

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

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

Для более продолжительного обсуждения, проверьте этот пост.

Для меня, 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 могу сказать вам размер сектора.

Другие вопросы по тегам