Почему Clonezilla быстрее, чем дд?

На моем изображении SSD (Source и Destination - 2 SSD) я получаю 12GBpm, используя CloneZilla, в то время как с dd я получаю только 5GBpm.
Что делает Clonezilla намного быстрее, чем дд?

3 ответа

Решение

ДД просто читает из блока 0 в блок 99999 и копирует данные.

Clonezilla понимает файловые системы и понимает, когда копировать нечего (потому что это пустое пространство или данные из файла, который был удален).

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

С веб- страницы "Для неподдерживаемой файловой системы копирование между секторами выполняется dd в Clonezilla".

Ну, это зависит от того, что Clonezilla использует для клонирования.

Он использует разные инструменты в зависимости от типа раздела, взятого с их сайта:

Based on Partclone (default), Partimage (optional), ntfsclone (optional), or dd to image or clone a partition. 

Он будет использовать их в таком порядке, чтобы попытаться скопировать ваш раздел. dd является последним средством, потому что он просто копирует сектор за сектором и не имеет встроенной оптимизации, которая бы основывалась на типе файловой системы раздела. Например, клонирование раздела ntfs будет намного быстрее, чем клонирование раздела hfs (по крайней мере, с более старой версией clonezilla, не использовавшей его некоторое время), потому что не было встроенного инструмента для эффективного копирования hfs +, и это использовал дд.

Clonezilla может быть быстрее, чем dd по ряду причин.

  1. Используемое оборудование
  2. Используемое программное обеспечение (Partclone, partimage, ntfsclone, dd)
  3. Параметры и настройки дд

Я согласен с обоими ответами, изложенными ранее. Я повторю и дополню каждый из этих ответов.

Предполагая, что все яблоко к яблокам в соотношении 1:1, где CloneZilla использует dd, а кто-то вручную использует dd вместо CloneZilla, используя partclone или что-то в этом роде, я бы сказал, что это должны быть параметры dd, поскольку это будет единственная оставшаяся разница. при условии, что используемое аппаратное и программное обеспечение идентично.

Одним из параметров является размер блока. Как правило, блоки большего размера позволяют копировать быстрее, но есть переломный момент, и не всегда имеет смысл просто выбирать блок самого большого размера, который вы можете.

      dd if=/dev/sda of=/dev/sdb bs=<value>

Как значение BS повышает скорость: действительно ли опция «bs» в «dd» увеличивает скорость?

Оба в этом случае не обязательно будут копировать пустые сектора. Вероятно, это самая большая проблема в разнице в производительности. Большинство пользователей, вероятно, не прекратят клонирование после копирования конца последнего раздела. Они, вероятно, использовали бы эту базовую команду

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

Это не остановится в конце последнего раздела.

Чтобы остановить передачу в конце последнего раздела:

      fdisk -l

Затем скопируйте значение в столбце END последнего раздела исходного диска. Затем установите счетчик равным этому значению.

      dd if=/dev/sda of=/dev/sdb count=<'fdisk -l' END_column_last_parition_result> 

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

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

Обратите внимание: когда вы это сделаете, вам придется расширить раздел на целевом диске после операции dd, чтобы свободное нераспределенное пространство можно было использовать.

Вы также можете увидеть разницу в производительности, поскольку на диске могут быть ошибки.

Кроме того, параметр «conv=sync» добавляет дополнение, которое увеличивает потребление данных целевого диска. Это также делает диск не «идентичным» источнику.

При копировании с неисправного диска обычно используется conv=sync,noerror. Если этот диск исправен, достаточно либо просто noerror, либо не использовать conv=.

Итак, для плохого диска я бы использовал что-то вроде

      dd if=/dev/sda of=/dev/sdb bs=512 count=<value> status=progress conv=sync,noerror

для хорошего

      dd if=/dev/sda of=/dev/sdb bs=10M count=<value> status=progress
Другие вопросы по тегам