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

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

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

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

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

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

2 ответа2

1

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

0

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .