На работе часто бывает необходимо перенести или скопировать Windows 7 с одного HDD на другой по разным причинам,
умирает HDD или нужно установить HDD с меньшим или наоборот с бОльшим объемом,
в общем проблема решается довольно просто, при помощи 2 утилит dd и Gparted.
Загружаемся в Ubuntu LiveCD, у меня была загрузка по сети образа Ubuntu 12.04 LTS Desktop.
И первым делом копируем главную загрузочную запись (MBR):
dd if=/dev/sda of=/dev/sdb bs=512 count=1
После чего запускаем Ggparted и копируем разделы (она имеется в обычном ISO).
Не забываем проверить флаг boot на 100Мбайтном разделе.
Немного об утилите dd:
if=/dev/sda--inputfile (входной файл, в данном случае диск с Windows 7)of=/dev/sdb--outputfile (выходной файл, в данном случае диск куда копируем)bs=512-- block size (Внимание! Операндcountработает с блоками, а не с байтами!512блоков)count=1--count(количество раз проведения операции копирования буфером)
MBR находится в 0 секторе первого раздела жесткого диска и занимает вместе с таблицей разделов ровно 512 байт.
Поэтому и размер блока выбираем 512, а количество count единица - получаем 512 байт.
А если нам нужно не весь MBR, а только загрузочный код, который занимает первые 446 байт 0 сектора, то придется изменить размер блока:
dd if=/dev/sda of=boot-code.mbr bs=446 count=1
Обратите внимание, на то, что сохраняем в файл, т.к. в устройство записать такой объем не получится, как уже говорилось выше, запись на устройства производится блоками по 512 байт.
Чтобы теперь записать сохраненный загрузчик, нужно получить блок размером в 512 байт,
для этого сохраняем в другой файл таблицу разделов - это оставшиеся 66 байт после загрузочного кода - 446 байт.
dd if=/dev/sdb of=part-table.mbr bs=1 count=66 skip=446
skip=n(блоков) Этот операнд пропускает n блоков от начала входного (if) файла(устройства), а затем копирует указанное количество блоков.
Внимание! Операнд skip (как и count) имеет дело с блоками, а не с байтами! Поэтому размер блока следует выбирать вдумчиво.
И еще обратите внимание на то, что сейчас мы выбрали устройство /dev/sdb, т.к. нам нужна таблица разделов именно этого устройства,
ведь мы туда собираемся копировать загрузчик с устройства /dev/sda :)
Теперь нужно "собрать" MBR из имеющихся кусочков:
cat boot-code.mbr > mbr
cat part-table.mbr >> mbr
Теперь наконец-то мы можем записать загрузочный код на устройство!
dd if=mbr of=/dev/sdb bs=512 count=1
Ссылки по теме:
Comments
comments powered by Disqus