Использование размера блока в dd и ddrescue

Я видел примеры использования dd а также ddrescue команда, и я вижу, что вместо того, чтобы спрашивать пользователя о размере блока на его устройстве, они рекомендуют использовать bs=1M и я не понимаю почему.

Что произойдет, если размер сектора диска 512 байты и 1MB назначен на bs?

Можно ли использовать любое значение независимо от размера сектора диска?

Что вы рекомендуете использовать для дисков расширенного формата и объемом 1 ТБ?

1 ответ

Решение

Что такое опция bs и почему она используется?

Как было объяснено в dd, создается случайный файл 32 МБ вместо 1 ГБ (который я рекомендую прочитать, кстати), что bs Опция относится к тому, сколько раз read() syscall считывает и хранит в памяти (если размер памяти и устройства, с которого вы читаете, допускают такой размер). На это также ссылаются в руководстве:

bs = BYTES чтение и запись до байтов байтов за раз (по умолчанию: 512);

Таким образом, это не имеет ничего общего с количеством блоков / секторов на диске, но с ddпроизводительность - хранение большего количества вещей в памяти для более быстрой обработки. Чтобы процитировать один ответ ServerFault:

Я знаю, что когда я копирую жесткие диски, я получаю более высокую скорость, указав bs=1M, чем при использовании bs=4k или по умолчанию. Я говорю об улучшении скорости от 30 до 300 процентов. Нет необходимости настраивать его на лучшее, если это не все, что вы делаете каждый день. но выбор чего-то лучшего, чем значение по умолчанию, может сократить время выполнения.

Выбор из bs значение также обсуждалось в другом сообщении stackoverflow:

Оптимальный размер блока зависит от различных факторов, включая операционную систему (и ее версию), а также различные аппаратные шины и диски. Несколько Unix-подобных систем (включая Linux и, по крайней мере, некоторые разновидности BSD) определяют элемент st_blksize в struct stat, который дает то, что ядро ​​считает оптимальным размером блока

Что касается 1М, это потенциально потому, что люди считают это оптимальным значением. Помните, что размер оперативной памяти был 512M. Таким образом, использование 1M было бы достаточно маленьким, чтобы поддерживать низкое потребление оперативной памяти, но dd скорость.


По поводу вашего вопроса:

Что произойдет, если размер сектора диска составляет 512 байт и 1 МБ назначено для bs?

Ничего такого. dd будет читать данные кусками по 1 МБ. Это никак не меняет данные. Это может улучшить dd скорость по сравнению с меньшим размером блока, но не влияет на сами данные.

Другая история могла бы случиться, если бы вы читали порциями меньше размера сектора диска: диски должны обслуживать полный размер сектора, а ядро ​​кэширует эту информацию. См . Ответ Мэтью Ифе в том же сообщении о Serverfault. Но опять же, не влияет на сами данные.

Что вы рекомендуете использовать для дисков расширенного формата и объемом 1 ТБ?

Расширенный формат, например, что? Так далеко как dd Само по себе, он не должен заботиться о каком-либо формате диска - все, что он знает, - это чтение, запись и блокирование устройств; не имеет значения, пишете ли вы на USB-накопитель или диск SCSI - синтаксис тот же, это ядро, которое обрабатывает мелкие детали и имеет драйверы для этих устройств для правильной передачи данных.

И снова, емкость также не имеет значения. Дисковод SATA емкостью 1 ТБ все еще является диском SATA.

Другие вопросы по тегам