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

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

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

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

  • Высокая скорость USB2.0 (в настоящее время планируется)
  • Гигабитный сетевой клон (на самом деле не хочу даже пробовать это)
  • USB3.0 (если я найду свой другой диск caddy)
  • eSATA (если я найду/куплю кабель)
  • SATA (если я найду / куплю кабель, мне понравятся компакт-диски для ноутбуков)

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

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

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

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


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

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

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

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

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

pv < /dev/sda > /dev/sdb

С помощью PV я получил 156 Мбит /с

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

enter image description here

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Дополнительные потенциальные ошибки:

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

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

Недавно я создавал образ раздела объемом 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 PROCESSIDkill -USR1 PROCESSID #to check the speed

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

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

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

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

Для тех, кто найдет эту тему, гораздо проще и быстрее просто использовать инструмент, предназначенный для восстановления данных, например 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

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

Используйте другой размер блока. Это объем данных, который 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 достаточно большой.

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

Мне удалось получить 430 Мбит / с, когда я создавал образ с твердотельного накопителя SATA на твердотельный накопитель NVME

Вероятно, вам лучше использовать что-то вроде clonezilla. dd копирует everything, включая свободное пространство. Недостатки становятся чрезвычайно очевидными, когда у вас есть большие диски, которые не заполнены полностью.

@LuisAlvarado Я только что запустил клонирование, чувак!

Возможна ли покупка кабеля SATA и временное подключение внешнего накопителя к порту SATA на материнской плате?

Возможно, кто-нибудь мог бы подробнее остановиться на следующем: как насчет клонирования таблицы разделов (с использованием clonezilla или dd), использования Clonezilla для клонирования всех разделов, кроме HFS +, и использования dd для этого одного раздела? Будет ли это осуществимо?

@Alexander Вот так я сделал своего первого клона.

@MarkPlotnick Это ноутбук.

Вы можете попробовать cp --sparse=always, чтобы скопировать необработанный раздел HFS+, предполагая, что в разделе, на который вы его копируете, уже нет абсолютно ничего.

Заканчиваю несколько тестов, которые, я уверен, вы найдете очень информативными. Дайте мне время опубликовать это в качестве ответа.

Параметр bs не зависит от физического размера блока диска, но управляет объемом данных, считываемых/записываемых одновременно. Попробуйте использовать гораздо больший размер часов.