Было несколько вопросов, касающихся инструментов клонирования дисков, и dd
они были предложены хотя бы один раз. Я уже подумывал об использовании dd
себя, в основном из-за простоты использования и того, что он легко доступен практически во всех загрузочных дистрибутивах Linux.
Какой лучший способ использовать dd
для клонирования диска? Я сделал быстрый поиск в Google, и первый результат был очевидной неудачной попыткой . Есть ли что-то, что мне нужно сделать после использования dd
, то есть что-нибудь, что НЕ МОЖЕТ быть прочитано с помощью dd
?
disk-image
dd
falstro
источник
источник
dd
вариантами пропуска поврежденных блоков - что важно при клонировании дисков для восстановления. Я добавил лучший ответ, который может клонировать диски с плохими блоками:dd if=/dev/sda of=/dev/sdb bs=4096 conv=sync,noerror
Ответы:
dd, безусловно, лучший инструмент для клонирования, он создаст 100% реплику просто с помощью следующей команды. У меня никогда не было проблем с этим.
Помните, что при клонировании каждого байта вы не должны использовать это на диске или разделе, который используется. Особенно приложения, такие как базы данных, не могут справиться с этим очень хорошо, и вы можете получить поврежденные данные.
источник
dd if=/dev/sda | dd of=/dev/sdb
. В моих тестах выполнение команды без канала дало мне пропускную способность ~ 112 Кбит / с. С трубы я получил ~ 235кб / с. У меня никогда не было проблем с этим методом. Удачи!Для экономии места вы можете сжать данные, созданные dd, с помощью gzip, например:
Вы можете восстановить ваш диск с помощью:
Чтобы сэкономить еще больше места, предварительно дефрагментируйте диск / раздел, который вы хотите клонировать (при необходимости), затем обнулите все оставшееся неиспользуемое пространство, упрощая сжатие gzip:
Подождите немного, dd в конечном итоге потерпит неудачу с сообщением «диск заполнен», затем:
Кроме того, вы можете запустить процесс dd в фоновом режиме, чтобы сообщить о состоянии, отправив ему сигнал с помощью команды kill, например:
Проверьте свою систему - приведенная выше команда для Linux, OSX и BSD Команды dd отличаются по сигналам, которые они принимают (OSX использует
SIGINFO
- вы можете нажать Ctrl+, Tчтобы сообщить о состоянии).источник
kill -SIGUSR1 %1
, и команда OSX dd с радостью принимает SIGUSR1 ... супер полезно, спасибо!Kill -SIGUSR1 1234
я искал это.dd if=/dev/hdb | gzip -c > /image.img.gz
?ВНИМАНИЕ : при работе с файловой системой может произойти повреждение файлов. Причина проста: он не понимает, что может происходить в файловой системе, и не пытается ее смягчить. Если запись ведется частично, вы получите частичную запись. Обычно это плохо для вещей и, как правило, фатально для баз данных. Кроме того, если вы завинчивать опечатку склонной если и из параметров, горе вам. В большинстве случаев rsync является столь же эффективным инструментом, написанным после появления многозадачности , и будет обеспечивать согласованные представления отдельных файлов.
Однако DD должен точно фиксировать состояние бита не подключенного диска. Загрузчики, тома llvm, идентификаторы UUID и метки разделов и т. Д. Просто убедитесь, что у вас есть диск, способный зеркально отражать бит целевого диска.
источник
sync
это не ответ на проблемы с повреждением файлов. Что произойдет, если Деймон или что-то напишет больше файлов послеsync
, во времяdd
операции?rsync
обеспечит согласованность внутренних данных в целевой файловой системе. Это не обеспечит согласованность данных в файлах - для этого вам нужно будет заблокировать файлы, и любые программы, которые записывают в файлы, должны будут соблюдать эти блокировки.При использовании dd для клонирования диска, который может содержать поврежденные сектора, используйте «conv = noerror, sync», чтобы убедиться, что он не останавливается при обнаружении ошибки и заполняет отсутствующий сектор (ы) нулевыми байтами. Обычно это первый шаг, который я предпринимаю при попытке восстановления с неисправного или неисправного диска - получите копию перед любыми попытками восстановления, а затем выполните восстановление на хорошем (клонированном) диске. Я оставляю это инструменту восстановления, чтобы справиться с пустыми секторами, которые не удалось скопировать.
Кроме того, вы можете обнаружить, что на скорость dd может влиять настройка bs (размер блока). Я обычно пробую bs = 32768, но вы можете протестировать его на своих системах, чтобы увидеть, что работает быстрее всего. (Это предполагает, что вам не нужно использовать определенный размер блока по другой причине, например, если вы пишете на ленту.)
источник
Для клонирования диска все, что вам действительно нужно сделать, это указать вход и выход для dd:
Конечно, убедитесь, что у вас есть соответствующие разрешения для чтения непосредственно из / dev / hdb (я бы рекомендовал запускать от имени root), и что / dev / hdb не смонтирован (вы не хотите копировать, пока диск меняется - монтируется только для чтения). После завершения image.img станет побайтовым клоном всего диска.
Есть несколько недостатков использования dd для клонирования дисков. Во-первых, dd скопирует весь ваш диск, даже пустое место, и если это сделать на большом диске, это может привести к очень большому файлу образа. Во-вторых, dd не дает никаких индикаторов прогресса, что может расстраивать, потому что копирование занимает много времени. В-третьих, если вы копируете этот образ на другие диски (опять же, используя dd), они должны быть такими же большими или большими, как исходный диск, но вы не сможете использовать дополнительное пространство на целевом диске до тех пор, пока вы не изменить размер ваших разделов.
Вы также можете сделать прямую копию с диска на диск:
но вы все еще подвержены вышеуказанным ограничениям относительно свободного места.
Что касается вопросов или ошибок, дд, по большей части, делает отличную работу. Однако некоторое время назад у меня был жесткий диск, который вот-вот должен был умереть, поэтому я использовал dd, чтобы попытаться скопировать любую информацию, которую я мог удалить, до того, как она полностью исчезла. Затем выяснилось, что dd не очень хорошо обрабатывает ошибки чтения - на диске было несколько секторов, которые dd не мог прочитать, в результате чего dd сдался и остановил копирование. В то время я не мог найти способ заставить dd продолжать, несмотря на то, что обнаружил ошибку чтения (хотя, похоже, он имеет такую настройку), поэтому я потратил довольно много времени, вручную задавая пропуск и пытаясь перепрыгнуть через нечитаемые разделы.
Я потратил некоторое время на изучение решений этой проблемы (после того, как я выполнил задачу) и обнаружил программу под названием ddrescue , которая, согласно сайту, работает как dd, но продолжает читать, даже если обнаруживает ошибку. Я никогда не использовал программу, но это стоит учитывать, особенно если диск, с которого вы копируете, старый, в котором могут быть поврежденные сектора, даже если система выглядит нормально.
источник
conv=sync,noerror
это помогло бы.conv=sync,noerror
параметры необходимы, они позволяют dd пропускать плохие блоки и обнулять их на изображении, чтобы все выровнялось правильно. Реквизит для тех немногих, кто что-то прокомментировал.ddrescue
предоставляет индикатор прогресса без каких-либо специальных параметров, и вы можете остановить копирование и продолжить с того места, где остановились.status=progress
Если исходный диск вообще поврежден, вам повезет больше
dd_rhelp
сdd_rescue
(моими личными предпочтениями) или GNUddrescue
.Причиной этого является то, что при ошибках чтения
dd
продолжает пытаться и пытаться и пытаться - потенциально ожидая в течение длительного времени, пока истечет время ожидания.dd_rescue
делает умные вещи, такие как чтение до ошибки, затем выборка места на диске и чтение назад до последней ошибки, иdd_rhelp
в основном этоdd_rescue
менеджер сеансов - умный запуск и возобновление работы,dd_rescue
чтобы снова сделать это быстрее.Конечным результатом
dd_rhelp
является максимальное количество данных, восстановленных за минимальное время. Если вы оставляетеdd_rhelp
запущенным, в конце концов он выполняет ту же работу, что иdd
в то же время. Однако, еслиdd
возникнут ошибки чтения на байте 100 вашего 100-гигабайтного диска, вам придется долго ждать, чтобы восстановить остальные 9 999 900 байт *, тогда какdd_rhelp
+dd_rescue
восстановит большую часть данных гораздо быстрее.источник
На исходном диске не должно быть никаких смонтированных файловых систем. Как пользователь, который может прочитать блочное устройство (root работает), запустите 'dd if = / dev / sda ....'
Одна из полезных вещей здесь - это то, что вы создаете поток байтов ... и вы можете с этим многое сделать: сжимать его, отправлять по сети, разбивать на более мелкие капли и т. Д.
Например:
Но более сильно:
Приведенное выше копирует сжатый образ исходного жесткого диска в удаленную систему, где он хранит его в пронумерованных блоках 2G, используя имя исходного хоста, и в то же время информирует вас о ходе выполнения.
Обратите внимание, что в зависимости от размера диска, скорости процессора на источнике, скорости процессора на месте назначения, скорости сети и т. Д. Вы можете пропустить сжатие, выполнить сжатие на удаленной стороне или включить сжатие ssh.
источник
Для клонирования диска все, что вам действительно нужно, это указать вход и выход для
dd
:Конечно, убедитесь, что у вас есть необходимые разрешения для чтения напрямую
/dev/hdb
(я бы рекомендовал запускать с правами root), и это/dev/hdb
не смонтировано (вы не хотите копировать во время замены диска). После завершенияhdb.img
будет побайтовый клон всего диска.Есть несколько недостатков использования
dd
для клонирования дисков. Во-первых,dd
скопирует весь ваш диск, даже пустое место, и если это сделать на большом диске, это может привести к очень большому файлу изображения. Во-вторых,dd
абсолютно никаких указаний на прогресс, что может расстраивать, потому что копирование занимает много времени. В-третьих, если вы копируете этот образ на другие диски (опять же, используя dd), они должны быть такими же большими или большими, как исходный диск, но вы не сможете использовать дополнительное пространство на целевом диске до тех пор, пока вы не изменить размер ваших разделов.Вы также можете сделать прямую копию с диска на диск:
но вы все еще подвержены вышеуказанным ограничениям относительно свободного места.
Первый недостаток можно устранить, распаковав данные при копировании. Например:
Второй недостаток можно устранить с помощью
pv
инструмента pipeview ( ). Например:Я не знаю способа преодолеть третий недостаток.
Кроме того, вы можете ускорить время копирования, указав
dd
работать с большими кусками данных. Например:источник
dd if=/dev/zero bs=1M of=/balloon; sync; rm /balloon
(Модуль дополнительного интеллекта на уровне файловой системы.)Другая полезная вещь, которую вы можете сделать с дисками dd и rescue, - это копирование данных по сети:
Вы можете вставить gzip в оба этих конвейера, если сеть не является локальной. Для прогресса используйте
pv
. Чтобы заставить netcat local_machine завершить работу после завершения копирования, вы можете добавить-w 5
что-нибудь еще.источник
> disk_backup.img
или,|dd of=/dev/sdb
или что-то еще, в зависимости от того, что вы хотите сделать. Я предполагаю, что вы не хотите записывать образ диска в стандартный вывод.Имейте в виду, что dd делает точную копию , включая все пустое пространство.
Это значит:
Надеюсь, что это полезно
источник
Для дальнейшего использования может быть интересно проверить ddrescue . Это спасло мой день пару раз.
источник
Другая важная функция - копирование MBR, таблиц разделов и загрузочных записей.
Только что
и другое направление, когда вы пишете это. Польский с
fdisk
после.Вы чувствуете себя намного безопаснее, если у вас есть резервная копия таблицы разделов.
Кроме того, это делает переход на другой жесткий диск (при изменении структуры разделов) приятным.
источник
Это своего рода дешевый хак, но это быстрый и грязный способ контролировать ваш процесс DD.
Запустите команду дд. Откройте новую оболочку и выполните ps awx, чтобы найти PID вашего процесса dd. Теперь в новой оболочке наберите -n 10 kill -USR1 {pid вашего процесса DD}
Это ничего не даст в окне вывода часов, но в исходной оболочке DD DD начнет выводить отчеты о состоянии каждые 10 секунд. Конечно, вы можете изменить -n 10 в команде watch на любой другой период времени.
Тахионный
источник
watch
наличии и-USR1
убивает дд. Следующая команда работает, хотя:while [ true ]; do killall -INFO dd; sleep 30; done
pv
командой.Это скопирует диск и пропустит блоки с ошибками, что очень важно.
Это основные и важные опции для использования dd для клонирования или восстановления диска.
Я не хотел публиковать другой ответ, но не было хороших ответов с необходимыми опциями «conv = sync, noerror» среди 25 уже опубликованных.
источник
conv=sync,noerror
поскольку он пропустит слишком много данных для каждого плохого блока. Эти параметры необходимы для «клонирования восстановления», и нет смысла искать их в комментариях. Самый популярный ответ является адекватным, если на дисках нет поврежденных блоков, например, для клонирования исходного диска, но не для восстановления.dd
пример, но также подходит для клонирования безошибочного диска. Поэтому я считаю, что мой ответ здесь лучший, как «использовать DD для клонирования дисков». Я не добавил информацию о мониторинге прогресса, компрессии и т. Д., Потому что хотел сделать его простым и сосредоточиться на предоставлении краткого ответа, который правильно понимает основы.Вы могли бы попробовать что-то вроде этого
чтобы пропустить все ошибки и иметь точный клон раздела или жесткого диска
источник
Дд предоставляет информацию о прогрессе - ну, большинство версий в Linux. Я видел некоторые, которые не помнят, но не помнят Unix-аромат.
Страница man говорит: отправка сигнала USR1 в работающий процесс 'dd' заставляет его печатать статистику ввода / вывода со стандартной ошибкой и затем возобновлять копирование.
Я использую эту функцию регулярно.
источник
Кто-то должен был сказать это: попробуйте Clonezilla (http: // clonezilla.org/)
Что вы получаете? Для копирования используются только части файловой системы. Clonezilla использует dd, grub, sfdisk, parted, partimage, ntfsclone и / или partclone. В зависимости от выбранных вами вариантов.
Достойную документацию можно найти по адресу: http: // clonezilla.org/clonezilla-live/doc/.
источник
Как копировать с использованием dd (в данном случае на удаленную машину, но тот же принцип применяется к локальной копии), который показывает прогресс.
Он работает путем сохранения pid через файловый дескриптор 3 в / tmp / pid, который затем используется для последующих убийств с сигналом USR1. Проблема была в том, чтобы отфильтровать вывод прогресса на stderr только в одну строку через фильтрацию stderr через подоболочку.
источник
Большая часть информации была описана в предыдущих вставленных получателях, но не все были описаны.
В Linux вы можете клонировать жесткий диск или раздел с помощью команды dd. Внимание, когда вы допустите ошибку, вы потеряете все свои данные.
Во-первых, назначение не должно использоваться, во-вторых, источник не должен использоваться или переустанавливаться в режиме только для чтения. В противном случае копия будет повреждена. Если перемонтирование невозможно, сделайте загрузочный диск (hdd / ssd / pendrive) любым дистрибутивом linux live. Я всегда преуспел, но это твой выбор. Если это возможно, вы можете загрузить или изменить системный уровень на 1, для однопользовательского режима, или вы можете напрямую перезагрузить систему в однопользовательском режиме, это зависит от дистрибутива. Если вы будете клонировать только один раздел, этот раздел должен быть размонтирован или перемонтирован в RO:
или же
Если вы хотите клонировать весь жесткий диск, вы должны размонтировать или перемонтировать все разделы.
Вы должны определить источник и устройство назначения. пожалуйста, посмотрите на dmesg, здесь хранится вся необходимая информация об устройстве, с поставщиком и т. д. В качестве альтернативы можно определить размер устройства, если он другой. Далее, пункт назначения должен быть таким же или большим, чем источник. Вы должны вычислить источник, например: fdisk -l / dev / sda, за исключением геометрии раздела (может быть GPT), вы получите: 1. общий размер диска, гигабайт и байт 2. историческая геометрия и общее число секторов, очень важная информация 3. размер блока в байтах, обычно это 512.
например:
дальше давайте попробуем делитель больше 512, у нас есть 41943040 физических секторов:
41943040/256 = 163840, очень хорошо, мы можем сделать массовое копирование 256 секторов. мы можем больше? давайте попробуем: 41943040/1024 = 40960, я думаю, этого достаточно, мы выберем этот. Давайте посчитаем размер группы секторов: 512 (размер сектора) * 1024 = 524288 байт, eq 512K. Тогда мы можем использовать параметр bs = 512K или меньше, но разделить это на 2 ^ x. Для современных жестких дисков с большим внутренним кешем это достаточно практично. для более старых дисков с гораздо меньшим объемом кэша достаточно значения 32 КБ или менее.
Затем после подготовки мы можем сделать копию: dd if = / dev / source_devide of = / dev / destination_device bs = 32K, и копирование будет выполнено. Обратите внимание, любая ошибка перезапишет ваши важные данные. По назначению все будет перезаписано.
Если вы попытаетесь восстановить данные на поврежденном исходном диске, лучше использовать собственный размер сектора, обычно это 512 байт, и добавить опцию conv = notrunc. в противном случае дыры в источнике, отброшенные плохими секторами, будут соединены смещением секторов по месту назначения. Это повредит копию с небольшим шансом на ремонт. тогда команда будет:
и долгое время ждите, когда диск и система сдадутся и пройдут сектор за сектором до конца.
dd - полезный инструмент для перемещения раздела на новое место. Просто создайте раздел, сделайте dd для нового раздела (это может быть больше, намного больше) и, если это возможно, разверните скопированную файловую систему для заполнения всего нового раздела, ext3 / ext4 / xfs / zfs / btrfs имеют эту возможность. Наконец, вы должны изменить / etc / fstab, затем размонтировать / смонтировать, если это возможно, или перезагрузить систему.
Конечно, вы можете клонировать любой тип раздела. Команда dd не смотрит на тип файловой системы, она ничего не делает со своей структурой. тогда эта команда может быть использована для клонирования NTFS или других типов разделов.
Есть какая-то хитрость. Если вы не установили параметр, тогда dd поместит вывод в его стандартный вывод. тогда вы можете сделать сжатую сырую копию диска или раздела, например:
Конечно, это должно быть сделано в автономном режиме. Вы можете восстановить это:
, тогда все жесткие диски sda будут перезаписаны этой резервной копией, и все текущие данные будут потеряны. Вы можете сделать это также с разделом Windows NTFS и жестким диском, используемым этим. Конечно, вы можете использовать другую команду сжатия, в зависимости от вашего выбора.
источник
Вы можете создать сжатый файл образа раздела (или диска) на лету, используя
bzip2
илиgzip
вместоdd
. Это удобно для хранения изображений на съемных носителях:Если диск ранее интенсивно использовался, вы можете улучшить сжатие, заполнив все неиспользуемое пространство нулями до создания образа:
Чтобы восстановить образ на другой диск, все, что вам нужно сделать, это:
источник
По какой-то причине, dd не работает при создании образа компакт-дисков со звуковыми дорожками. Вам нужно использовать cdrdao или что-то подобное, чтобы получить файл изображения + TOC.
источник
Примечание по скорости: по моему опыту, dd в два раза быстрее, если вы указываете bs = 1024 вместо значения по умолчанию bs = 512. Использование еще большего размера блока не дает заметного ускорения при bs = 1024.
источник
Одна вещь, о которой вы должны знать, когда записываете полный диск, это перезаписывает основную загрузочную запись принимающего диска. Он содержит таблицу разделов и другую важную информацию. Если новый диск не совпадает со старым диском, это может создать все виды таблиц. Копирование разделов, как правило, более безопасно (и разделы подкачки копировать не нужно)
источник
Я был вне роли администратора уже много лет, но я знаю, что «dd» - это дело. Я регулярно использовал эту технику в конце 80-х на компьютерах Sun Sparc и 386i. У меня был один клиент, заказавший более 30 систем 386i с программным обеспечением САПР, которое распространялось на нескольких лентах QIC.
Мы установили на первом компьютере, настроили приложение, запустили sys-unsfig от SunOS, поместили диск в обувную коробку с другим адресом SCSI и затем перешли к «dd» на остальные 30 дисков.
источник
Как уже упоминалось выше, одним из недостатков клонирования смонтированной файловой системы является потенциальное повреждение данных. Это, очевидно, не относится к полным клонам дисков, но если вы используете LVM, вы можете сделать снимок LogicalVolume и dd из снимка, чтобы получить согласованное изображение.
источник
Для томов NTFS я предпочитаю использовать ntfsclone . Это часть пакета ntfsprogs .
источник
Просто предупреждение для начинающих, о котором нужно сказать: по крайней мере, с некоторыми версиями bs = X означает, что память размером X будет буквально распределена. bs = 2 ГБ в системе с 1 ГБ ОЗУ и недостаточной подкачкой БУДЕТ привести к плохим последствиям.
источник