Как бы ускорить полный диск dd?

51

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

 dd if=/dev/sda of=/dev/sdb bs=4096

Оба жестких диска - это тот же самый номер модели, и оба имеют 1 ТБ пространства для хранения. /dev/sda использует размер блока 4096. /dev/sda - локальный диск, а /dev/sdb - удаленный caddy. Я мог бы использовать следующие протоколы:

  • USB2.0 HighSpeed ​​(в настоящее время план)
  • Gigabit Over-The-Network клон (на самом деле не хочу даже попробовать)
  • USB3.0 (если я нахожу свой другой диск caddy)
  • eSATA (если я нахожу / покупаю кабель)
  • SATA (Если я нахожу / покупаю кабель, должен любить дисководы для компакт-дисков с ноутбуком)

Есть ли способ запустить эту копию диска, которая занимает меньше 96 часов? Я открыт для использования других инструментов, кроме dd .

Мне нужно клонировать следующие разделы (включая UUID)

  • Fat32 EFI Partition (*)
  • Раздел Windows NTFS (*)
  • Раздел HFS + OSX
  • EXT4 Ubuntu Partition (*)
  • Раздел подкачки (*)

* Поддерживается Clonezilla

Я пробовал Clonezilla (и это было намного быстрее), но он не поддерживает интеллектуальное копирование HFS +, которое мне нужно. Может быть, самая новая версия поддерживает это?

Когда я сделал свой первый клон, я сделал все разделы, кроме HFS +, и он прошел очень быстро. (Не более 3 часов)

    
задан Kaz Wolfe 12.09.2014 в 04:39
источник

9 ответов

52

По моему опыту, я не думаю, что в командной строке есть что-то более быстрое, чем dd . Регулировка параметра bs может увеличить скорость, например, у меня есть 2 жестких диска, которые, как я знаю, имеют скорость чтения / записи более 100 МБ / с, поэтому я делаю это:

dd if=/dev/sda of=/dev/sdb bs=100M

Существует также pv (необходимо установить сначала), который проверяет самую быструю скорость на обоих дисках, а затем продолжает клонирование. Конечно, это должно быть сделано из root:

pv < /dev/sda > /dev/sdb

С PV я получил 156 МБ / с

Хорошая вещь о pv , кроме скорости, заключается в том, что она показывает прогресс, текущую скорость, время с начала и ETA. Что касается HFS +, я бы не знал, просто пытаюсь помочь в части «скорости». С pv или очень оптимизированным параметром bs вы можете сделать привод 4 ТБ менее чем за 7 часов (6 часов 50 минут при текущей скорости 150 МБ / с).

Я провел пару тестов с типами соединений, которые вы использовали, и другими, которые у меня были доступны. Я использовал Asus Z87 Pro и Intel DZ68DP. Это были мои результаты, но сначала нам нужно знать, что теоретические скорости для многих скоростей передачи (скорости Raw) - это только теория . Выполнение реальных тестов показало, что они составляют от 40% до 80% от этой скорости. Эти тесты могут изменяться в зависимости от используемого устройства, типа подключения, материнской платы, типа соединительного кабеля, типа файловой системы и т. Д. Имея это в виду, это то, что я получил (я только проверял скорость записи на устройство, обычно читается выше):

Connected Device  -  Connection Type  -  Speed (Write Speed)
  USB 2.0                 USB 2.0              25 MB/s
  USB 3.0                 USB 2.0              35 MB/s
  USB 3.0                 USB 3.0              73 MB/s
  eSata                   eSata                80 MB/s
  Sata 2G HDD             Sata 2G              120 MB/s
  Sata 3G HDD             Sata 2G              140 MB/s
  Sata 3G HDD             Sata 3G              190 MB/s
  Sata 2G SDD             Sata 2G              170 MB/s
  Sata 3G SDD             Sata 2G              210 MB/s
  Sata 3G SDD             Sata 3G              550 MB/s 
    
ответ дан Luis Alvarado 12.09.2014 в 05:27
источник
12

Проблема заключается в типе вашего соединения и размере блока. Для самых быстрых результатов размер вашего блока должен быть на половину самой низкой скорости записи, которую вы обычно получаете. Это даст вам безопасный запас, но при этом позволит использовать большое количество; конечно, у вас должно быть достаточно бара, чтобы хранить данные тоже.

