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

Когда вы используете apt-get, вы устанавливаете версию в репозитории ubuntu. Когда вы загружаете установщик и используете его, вы обычно устанавливаете версию, определенную установщиком (может быть такой же, как репо или нет).

1
задан 12 September 2014 в 22:46

8 ответов

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

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

12
ответ дан 24 May 2018 в 03:46
  • 1
    Unit nitpicking: USB2.0 High Speed ​​- 480 Мбит / с = 60 Мбайт / с, необработанная скорость. Используемая скорость не является десятичной точкой, а скорее около 80% необработанной скорости. Фактическая скорость «большого пальца» в MByte / s составляет 1/10 от необработанной скорости в Мбит / с ». действительно. – jpa 12 September 2014 в 11:40

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

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

11
ответ дан 24 May 2018 в 03:46
  • 1
    Однако я пытаюсь скопировать весь диск. – Kaz Wolfe 12 September 2014 в 22:39
  • 2
    Я ожидаю, что разница будет того же порядка, но запустите контрольную таблицу в вашей системе, чтобы получить более надежные данные. – Gilles 13 September 2014 в 00:54
  • 3
    Можно ли использовать cat для dd if=ubuntu.iso of=/dev/usb? Скорость dd для этого, как для USB2, так и для USB3, очень медленная. – Oxwivi 16 September 2014 в 10:53
  • 4
    @Oxwivi Да, cat ubuntu.iso >/dev/usb в точности эквивалентен. В dd нет магии, это всего лишь инструмент для копирования своего ввода на его вывод. – Gilles 16 September 2014 в 11:04
  • 5
    О ~, спасибо! – Oxwivi 16 September 2014 в 11:19

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

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

5
ответ дан 24 May 2018 в 03:46

Я перемещаю Windows 7 с жесткого диска на SSD и нашел это и некоторые другие ответы ... Что-то я узнал, что может помочь другим. В моем случае исходный диск больше, иначе я бы работал на уровне устройства / 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 puked на ntfs, нуждающемся в выполнении chkdisk в Windows, поэтому быстрое исправление получило счастливое участие:

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

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

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

, если ранее был перенесен диск, к которому вы переводили, он могут иметь остатки GPT. Установками Windows 7 обычно являются таблицы разделов msdos / mbr. Вам нужно будет удалить фрагменты GPT с целевого диска. Этот Unix & amp; Linux QA помог мне в этом. Вы должны использовать gdisk на устройстве, используйте x, затем z и да, чтобы заблокировать данные GPT и убедитесь, что вы ХРАНИЛИ MBR. И не забывайте, что если вы не используете уровень устройства dd, вам нужно будет скопировать MBR с помощью dd if=/dev/sdb of=/dev/sda bs=446 count=1, где sdb является исходным или старым диском, а sda - адресатом или новым диском (источник)
2
ответ дан 24 May 2018 в 03:46

Недавно я создал образ раздела размером 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

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

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

1
ответ дан 24 May 2018 в 03:46
  • 1
    Почему было бы медленнее писать один большой файл вместо нескольких меньших файлов? Каков был тип целевой файловой системы и флаги монтирования? – David Foerster 1 December 2014 в 20:04
  • 2
    Также conv=sync вредно для производительности и бесполезен в этом случае использования. – David Foerster 1 December 2014 в 20:07

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

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

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

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

0
ответ дан 24 May 2018 в 03:46

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

0
ответ дан 24 May 2018 в 03:46

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

0
ответ дан 24 May 2018 в 03:46

Другие вопросы по тегам:

Похожие вопросы: