1

У нас есть шестьдесят терабайтное блочное устройство, которое мы хотим обнулить с помощью dd. Можно ли распараллелить эту операцию, чтобы уменьшить количество времени, которое требуется?

Я попытался выполнить следующую команду, но это не совсем то, что я ищу:

seq 1 5 | parallel dd if=/dev/zero of=/dev/mapper/mydevice{} bs=10M count=10

2 ответа2

1
seq 0 600000 | parallel dd if=/dev/zero of=/dev/mapper/my60device bs=10M count=10 seek={}0

Вы уже используете if, of, bs, and count поэтому я предполагаю, что вы знаете, что они делают.

seek ищет n блоков в выходном файле перед выполнением команды dd .

Вы не пишете, как устройство на 60 ТБ физически расположено на шпинделях. Это может оказать огромное влияние. Так что это может быть быстрее:

seq 0 60000 | parallel --shuf dd if=/dev/zero of=/dev/mapper/my60device bs=10M count=100 seek={}00

Он записывает блоки объемом 1 ГБ и тасует выполнение, что может ускоряться или замедляться в зависимости от физической разметки.

0

Если драйвер основного устройства не поддерживает планирование два операций ввода / вывода сразу через некоторые Bizzare ioctl вещи, вы не можете выдавать явно параллельные операции ввода / вывода на устройство.

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

Спиннинг два dd «ы на одном блочном устройстве не изменит того факта , что большинство устройств ввода / вывода, особенно вещи , которые выглядят как жесткие диски, может действительно только сделать одну вещь или небольшую очередь вещей сразу - и любой оптимизации ( т.е. используя NCQ) выполняется на уровне драйвера устройства.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .