использование dd для копирования раздела в другой раздел при использовании физического диска

17

Я не уверен, как лучше объяснить это в теме, поэтому «вопрос» может быть неправильным. Но здесь идет. У меня три жестких диска. Диск A - это диск емкостью 320 ГБ, диск B - диск объемом 80 ГБ, диск C - диск объемом 1 ТБ. Я скопировал данные с диска 80 ГБ на диск емкостью 1 ТБ и собираюсь изменить размер раздела (чтобы затем можно было скопировать данные с диска 320 ГБ).

У меня такой вопрос: если я загружаюсь в операционную систему на диске 1 ТБ, могу ли я использовать dd для копирования диска объемом 320 ГБ в другой раздел на этом физическом диске? Я знаю, что не должен копировать активный раздел (то есть, я не мог скопировать данные с диска объемом 320 ГБ, если у меня установлена ​​эта операционная система).

Я рассуждаю так: я пытался использовать Acronis TrueImage, Partition Manager и Image 4 DOS / Linux (оба приложения), и на копирование данных уйдет более недели. Это означает, что в течение недели я не могу пользоваться компьютером, что недопустимо (если только это не мой единственный вариант). Я надеюсь, что это работает, поэтому я могу по крайней мере использовать компьютер, пока я делаю копию.

Если мне нужно, я могу либо загрузиться с Live CD (не очень предпочтительный вариант), либо использовать «Диск B», но я бы хотел удалить этот привод как можно скорее.

Der Hochstapler
источник
Конечно, почему нет?
Майкл Хэмптон

Ответы:

18

Да, то, что вы хотите сделать, будет работать нормально, если выполняются следующие два условия:

  1. Существует нет (установлено) файловая система на разделе вы dd'ing к .
  2. Перегородка вы dd'ing до , по крайней мере такого же размера , как тот , который вы dd'ing от (т.е. 320 ГБ).

Причина, по которой он будет работать нормально, состоит в том, что разделы - это просто файлы в UNIX. Их содержимое имеет особое значение, только если они содержат смонтированную файловую систему.

Предполагая, что у вас есть макет, который выглядит следующим образом:

1 TB = sda, два раздела, sda1, с которого вы загрузились, и sda2, на который вы собираетесь

320 ГБ = sdb, один раздел, sdb1, с которого вы удаляетесь

Ваша команда будет выглядеть так:

dd if=/dev/sdb1 of=/dev/sda2 bs=1M

bs=1MПараметр есть чтобы гарантировать , что Dd копирует данные в больших кусках вместо выдачи запроса для каждого сектора.

Майкл Фенн
источник
1
если = источник = пункт назначения, я думаю, что что-то не так в совете выше.
В приведенном выше примере sdb1 является источником, а sda2 является местом назначения. Я отредактировал ответ, чтобы быть более ясным об этом.
Майкл Фенн
1
Не нужно выполнять resize2fsпосле копирования? Даже когда размеры разные?
Сопалахо де Арриерес
5

В целом, это нормально, чтобы dd любой раздел, пока он не смонтирован. Если вам нужно смонтировать исходный раздел для чтения во время работы dd, было бы лучше смонтировать его только для чтения с параметром -o ro.

если вы хотите сначала загрузиться в исходный раздел amd, а затем использовать dd для его копирования, вы можете выполнить команду mount -o ro, remount /, чтобы сделать ее читаемой только после загрузки.

переигровка
источник
Только чтение не означает, что файловая система не дурачится с журналом, не реорганизует свободное пространство или что-то еще.
vonbrand
@vonbrand Не могли бы вы привести пример реализации файловой системы Linux, которая делает это в режиме RO?
Basilevs
@vonbrand В UNIX файловых системы, монтируются ро очень ли означают , что нет записи не должна быть выдана подстилающим устройство.
Майкл Фенн