5

Не вдаваясь в подробности, я пытаюсь скопировать содержимое диска 500 ГБ в моем MacBook на другой диск 500 ГБ. Но это оказывается неожиданной проблемой, потому что диск содержит как раздел OS X, так и раздел NTFS с Win 7 через Boot Camp от Apple.

За исключением Clonezilla, инструменты, на которые я смотрел до сих пор, имеют некоторые ограничения. Инструменты Mac не хотят иметь дело с разделом NTFS. Инструменты Windows совершенно не знают ни раздела HFS+, ни гибридного раздела Boot Camp MBR/GPT.

Клонезилла выглядела так, как будто она будет делать то, что я хочу, но, видимо, я не могу понять, как ее использовать. Сделав то, что я считал копированием с сектора на сектор, я обнаружил, что был перенесен только раздел NTFS. Остальные были явно пусты. (И, честно говоря, я не уверен, что Clonezilla также правильно перенесла таблицу разделов).

Примечание. Использование SATA для чтения / записи всех секторов на этих дисках занимает более 2 часов. Так что я не собираюсь использовать метод проб и ошибок, чтобы сузить подходящую комбинацию вариантов использования Clonezilla.

Я начинаю думать, что, возможно, ответ заключается в том, чтобы загрузить Linux (возможно, Ubuntu), а затем использовать какую-то древнюю команду BSD. Проблема в том, что я не знаю, какую команду (или параметры использовать), чтобы сделать копию уровня сектора с одного диска на другой. Насколько я знаю, диски имеют одинаковое количество секторов, так что это должно быть тривиально. Вздох.


Да, dd работает. (Уф!)

Я особенно ценил ссылку в ответе на соответствующий вопрос / обмен на serverfault.com, поскольку я никогда бы не подумал посмотреть там.

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

  • Не используйте размер передачи по умолчанию 512 байт. В моем случае я использовал форму
    dd if=/dev/sda of=/dev/sdb bs=8192
    так как это значительно увеличило скорость передачи данных. (Случилось так, что размер обоих моих дисков был кратным 8192. Не уверен, что это имело значение, но так было безопаснее).

  • Есть способ получить статус прогресса с помощью команды dd . По-видимому, dd отображает свой текущий статус передачи, когда получает правильный сигнал. Я использовал метод, предложенный в этом ответе сервера . Тем не менее, я использовал интервал в 120 секунд, а не 10, поскольку я не хотел, чтобы меня "затопило" информацией о прогрессе.

Потребовалось около 2 часов 20 минут, чтобы полностью клонировать мой диск на 500 ГБ на другой диск на 500 ГБ. Окончательное сообщение о статусе от dd было
500107862016 bytes (500 GB) copied, 8353.86 s, 59.9 MB/s

Что ему не хватает с точки зрения опций, этот процесс наверняка компенсируется простотой и полнотой. :-)

2 ответа2

3

В Linux команда dd может делать то, что вы хотите.

https://serverfault.com/questions/4906/using-dd-for-disk-cloning

Просто убедитесь, что вы не копируете пустой диск на диск, который хотите клонировать.

0

Если вы хотите быстро... то dd не то, что вы хотите. Зачем?

Потому что это однопоточный. Это значит, что это работает так:

  1. читает блок из источника, ждет, пока он не будет готов
  2. пишет этот блок в цель, ждет, пока готов
  3. перейти к 1

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

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

Параметризация, которая вам больше всего понравилась бы:

buffer -i /dev/sdX -o /dev/sdY -s 8192 -b 2048

Он быстро клонирует /dev/sdX в /dev/sdY .

Вы также можете использовать buffer для ускорения любой команды конвейерной оболочки:

pipe-chain-commands1 | buffer -s 8192 -b 2048 | pipe-chain-commands2

Это приведет к тому, что первая цепочка не должна ждать, пока вторая цепочка не съест свой результат.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .