Запись на флешку приводит к массовому чтению
В настоящее время я восстанавливаю флешку с 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 способа обойти это и получить полную скорость:
- Задавать
dd
размер блока до 4096 или кратный. (не читает) - Задавать
dd
Размер блока достаточно большой. Для меня это было около 1 миллиона и выше. Я получил полную скорость около 1 миллиона. (очень мало читает) - Не используйте кеш страниц, давая
dd
параметрoflags=direct
, Задаватьdd
размер блока до достаточно большого кратного 512. Для меня это было околоbs=120k
и выше. (не читает)
Что-то стоит отметить, на моем системном блоке размер для всех устройств хранения и размер страницы составляют 4096 байт. Найдено с:
blockdev --getbsz /dev/sd?
getconf PAGESIZE
Также размер сектора составляет 512 байт.fdisk
и возможно parted
могу сказать вам размер сектора.