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

64

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

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

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

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

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

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

  • Раздел Fat32 EFI (*)
  • NTFS раздел Windows (*)
  • Раздел HFS + OSX
  • EXT4 Ubuntu Partition (*)
  • Сменный раздел (*)

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


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

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

Каз Вулф
источник
1
Вам, вероятно, лучше использовать что-то вроде клонезиллы. ddкопирует все , включая свободное место. Недостатки становятся особенно очевидными, когда у вас большие диски, которые не полностью заполнены.
Борис Паук
Возможно ли купить кабель SATA и временно подключить внешний диск к порту SATA на материнской плате?
Марк Плотник
Возможно, кто-то мог бы уточнить следующее: Как насчет клонирования таблицы разделов (с использованием clonezilla или dd), использования Clonezilla для клонирования всех разделов, кроме HFS +, и использования dd для этого одного раздела? Будет ли это возможно?
Александр
@ Александр Вот как я сделал свой первый клон.
Каз Вулф
1
@ LuisAlvarado Я только начал клон, чувак!
Каз Вулф

Ответы:

71

По моему опыту, я не думаю, что в командной строке есть что-то более быстрое, чем 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. Это были мои результаты, но сначала мы должны знать, что теоретические скорости для многих скоростей передачи (сырые скорости) - это всего лишь теория . Проведение реальных испытаний показало, что они составляют от 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 
Луис Альварадо
источник
3
отправить сигнал USR1, чтобы получить прогресс дд. Недостатком dd является то, что он копирует свободное место.
JFS
1
По моему опыту, настройка bsпараметра может сделать ddтак быстро, как cat. Вы могли бы также использовать catв первую очередь.
Жиль "ТАК - перестать быть злым"
3
pvсамо по себе работает очень, очень хорошо.
Каз Вулф
11
Вы можете использовать dd для выполнения работы, но вставьте pv в цепочку, чтобы отслеживать скорость передачи, например:dd if=/dev/sda1 | pv | dd of=/dev/sdb1
thomasrutter
4
Я всегда использовал pvмежду ddс. Никогда не знал, что его можно использовать отдельно!
korylprince
12

Чтобы скопировать раздел оптом, используйте 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 об / мин могут быть не такими быстрыми (возможно, они предназначены для линейной записи?).

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

Жиль "ТАК - перестань быть злым"
источник
Я пытаюсь скопировать весь диск, хотя.
Каз Вулф
Я ожидаю, что разница будет того же порядка, но проведу тестирование в вашей системе, чтобы получить более надежные данные.
Жиль "ТАК - перестать быть злым"
Может catбыть использован для dd if=ubuntu.iso of=/dev/usb? ddСкорость выполнения этого действия с USB2 или USB3 удручающе мала.
Oxwivi
1
@Oxwivi Да, cat ubuntu.iso >/dev/usbэто точно эквивалентно. В этом нет никакой магии dd, это всего лишь инструмент для копирования входных данных в выходные данные.
Жиль "ТАК - перестань быть злым"
Приведенная выше команда cat не работает на Mac. Я пытался sudo cat linuxmint-17.3-cinnamon-64bit.iso >/dev/disk1отдать обратно "-bash: / dev / disk1: В доступе отказано"
нет,
12

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

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

собрат
источник
6
Придирчивость устройства: USB 2.0 High Speed ​​- 480 Мбит / с = 60 МБ / с, необработанная скорость. Используемая скорость - это не десятичное число, а около 80% от исходной скорости. Эмпирическое правило "фактическая скорость в МБайт / с составляет 1/10 от необработанной скорости в Мбит / с", хотя это действительно.
jpa
5

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

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

dan_linder
источник
2

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

Win7 и его 3 раздела ... Я использовал Xbuntu 14.04 Live CD на USB. Выскочил DVD победного компьютера и поставил SSD на место. Установил partclone и попробовал это:

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

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

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

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

Дополнительный потенциал Гочяса:

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

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

Крис К
источник
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 (раздел должен иметь тот же размер, что и старый)

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

matowc1991
источник
1
Почему было бы медленнее написать один большой файл вместо нескольких меньших файлов? Каков был тип файловой системы и флаги монтирования?
Дэвид Фёрстер
Также conv=syncвреден для производительности и довольно бесполезен в этом случае использования.
Дэвид Фёрстер
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

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

Дополнительная информация:
https://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html.

goetzc
источник
0

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

NateNjugush
источник
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
источник