Usb 2.0 - 12 мегабит в секунду (Мбит / с), скорость USB 2.0 - 480 Мбит / с. Это, конечно, сырая скорость; с 8 битами в байтах и ​​служебными данными кадрирования, используемая скорость в МБ / с обычно является десятичной точкой. Так, например, 480 raw, становится 48MBs годным к употреблению. Имейте в виду, что это лучший математический, в реальном мире он будет немного ниже. Для высокоскоростных соединений usb 2.0 вы должны ожидать максимальную скорость записи около 30-35 МБ, при условии, что фактическое устройство хранения может сравнивать или превосходить скорости соединения.

    
ответ дан Fellow 12.09.2014 в 08:17
11

Чтобы скопировать раздел оптом, используйте cat вместо dd . Я запустил ранее, копируя большой файл, а не раздел, между двумя дисками (на одном диске, относительные тайминги разные):

dd bs=64M    51.3
dd bs=1M     41.8
dd bs=4k     48.5
dd bs=512    48.9
cat          41.7
cp           45.3

Вывод из этого теста состоит в том, что выбор размера блока для dd имеет значение (но не так много), а cat автоматически находит лучший способ сделать быструю копию: dd может только замедлить вас , С небольшим размером блока dd теряют время, теряя крошечные чтения и записи. При большом размере блока один диск остается бездействующим, а другой - чтением или записью. Оптимальная скорость достигается, когда один диск читает, пока записывает другой диск.

Чтобы скопировать раздел, быстрее скопировать файлы с помощью cp -a . Это зависит от количества файлов и объема файловой системы. Копирование файлов имеет накладные расходы, которые примерно пропорциональны количеству файлов, но, с другой стороны, копирование свободного пространства тратит время.

Максимальная скорость передачи данных для USB2 составляет чуть менее 50 МБ / с, которая работает до 6-7 часов для передачи 1 ТБ. Это предполагает, что жесткий диск достаточно быстр, чтобы насытить USB-шину; Я думаю, что более быстрые диски с частотой 7200 об / мин могут это сделать, но 5900 об / мин могут быть не такими быстрыми (возможно, они предназначены для линейных записей?).

Если какой-либо диск используется параллельно, это может значительно замедлить копирование, поскольку головки дисков должны будут перемещаться.

    
ответ дан Gilles 12.09.2014 в 14:46
5

Я согласен с тем, что необработанная скорость хорошо настроенной команды dd ('pv') или 'cat' очень сложна, но если есть какие-либо проблемы с копией (плохой сектор, сбой питания, ошибка пользователя и т. д.) ), тогда вы должны начать все сначала.

Я хотел бы предложить ddrescue - инструмент FOSS, который имеет всю скорость dd, но он будет работать вокруг ошибок диска и возобновить в более поздней точке, если есть сбой.

    
ответ дан dan_linder 17.09.2014 в 05:21
2

Я перемещаю Windows 7 с жесткого диска на SSD и нашел это и некоторые другие ответы ... Что-то я узнал, что может помочь другим. В моем случае исходный диск больше, иначе я бы работал на / dev / sda - gt; / dev / sdb.

Win7 и его 3 раздела ... Я использовал Xbuntu 14.04 live cd на usb. Вытащил DVD-диск победителя и поставил SSD на свое место. Установленный partclone и попробовал это:

partclone.ntfs -b -N -s /dev/sda3 -o /dev/sdb3

Partclone puked на ntfs, нуждающемся в выполнении chkdisk в Windows, поэтому быстрое исправление получило счастливое участие:

ntfsfix -b /dev/sda3
ntfsfix -d /dev/sda3

Все команды выполняются как root. Интерфейс пользователя ncurses от Partclone (опция -N) сказал, что передача была 7 ГБ / мин и закончилась со скоростью 5 ГБ / мин, что соответствует 83 МБ / с. Большая часть partclone не копирует неиспользуемое пространство, поэтому это делает клон замечательно быстрым.

