Мне нужно скопировать один диск на другой. Я попытался с помощью команды ниже, и это занимает почти день, чтобы скопировать 1 ТБ диска в federo.
dd if=/dev/sda of=/dev/sdb
Я попробовал то же самое в системе Unix (HP-UX) с помощью приведенной ниже команды, и она завершается в течение нескольких часов.
dd if=/dev/sda of=/dev/rdsk
Какую альтернативу я мог бы использовать для более быстрого копирования с диска на диск?
cp /dev/sda /dev/sdb
или (pv /dev/sda > /dev/sdb
чтобы получить индикатор выполнения) будет намного быстрее. Почему вы используетеdd
здесь?dd
было бы полезно только с вещами , какconv=sync,noerror
для рукояток дисков с ошибками, но даже тогда было бы больше смысла использовать такие вещи , какddrescue
вместо (смотри такжеpv
«s-E
вариант).cat
может быть даже быстрее, но разница не столь существенна (возможно, больше для устройства к устройству, чем для файла в файл, как в моем эксперименте).dd
ловушку № 1Ответы:
dd
имеет много (странных) опций, см. dd (1) .Вы должны явно указать размер буфера, поэтому попробуйте
IIRC, размер буфера по умолчанию составляет всего 512 байт. Команда выше устанавливает его до 16 мегабайт. Вы можете попробовать что-то меньшее (например
bs=1M
), но вы должны использовать больше, чем по умолчанию (особенно на недавнем оборудовании диска с секторами по 4 Кбайт, то есть Advanced Format ). Я наивно рекомендую некоторую степень двух, по крайней мере, мегабайт.С размером буфера по умолчанию в 512 байт, я предполагаю (но я мог бы ошибаться), что оборудование требует, чтобы ядро передавало 4K для каждого блока 512 байт.
Что касается
rdsk
, в с.о. (4) страницы человека говорят:Увеличение размера буфера dd увеличит производительность операций чтения и записи. Теперь все диски имеют аппаратный буфер чтения / записи. Но если вы увеличите размер буфера dd больше, чем аппаратный буфер, его производительность снизится, потому что dd будет читать с первого диска в буфер, когда второй диск будет записывать все из своего собственного аппаратного буфера. Вам необходимо установить
bs
опцию команды dd каждый раз, когда разные значения для разных устройств.источник
cat
это также хорошо (для передачи файловой системы в файловую систему прямой блок в блок может иметь различные характеристики производительности). Однако разница не была существенной в любом случае./dev/rdiskX
в качестве цели при выполненииdd
.status=progress
что будет печатать весь ход операции.Несколько лет назад в Unix-стране
dd
был обязательный способ копирования блочных устройств. Это стало носителем культового знания, хотя (по крайней мере, в системах на основе Linux)cat
почти всегда быстрее, чемdd
.Однако даже в прошлом приличный размер блока помог уменьшить количество (медленных) системных вызовов, учитывая, что каждый системный вызов запускал операцию ввода-вывода. Размер блока по умолчанию составляет 512 байт (один сектор диска). Сбор нескольких блоков диска в одно чтение был - и тоже - приемлемым. В этом примере используется размер блока 32 МБ:
В современных системах на основе Linux диски могут наиболее эффективно копироваться с помощью простого
cat
(Как отмечено в комментариях к вашему вопросу, он
pv
может быть замененcat
и даст вам представление о прогрессе и пропускной способности.)источник
Как правило,
dd
можно избежать в пользу некоторых альтернатив. Есть несколько веских причин использовать GNUddrescue
вместо этого. В Ubuntu вы можете установить его с помощью:и просто
ddrescue
использовать. Обратите внимание, что в отличие от имени пакета, исполняемый файл не имеет начального значенияg
.Использовать его так же просто, как:
Файл журнала (названный по вашему выбору) позволяет вам приостанавливать / останавливать и перезапускать без повторения предыдущей работы, что полезно при выполнении больших клонов или восстановлении дисков. По умолчанию отображается ход выполнения, текущая скорость копирования, средняя скорость копирования и количество найденных поврежденных блоков.
Он использует разумные значения по умолчанию для размера блока, поэтому скорость копирования всегда настолько высока, насколько устройство может справиться, по моему опыту, по крайней мере (я клонировал с ним многие сотни дисков, всех размеров и типов).
Часто у приводов, которые начинают выходить из строя, возникают проблемы со скоростью, такие как случайные участки с замедлением, низкой средней скоростью, внезапные длинные паузы (плохие сектора) или полный сброс (серьезные поверхностные ошибки).
ddrescue
может помочь вам определить все вышеперечисленное и перезапустить ваш клон (при условии, что вы указали файл журнала), даже если ваш диск сам перезагружается.источник
Очень хороший вопрос. Необработанный интерфейс реализован в некоторых системах Unix (tru64, hpux, solaris), но не в Linux. Необработанный интерфейс ускоряет передачу, поскольку ввод / вывод unix пропускается. Интерфейс блока (
/dev/dsk
или/dev/disk
) медленнее, потому что он использует систему ввода-вывода Unix. Для ускоренияdd
(gnu dd can) используйтеbs=30M
или вbs=20M
зависимости от вашего hw. Короткий ответ: НЕТ, это не реализовано, по крайней мере, насколько я знаю. Я использую Linux с давних времен версии ядра 2.2 и никогда не видел,rdsk
используется на Unix.источник