На работе часто бывает необходимо перенести или скопировать 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
--i
nputf
ile (входной файл, в данном случае диск с Windows 7)of=/dev/sdb
--o
utputf
ile (выходной файл, в данном случае диск куда копируем)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