Чтобы понять размеры блоков, вы должны быть знакомы с ленточными накопителями. Если вас не интересуют ленточные накопители - например, вы не думаете, что когда-либо будете их использовать - тогда вы можете вернуться в режим сна.
Помните ленточные накопители из фильмов 60-х, 70-х, возможно, даже 80-х? Те, где катушка вращалась и так далее? Не ваш Exabyte или даже QIC - четверть-дюймовый картридж - ленты; ваши добрые старомодные полудюймовые ленточные накопители? На тех, размер блока имеет значение.
Данные на ленте были записаны в блоках. Каждый блок был отделен от следующего промежутком между записями.
----+-------+-----+-------+-----+----
... | block | IRG | block | IRG | ...
----+-------+-----+-------+-----+----
В зависимости от аппаратного и программного обеспечения ленточного накопителя, могут возникнуть различные проблемы. Например, если лента была записана с размером блока 5120 байт и вы прочитали ленту с размером блока 512 байт, то накопитель на магнитной ленте может прочитать первый блок, вернуть вам 512 байт, а затем отбросить оставшиеся данные; следующее чтение начнется со следующего блока. И наоборот, если лента была записана с размером блока 512 байт и вы запросили блоки размером 5120 байт, вы получите короткие чтения; каждое чтение вернуло бы всего 512 байт, и если бы ваше программное обеспечение не обращало внимания, вы бы читали мусор. Также была проблема, что ленточный накопитель должен был набрать скорость, чтобы прочитать блок, а затем замедлиться. Искусство ASCII предполагает, что IRG был меньше, чем блоки данных; это не обязательно так. И потребовалось время, чтобы прочитать один блок, перескочить IRG, перемотать назад, чтобы перейти к следующему блоку, и начать снова вперед. А если на ленточном накопителе не было памяти для буферизации данных, а на более дешевых - нет, то это может серьезно повлиять на производительность ленточного накопителя.
История войны: работа подготовлена на более новой машине с немного более современным стримером. Я написал ленту, используя tar без разумного размера блока (поэтому по умолчанию он составлял 512 байт). Это была большая часть программного обеспечения - должно быть, всего около 100 МБ (давным-давно, другими словами). Лента хорошо написана, потому что машина была достаточно современной, и это заняло всего несколько секунд. Но мне пришлось извлечь материал с ленты на машине со старым ленточным накопителем, на котором не было встроенного буфера. Таким образом, он читал материал по 512 байт за раз, и барабан качался вперед, читая один блок, а затем качался назад почти на полдюйма, а затем читал вперед, чтобы перейти к следующему блоку, а затем качался назад, и ... хорошо, вы могли видеть, как это происходит, и, поскольку на чтение каждого 512-байтового блока уходили заметные доли секунды, общее время, затрачиваемое было ужасным. Мой рейс должен был улететь ... и мне тоже нужно было передать эти данные. (Это было достаточно давно, и в стране, находящейся достаточно далеко, последние изменения в полетах тоже не были чем-то особенным.) Короче говоря, это действительно читало - но если бы я использовал разумный размер блока (например, 5120 байт вместо 512 по умолчанию), я бы сделал это гораздо быстрее и с гораздо меньшей опасностью пропустить самолет (но на самом деле я успел на самолет, и у меня было бы 20 минут, чтобы сэкономить, несмотря на поездку на такси по Парижу в час пик).
При использовании более современных ленточных накопителей на диске было достаточно памяти для буферизации, и было возможно осуществить потоковую передачу ленточного накопителя - непрерывную запись без реверсирования. Раньше я использовал размер блока, например, 256 КБ, чтобы транслировать ленты QIC. Я не так много сделал с ленточными накопителями в последнее время - давайте посмотрим, не в этом тысячелетии и не так много за несколько лет до этого; конечно, не так много, поскольку CD и DVD стали выбранными механизмами распространения программного обеспечения (когда электронная загрузка не использовалась).
Но размер блока действительно имел значение в старые времена. И dd
оказал ему хорошую поддержку. Вы даже можете перенести данные с ленточного накопителя, который был записан, скажем, с блоком 4 КБ, в другой, который вы хотите записать, скажем, с помощью блока 16 КБ, указав ibs
(размер входного блока) отдельно от obs
(размер выходного блока). Чертовски полезно!
Кроме того, параметр count
соответствует размеру (входного) блока. Было полезно сказать 'dd bs=1024 count=1024 if=/dev/zero of=/my/file/of/zeroes
', чтобы скопировать 1 МБ нулей вокруг. Или скопировать 1 МБ файла.
Значение dd
значительно уменьшено; это была неотъемлемая часть арсенала для любого, кто работал с ленточными накопителями десять или более лет назад.