Перенос Windows с раздела на раздел


По работе однажды возникла задача перенести работающий сервер Windows 2008 с одного 
компьютера на другой, причем диски были геометрически разные, и разделы для переноса - 
тоже. Пришлось провести несколько испытаний на Windows XP, Windows 7 и... всё получилось. 
Использовался пакет ntfsprogs.

Сначала диски были вставлены в один компьютер и размеры разделов скопированы с точностью 
до байта (fdisk). Затем c 1 раздела одного винта Windows был перемещен на 2 раздел 
другого винта:

# ntfsclone --overwrite /dev/sdb2 /dev/sda1

Затем с помощью небольшого патча <tt>ntfsreloc.c</tt> проделан фокус по "выравниванию" 
геометрии, которая прошита внутри винды:

$ wget 'http://wheel69.narod.ru/ntfsreloc.c'
$ gcc -o ntfsreloc ntfsreloc.c
# ntfsreloc -w -p /dev/sdb2

Ну и напоследок перенесем MBR:

# dd if=/dev/sda of=/dev/sdb bs=512 count=1

В WinXP при этом пришлось еще поправить файлик-загрузчик c:\boot.ini, а в Win7, Win2008 
это делается с помощью bcdedit

Детали операций опущу из-за нехватки времени - главное алгоритм!

Кстати, снять образ винды, кроме обычного 

# dd if=/dev/sda1 | gzip -c > file.img.gz
# gunzip -c file.img.gz | dd of=/dev/sda1

Можно гораздо быстрее:

# ntfsclone --save-image -o - /dev/sda1 | gzip -c > file.img.gz
# gunzip -c file.img.fz | ntfsclone --restore-image --overwrite /dev/sda1 -