У меня есть диск с несколькими разделами, каждый из которых имеет различную файловую систему (ext3, ext4 и, скажем, NTFS). Я хочу знать, могу ли я скопировать весь диск на новый (большей емкости), используя dd
, желательно за одну операцию.
Чтобы предотвратить ненужные усилия, позвольте мне прояснить несколько вещей. Мне неинтересны другие способы сделать это (я знаю правильный способ, а стороннее ПО нежелательно). Меня не очень интересуют теоретические ответы («это должно сработать»). Меня очень интересует чей-либо опыт, пытающийся сделать такую вещь.
Я знаю, что на самом деле правильный ответ - «попробуй и увидишь», но я нахожусь в 250 милях от рассматриваемого диска.
Если вам нужно это сделать, и вы должны быть в действительно плохое место даже считать об этом ...
Безопаснее всего копировать разделы по отдельности. Например:
# Install a temporary ssh key so we don't have to deal with lots of
# password prompts, remember to remove it from authorized_keys later
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa user@host
# Copy everything, you can go have breakfast - and probably lunch -
# while you wait
for partition in /dev/sdb?*
do
dd if=$partition | ssh user@host "dd of=$(basename $partition).img"
done
Подождите несколько минут или часов для завершения копирования, а затем начните восстановление с образов дисков. Например, на новом диске вы можете создать новую таблицу разделов с разделами правильного размера для хранения образов дисков, а затем dd
изображения возвращаются в новые разделы.
Копирование весь диск (например. dd if=/dev/sdb
) усложняет ситуацию, так как тогда у вас будет полный образ диска, вам, вероятно, все равно придется как-то разделить на разделы. И если вы думаете о dd
перенося весь диск непосредственно на другой физический диск, подумайте еще раз: иногда вы просто потеряете, когда система отказывается признать, что таблица разделов и новый жесткий диск имеют какое-либо отношение друг к другу.
если ты должен скопируйте весь диск за один раз (вам, вероятно, не нужно, так что не думайте об этом), затем скопируйте его в файл изображения и использовать kpartx
работать с перегородками. Например:
dd if=/dev/sdb | ssh user@host "dd of=sdb.img"
# Later, on the recovery host...
kpartx -l sdb.img
kpartx -a sdb.img
# Now you can...
mount -o ro /dev/mapper/loop0p1 /mnt/rescuep1
mount -o ro /dev/mapper/loop0p2 /mnt/rescuep2
# or copy to a new hard drive...
dd if=/dev/mapper/loop0p1 of=/dev/sdc1
dd if=/dev/mapper/loop0p2 of=/dev/sdc2
Если физический диск имеет физические проблемы, рассмотрите возможность использования dd_rescue
вместо этого (хотя вы на самом деле об этом не спрашивали).