Почему указывают размер блока при копировании устройств конечного размера?

От руководства об/мин Fedora:

Предупреждение

Не пытайтесь записать интерактивные сценарии. Многие пользователи устанавливают RPMs автоматически. В таких случаях, или если пользователь выполняет графический инструмент RPM, информация, будет потерян Ваш вывод сценариев. Ввод данных пользователем не будет доступен.

13
09.08.2017, 02:51
5 ответов

bs = представляет размер блока для чтения или записи. Оставляя поле неповрежденно или не указывает, что может сделать ту же работу с копированием, но есть скрытый факт в его использовании. Например,

  • имели 1000000000000000 файлов с каждым из 1 ~ 10 кб.
  • , имеющий один файл на 10 ГБ

в первом случае, используя более низкий размер блока, чтобы увеличить скорость копирования. В то время как в последнем более высокий размер блока был лучшим вариантом, поскольку он увеличивает размер сектора, оставляя меньше числа сектора команды, которая обычно приводит к более быстрому операциям ввода-вывода.

1
27.01.2020, 19:52

Когда DD подходит для копирования данных? (или, когда читаются () и write () частичные) указывает на важное предупреждение при использовании . : DD может копировать частичные блоки, поэтому при данном Подсчет Он остановится после данного количества блоков, даже если некоторые блоки были неполными. Поэтому вы можете в конечном итоге в конечном итоге более чем BS * COUNT BYTES скопированы, если вы не указываете IFLAG = FullBlock .

Размер блока по умолчанию для DD составляет 512 байт. Количество - это предел; Поскольку ваши вопросы подсказки не требуются при копировании устройства конечного размера и действительно предназначен для копирования только части устройства.

Я думаю, что есть два аспекта, чтобы рассмотреть здесь: производительность и восстановление данных.

Насколько связано с производительностью, вы в идеале хотите, чтобы размер блока, по меньшей мере, равный, и множественный материал, базовый размер физического блока (следовательно, 2048 байтов при чтении компакт-диска). На самом деле в наши дни вы также можете указать большие размеры блока, чтобы дать базовые системы кэширования возможность буферных вещей для вас. Но увеличение размера блока означает DD DD должен использовать это гораздо больше памяти, и это может быть контрпродуктивным, если вы копируете через сеть из-за фрагментации пакета.

Что касается восстановления данных, вы можете получить дополнительные данные с неспособности жесткого диска, если вы используете более мелкие размеры блока; Это то, что такие программы, как DD-Rescue DD-Rescue . DD не сделает этого, он просто не пройдет весь блок.

12
27.01.2020, 19:52

Использование опции Blocksize на DD Эффективно определяет, сколько данных будет скопировано в память из подсистемы ввода ввода / вывода, прежде чем пытаться записать на вывод I / O Подсистема. Вывод одинаково (поскольку весь диск скопирован), кусочки просто читаются при указывании разных размеров (большинство DD Реализаций по умолчанию идут с блокировкой по умолчанию 512 байтов).

Если у вас есть большое количество запасной памяти и увеличение блокировки, то более большие кусочки данных могут быть прочитаны подряд, буферированы и покраснены до выходного пункта. Размер нижнего блока требует большего количества накладных расходов с точки зрения каждого человека LSEEK, MEMSET и т. Д.

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

2
27.01.2020, 19:52

Изменение размера блока - это хороший способ изменить, насколько буферизован или читается / написан за раз.

на самом деле не относится к ли это реальное блочное устройство или бесконечный / виртуальный. Это о том, сколько вы хотите хранить в памяти раньше DD идет, чтобы выписать его. BS = устанавливает как IBS = (сколько данных прочитано за один раз), так и us = (сколько данных записано одновременно). Чем выше потребность , тем выше итерациях , чем больше итераций IBS = , прежде чем у вас будет достаточно данных для dd , чтобы начать запись в пункт назначения.

счет = также не зависит от чего-либо, кроме чего вы хотите сделать. Он контролирует, сколько «блоков» (как измерено IBS = ), потребуется для DD , чтобы рассмотреть его работу как дела.

5
27.01.2020, 19:52

Вокруг дд существует культ груза. Первоначально в cp существовали две ошибки, которые вызывали проблемы: При копировании из разреженного файла на блочное устройство пустые блоки не очищались от адресата, если сообщалось, что размер блока не превышает 512 (Linux использовал блок размером 1024).

Некоторые ссылки на это можно найти в архивах списков рассылки ранних версий Linux.

Итак, люди привыкли к тому, что dd - это правильный способ работы с образами дисков, и cp оказалась на обочине. А так как dd использует размер блока по умолчанию 512, то он медленный (медленнее, чем cp на современных системах). Но не очевидно, какой размер блока вы должны использовать. Возможно, в вашем случае кто-то прочитал, что 2048 - это "естественный" размер блока для CD-ROM (то есть CD-ROM разделен на 2,352 байтных сектора, содержащие 2,048 байт данных вместе с информацией для исправления ошибок) и решил, что это "правильный" размер для dd, когда на самом деле вы, вероятно, получите более быстрые результаты, если будете использовать (умеренно) больший размер блока. На самом деле, GNU cp по этой причине использует размер блока по умолчанию 64k.

tl;dr: cp /dev/dvd foobar.iso должен работать нормально. Размер блока по умолчанию для dd - 512. Единственный эффект, который можно получить, оставив его в покое, вероятно, в большинстве современных обстоятельств - это замедлить процесс копирования.

6
27.01.2020, 19:52

Теги

Похожие вопросы