Дополнительный потенциал getchyas:

  • Если ранее был перенесен перенос диска, он может иметь остатки GPT. Установками Windows 7 обычно являются таблицы разделов msdos / mbr. Вам нужно будет удалить фрагменты GPT с целевого диска. Этот Unix & amp; QA Linux помог мне в этом. Вы должны использовать gdisk на устройстве, используйте x, затем z и да, чтобы заархивировать данные GPT и убедитесь, что вы ХРАНИЛИ MBR.

  • И не забывайте, что если вы не используете уровень устройства dd, вам нужно скопировать MBR, используя dd if=/dev/sdb of=/dev/sda bs=446 count=1
    , где sdb является исходным или старым диском и sda - это пункт назначения или новый диск ( источник )

ответ дан Chris K 21.12.2014 в 10:37
1

Недавно я создал образ раздела размером 100 ГБ (HDD) и записал его на новый SSD-диск.

Вот подсказка, которая может значительно ускорить процесс:)

Разделить файл на более мелкие части (чем больше файл, тем медленнее он работает)

sudo dd if=/dev/sda3 conv=sync,noerror bs=2M | split -a 3 -d -b 1G - /maindisk.img

Во время процесса вы можете проверить скорость, используя (в отдельном терминале)

pgrep -l '^dd$' #to find PROCESSID
kill -USR1 PROCESSID #to check the speed

Затем, когда у вас есть каталог, полный файлов результатов (maindisk.img000, maindisk.img001 и т. д.) использовать

sudo cat maindisk.img* | sudo dd of=/dev/sda1

, чтобы «записать» изображение в новую партицию SSD (парирование должно быть того же размера, что и старый)

Для меня это работало loooot быстрее обычного (без расщепления). Средняя скорость создания изображения составляла ~ 13 МБ / с. Когда я использую «обычный» способ, он начинается с ~ 15 МБ / с, а затем уменьшается до 1 МБ / с.

    
ответ дан matowc1991 01.12.2014 в 16:33
0

Для тех, кто находит этот поток, гораздо проще и быстрее просто использовать инструмент, предназначенный для восстановления данных, например ddrescue . Сначала он пытается спасти хорошие части в случае ошибок чтения. Также вы можете прервать спасение в любое время и возобновить его позже в той же точке.

Запустите его дважды:

Первый раунд, скопируйте каждый блок без ошибки чтения и запишите ошибки в rescue.log.

sudo ddrescue -f -n /dev/sdX /dev/sdY rescue.log

Второй раунд, скопируйте только плохие блоки и попробуйте 3 раза прочитать из источника, прежде чем сдаваться.

sudo ddrescue -d -f -r3 /dev/sdX /dev/sdY rescue.log

Теперь вы можете установить новый диск и проверить файловую систему на предмет коррупции.

Дополнительная информация: Ссылка

    
ответ дан goetzc 20.02.2016 в 21:05
0

Id рекомендует вход / чтение-файл / диск находиться на SATA для повышения скорости чтения. Высокая скорость USB 2.0 тоже хороша, так как я получаю средние скорости 33816 кб / с с ddrescue по сравнению с тем, когда этот параметр был USB 2.0 для SATA в 2014 кб / с

    
ответ дан NateNjugush 24.10.2016 в 13:07
0

Используйте другой размер блока. Это количество данных, которое dd читает за раз. Если чтение слишком мало, большая часть времени тратится на логику программы и, если слишком много читается, затрачивается много времени на перемещение больших данных.

Чтобы измерить скорость при разных размерах блоков, используйте следующий скрипт bash :

  • установите $dev на устройство
  • исправить cbtotal , чтобы быть как минимум 5 раз ожидаемой скоростью чтения.
    (set -o errexit; skip=0; cbtotal=$((120*1024**2)); bs=256;
    for power in 'seq 10'; do
      bs=$((bs*2)); skip=$((skip/2)); count=$((cbtotal/bs));
      if [ "$count" -lt 1 ]; then break; fi;
      echo $bs;
      dd if=$dev of=/dev/null skip=$skip bs=$bs count=$count
      skip=$((skip+count))
    done)

Результат может быть смещен в сторону большего размера из-за чтения диска вперед - поэтому важно установить cbtotal достаточно большим.

    
ответ дан ivan_pozdeev 30.06.2017 в 00:13