Если я использую предельный размер байта 1 ГБ против 1 МБ, например, на аппаратном уровне, в чем разница? Что делает размер в байтах, если постоянный поток данных только записывается на диск>?
1 ответ
Разница в том, сколько данных читается / записывается одновременно.
Программы редко работают с настоящими постоянными потоками - они обычно читают и записывают данные по частям: считывают 1 КБ с входа, записывают 1 КБ на выход, читают 1 КБ с ввода, пишут ... Таким образом, параметр bs=
(размер блока ) для dd указывает, сколько данных нужно читать одновременно. Часто более эффективно попросить ОС прочитать один фрагмент размером 2 МБ с диска, чем прочитать шестнадцать фрагментов по 128 КБ. (Отчасти потому, что ОС должна выполнять меньше работы.) С другой стороны, если вы попытаетесь использовать bs=16G
, он попытается прочитать блок размером 16 гигабайт в ОЗУ, а затем сразу записать его; Вы, вероятно, исчерпаете ОЗУ.
Это также зависит от носителя. Диски не являются потоками и не имеют байтовой адресации, будь то магнитная или флэш-память - они позволяют только читать фрагменты размером с блок (где размер блока зависит от аппаратного обеспечения; многие диски имеют его как 512 байт или 4 кБ). Если ОС пытается прочитать 100 байтов, диск все равно должен прочитать весь блок, а затем отбросить данные. (Еще хуже при записи: не уверен, что с магнитными дисками, но, по крайней мере, с флеш-памятью, если вы записываете 100 байт, диск должен прочитать весь блок, обновить его в памяти, а затем записать). Таким образом, размер блока, используемого dd
имеет значение - он будет намного быстрее, если размер блока, используемого dd
будет точно кратным размеру блока диска. (Предполагая, что нет никаких проблем с выравниванием разделов, то есть.)