Есть ли аргументы против использования dd с bs=10G?

Есть ли аргументы против использования dd с bs=10G?

Предположим, у меня есть диск с плохим суперблоком (или блоком) в каком-то случайном месте. Это огромный диск, 1-8 ТБ. Он не форматируется в ext3, поэтому я записываю его полностью нулями, чтобы правильно отформатировать. lsblk -fпоказывает его FSTYPE как пустую строку.

Есть ли причина не выполнять команду ниже?

sudo dd if=/dev/zero bs=10G status=progress of=/dev/bad_disk

решение1

Я подозреваю, что вы не можете прерывать программу, пока она записывает блок, а запись 10 ГБ занимает значительное время. По моему опыту, улучшение производительности с размером блока довольно быстро выходит на плато, поэтому я бы придерживался более разумных размеров (4 МБ...).

решение2

Мой ответ полностью соответствует названию:

Есть ли аргументы против использования ddwith bs=10G?

Но в вашем случае это как-топроблема XY. Основная проблема (плохие блоки) должна решаться с помощью smartctlи badblocks, а не dd.


Использование памяти

Это еще один ответупоминается «улучшение производительности с размером блока»:

Повышение производительности при увеличении размера блока довольно быстро достигает плато

Верно, но это всего лишь " bsпочти нулевая" часть истории. В контексте вопроса мы должны сказать bsчасть "уходит в бесконечность".

В реальном мире плато фактически рушится для некоторых больших bs. С помощью bs=10Gинструмента будет пытаться выделить 10 GiB памяти. Это может быть успешным или нет (память исчерпана). Даже если это удастся, все еще есть проблемы:

  • Другие процессы могут выгружать выделенную им память на диск.
  • Буфер ddможет быть выгружен на диск. Инструмент использует его постоянно, поэтому ОС, вероятно, сначала выгрузит другие (не недавно использованные) данные. Тем не менее, если у вас 8 GiB RAM и 16 GiB swap, нет возможности втиснуться в bs=10GRAM.
  • Если память понадобится позже,Убийца OOM может сработать. Ваш ddпроцесс может оказаться первым, который нужно завершить.

Конечно, все это зависит от того, сколько у вас оперативной памяти и пространства подкачки, а также от того, что делают другие процессы.


Подсказки

Лично я предпочитаю использовать bsразмер, который передается за 0,1-1 секунду; или меньше, bsесли использование оперативной памяти может быть проблемой. Таким образом, я могу прерывать ddпочти мгновенно (это сутьуже упомянутый ответ). Если бы аппаратные ограничения позволяли ddпревышать 10 ГиБ/с и у меня было бы более 40 ГиБ свободной оперативной памяти, я бы рассмотрел bs=10G. Дома я почти никогда не превышаю bs=64M.

Один из вариантов использования, который bs=10Gможет быть полезен, — это когда вы хотите обработатьточностолько же данных вы используете count=1(или, например, в 5 раз больше: count=5).Однакона практике с большим bsвы можете получитьменьше, если вы не используете iflag=fullblock(см.этот ответ). Из-за использования памяти я бы в любом случае пересчитал на меньшее значение bs.

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