Перенос ОС Windows на другой компьютер средствами ОС Linux

    После прочтения статьи «Фривольное клонирование ОС MS Windows XP / Server 2003 своими руками, средствами GNU/Linux» возникло естественное желание дополнить ее в соответствии с реалиями конца 2014 года.

    В общем, проблема разворачивания той или иной версии Windows состоит из двух частей — во-первых, нужно скопировать данные разделов с эталонного ПК на новый, и, во-вторых, надо обеспечить загрузку Windows на изменившемся оборудовании.

    MBR, таблица разделов и сигнатура диска


    Начнем с копирования данных. Какие же данные нам нужно скопировать? Для Windows XP это MBR (446 байт в начале диска, основная таблица разделов и завершающая сигнатура 55AAh), данные о расширенных разделах и собственно данные системного раздела Windows. Для Vista и Windows 7 добавляется еще и 100-мегабайтный системный раздел (GPT не рассматриваем). При этом нужно помнить, что первый раздел в Windows XP по-умолчанию начинается с сектора 63, а в Windows Vista/7 — с сектора 2048. Естественно, все операции мы будем проводить на незапущенной Windows, загрузившись с System Resque CD.

    Так вот, не стоит копировать MBR «в лоб», для этого в Linux существует утилита ms-sys, которая записывает загрузчик любой версии Windows от Win95 до Win7 в MBR. Для сохранения и восстановления структуры разделов есть утилита sfdisk.

    Например, так:
    sfdisk -d /dev/sda > ./parttable.txt (сохраняем структуру разделов)
    sfdisk -f /dev/sda < ./parttable.txt (восстанавливаем на другом ПК)
    ms-sys -mbr /dev/sda (записываем MBR от Windows XP)


    Добавлено:
    Для того, чтобы WIndows загрузилась, необходимо также сформировать подпись диска (disk signature). Для этого нужно прочитать содержимое ключа реестра HKLM\SYSTEM\MountedDevices\<\DosDevices\«Имя раздела на диске с двоеточием»>, и выделить первые 8 байт (в шестнадцатеричной записи), например: 4F BE 4F BE. Сделать это на смонтированном в Linux NTFS-томе можно с помощью описанной ниже утилиты reged. Следует учесть, что в reged имя ключа, содержащее слеш, нужно указывать через двойной слеш, например: \\DosDevices\\C:. Затем указанные 8 байт следует записать на диск начиная со смещения 0x01B8 утилитой hexedit. После этого диск готов к загрузке.

    Данные разделов NTFS


    После копирования MBR и структуры разделов можно копировать собственно данные разделов с помощью partclone. Инструмент partclone позволяет создавать образы разделов ext2/3/4, fat, ntfs, xfs, btrfs, reiserfs и т. д., анализируя внутреннюю структуры ФС и включая в образ только используемые сектора. Создадим на эталонном ПК образ раздела с помощью partclone, размер образа будет равен размеру используемого на томе места.
    partclone.ntfs -c -s /dev/sda1 -o <файл образа>

    а на целевом компьютере развернем его
    partclone.ntfs -r -s <файл образа> -o /dev/sda1

    или
    partclone.restore -s <файл образа> -o /dev/sda1
    К сожалению, внутреннее сжатие в образе не поддерживается.

    Возможно также прямое копирование данных с одного устройства на другое с помощью ключа -b:
    partclone.ntfs -b -s /dev/sda1 -o /dev/sdb1

    Теперь рассмотрим вопрос восстановления данных на раздел размера, меньшего, чем эталонный. Для этого нужно смонтировать partclone-образ и либо скопировать с него файлы на целевой том с сохранением атрибутов, разрешений, hardlink-ов и прочих свойств NTFS, либо уменьшить размер раздела NTFS внутри образа partclone, а уже затем скопировать этот уменьшенный раздел на целевой том командой partclone.ntfs с ключом -b.

    Мне не известны инструменты, которыми можно было бы в Linux скопировать файлы и hardlink-и с одного тома NTFS на другой со всеми атрибутами и потоками (если кому-нибудь они известны, прошу в комментарии), так что у нас остается только вариант с уменьшением размера тома. К счастью, существует инструмент imagemount, который экспортирует partclone-образ как блочное устройство nbd и поддерживает монтирование образа в том числе и на запись, при этом изменения сохраняются в отдельном файле (ключ -с). Экспортируем том на запись
    modprobe nbd max_part=16
    imagemount -w -D -d /dev/nbd0 -f /mnt/images/winxp.img -c ./cow.bin

    Теперь изменим размер ФС на томе NTFS. Сначала будет сделан тестовый прогон (ключ -n)
    ntfsresize -s <новый размер> -n /dev/nbd0

    а затем — реальный:
    ntfsresize -s <новый размер> /dev/nbd0

    Клонируем раздел:
    partclone.ntfs -b -s /dev/nbd0 -o /dev/sda1

    А теперь — щепотка пичальки
    Imagemount, даже последней версии — 0.3.1, не работает с дисками на запись на архитектуре x86_64 (зависает намертво) и практически не работает на архитектуре i386 (записывает образ с ошибками), поэтому изменение размера раздела на данный момент невозможно. Буду писать в багртекер partclone-utils.

    К сожалению, partclone не поддерживает сжатие образов, но эту проблему можно обойти с помощью так любимых в Linux костылей и подпорок. Создадим пустой образ формата qcow2 с виртуальным размером, заведомо превышающим наши потребности (например, 1 Tb). Его реальный объем будет увеличиваться в зависимости от количества данных, которые мы туда запишем.
    qemu-img create -f qcow2 <файл образа> 1024G

    Смонтируем его как блочное устройство
    modprobe nbd max_part=16
    qemu-nbd -c /dev/nbd0 <файл образа>

    Теперь скопируем на виртуальное устройство файловую систему
    partclone.ntfs -b -s /dev/sda1 -o /dev/nbd0

    размонтируем устройство и в результате получим файл qcow2 с размером чуть больше, чем размер исходного NTFS-тома. Теперь к файлу можно применить внутреннее сжатие:
    qemu-img convert -c <файл образа> <сжатый файл образа>

    Легко заметить, что этот способ требует удвоенного места на диске для хранения исходного и сжатого образов, а также дополнительное время на сжатие. Если мы применим еще один костыль, то избавимся и от этих недостатков. После монтирования образа qcow2 (командой qcow-nbd -c /dev/nbd0 <файл образа>) отформатируем его в файловую систему btrfs
    mkfs.btrfs /dev/nbd0

    а теперь смонтируем со сжатием:
    mount -o compress-force=zlib /dev/nbd0 /mnt

    и создадим образ файловой системы NTFS
    partclone.ntfs -c -s /dev/sda1 -o /mnt/ntfs-image.bin

    После этого размонтируем все.

    В результате мы получим файл образ со сжатием, в который включены только используемые сектора и который можно смонтировать через imagemount как файловую систему и прочитать его содержимое.

    Мне, например, удалось уменьшить размер образа со свежеустановленной Windows XP c 2,7 Gb до 587 Mb. При этом можно смонтировать образ без распаковки и просмотреть файлы внутри.

    Гораздо лучше, чем набившие оскомину dd | gzip, не так ли?

    Запуск Windows на новом оборудовании


    Теперь перед нами стоит вторая задача — сделать так, чтобы установленная на том NTFS Windows смогла запуститься. В случае Windows 7 копируем еще и загрузочный раздел, для Windows Vista — дополнительно делаем (с Windows Vista Live CD) перезапись BCD, чтобы данные в этой области соответствовали серийному номеру жесткого диска, проверяем, чтобы у загрузочного раздела стояла соответствующий флаг boot (можно сделать через parted) и перезагружаемся. После чего с некоторой вероятностью получаем синий экран с надписью 0x0000007B Inaccesseble boot device. В этом случае для Windows XP рекомендуется выставить правильный HAL, но вот незадача, я уже давно не встречал одноядерные ПК без APIC и тем более ACPI, так что наш эталонный образ скорее всего уже содержит правильный многопроцессорный HAL. Поэтому не стоит надеяться, что замена HAL сразу исправит нашу проблему. Скорее всего, причина в том, что Windows не распознала контроллер жесткого диска, и, соответственно, не смогла продолжить с него загрузку.

    Допустим, мы не пользовались sysprep при создании эталона (а то получиться неспортивно, потому что sysprep сделает всю работу за нас). Попробуем разобраться, почему ОС Windows не находит контроллер диска на новом оборудовании, несмотря на то, что в случае «чистой» установки она этот контроллер видит. Дело в том, что на завершающем этапе установки Windows отключает (якобы для ускорения загрузки) все драйверы контроллеров дисков, на которых не расположено системных разделов. Получается как с сусликом в фильме «ДМБ»: система его не видит, но он есть.

    Включаем IDE-контроллеры: патч MergeIDE

    Для Windows XP существует известный патч MergeIDE, который, собственно, и включает в реестре драйверы IDE-устройств обратно, попутно копируя файлы драйверов из driver.cab в \system32\drivers. Проблема в том, что этот патч предназначен для запуска из-под Windows. Попробуем наложить его под Linux вручную. Пусть раздел с Windows XP смонтирован у нас в /mnt, тогда:
    cabextract -d /tmp/drivers "/mnt/WINDOWS/system32/Driver Cache/i386/driver.cab"
    cd /tmp/drivers
    cp atapi.sys intelide.sys pciide.sys pciidex.sys /mnt/WINDOWS/system32/drivers

    Для того, чтобы наложить патч MergeIDE.reg на реестр, нужно его отредактировать, убрав переводы строк с помощью символа «\» в последних строках файла, а затем воспользоваться утилитой reged с ключом -I
    reged -I /mnt/WINDOWS/system32/config/system HKEY_LOCAL_MACHINE\\SYSTEM ./MergeIDE.reg

    Быть может, придется так же исправить ключ CurrentControlSet, который бывает не доступен на незапущенной Windows, на ControlSet001/002.

    После этого можно перезагружаться. Надо сказать, в моей практике было несколько случаев, когда запустить образ на другом оборудовании не удавалось ни указанным выше способом, ни с помощью платных инструментов вроде Acronis Universal Restore.

    Посмотрев содержимое файла MergeIDE.reg можно увидеть, что вся магия запуска загрузочного драйвера состоит в добавлении записей в две ветви реестра — HKLM\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase и HKLM\SYSTEM\CurrentControlSet\Services.
    Ветвь CriticalDeviceDatabase содержит список устройств, необходимых для успешной загрузки системы и задает соответствие между классом устройства и той службой (драйвером), который за нее отвечает, а ветвь Services содержит параметры работы конкретных драйверов. Особенно интересен параметр Start — уровень запуска:
    0 — загрузка до старта ядра загрузчиком ОС
    1 — загрузка в момент инициализации ядра
    2 — загрузка в процессе запуска ОС
    3 — загрузка по требованию
    4 — не загружать
    очевидно, если у нашего драйвера уровень запуска будет отличаться от 0, то соответствующего контроллера в момент загрузки мы не увидим.

    MergeIDE.reg оперирует идентификатором класса 4d36e96a-e325-11ce-bfc1-08002be10318 — дисковые контроллеры ATA/ATAPI. Идентификаторы ClassGUID для различных классов устройств известны, их можно найти, например, здесь.
    Таким образом можно заставить систему запускать в момент загрузки ядра в память любой драйвер, например, для сетевой карты, если вы загружаетесь через AoE или iSCSI.

    Для Windows Vista/7 можно просто пройтись по ветви Services в поисках драйверов, содержащих в названии слово IDE, а потом изменить тип запуска (ключ Start) с «3-отложенный запуск» на «0-загружать в момент загрузки ядра». Для этих ОС есть еще один способ — находим в ветви Services записи msachi и iaStorV (универсальный драйвер AHCI и драйвер AHCI для устройств Intel) и так же изменяем тип запуска с «3» на «0», а потом идем в BIOS и меняем там тип контроллера дисков на AHCI. С Windows XP такой фокус, к сожалению, не прокатит, по причине отсутствия встроенного универсального драйвера AHCI.

    Загружаемся с любого IDE или SATA-контроллера: драйвер UniATA

    Поэтому обратим внимание на совершенно волшебный драйвер контроллера дисков UniATA от Александра Телятникова aka Alter. Этот драйвер инициализирует любой контроллер, считающий себя IDE- или AHCI-совместимым, а поэтому отлично подходит для наших целей. Порядок установки точно такой же — скопировать файл драйвера, прописаться в CriticalDeviceDatabase и в Services.

    wget http://alter.org.ua/ru/soft/win/uni_ata/BusMaster_v45d.tgz
    tar -xzvf ./BusMaster_v45d.tgz
    cp uniata.sys /mnt/WINDOWS/system32/drivers
    cp atactl.exe /mnt/WINDOWS/system32

    Теперь интегрируем в образ файл my_uniata_inst.reg следующего содержания

    UniATA_Inst.reg
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\pci#ven_8086&dev_2922]
    "ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
    "Service"="uniata"
    
    [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\UniATA]
    "Type"=dword:00000001
    "Start"=dword:00000000
    "ErrorControl"=dword:00000000
    "Group"="System Bus Extender"
    "ImagePath"=hex(2):53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,52,00,49,00,56,00,45,00,52,00,53,00,5c,00,75,00,6e,00,69,00,61,00,74,00,61,00,2e,00,73,00,79,00,73,00,00,00
    
    [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\UniATA\Parameters\PnpInterface]
    "1"=dword:0x00000000
    "5"=dword:0x00000000
    "SkipRaids"=dword:0x00000001

    Здесь ven_8086&dev_2922 — идентификатор установленного SATA-контроллера. Мы также считаем, что CurrentControlSet у нас нет и используем активную ветвь — ControlSet001, номер которой указан в HKLM\SYSTEM\Select\Current.
    reged -I /mnt/WINDOWS/system32/config/system HKEY_LOCAL_MACHINE\\SYSTEM ./my_uniata.reg

    Если такой способ не срабатывает — можно попробовать более «грязные» методы установки — с помощью файла uniata_w2k.reg из архива с драйверами или по инструкции на сайте разработчика.

    Еще пичалька
    Как оказалось, UniATA не может инициализировать виртуальный контроллер Intel 8086:2922, который эмулируется QEMU. «Соседний» виртуальный IDE-контроллер инициализируется замечательно. Чей это баг — QEMU или UniATA, не совсем понятно.

    Об инструментах


    Основной набор утилит можно найти в System Rescue CD. Сюда входят ms-sys, mkfs.btrfs, sfdisk, partclone и reged. Imagemount можно взять из пакета partclone-utils, просто распаковав его в корневую ФС systemresquecd. С пакетом qemu-utils дела обстоят сложнее. Я создавал в отдельном каталоге минимальную установку Debian с помощью debootstrap, затем делал туда chroot и уже потом ставил qemu-utils через apt-get. Перед запуском qemu-nbd нужно не забыть примонтировать /proc, /sys и /dev внутрь chroot'а.

    Заключение


    Скрытый текст
    Купите лучше Acronis Universal Restore
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 40

      +3
      Ни в коем случае не умаляю значение статьи, но перенос Windows с MBR на MBR это не космическая наука и обычно не составляет серьёзных проблем для человека имевшего с этим дело ещё во времена XP (с 2002 года на минутку). Сегодня всё чаще становятся актуальны GPT с загрузкой UEFI о которых приходится узнавать всё заново. И хотелось бы прочитать хороший материал на эту тему.
        +3
        Перенос UEFI — элементарно. Достаточно создать раздел с правильным ID и просто скопировать файлы. Никаких загрузчиков по смещению, ничего!
        0
        Очень круто, спасибо.
        Могу лишь добавить, что если система которую будем копировать, еще загружается, то можно в девайсменеджере поменять контроллер на стандартный. Но тогда и сиспреп можно сделать, да)
          0
          Недавно эксперементировал — был бэкап, сделанный штатными средствами windows 7, и ssd диск, куда его нужно было развернуть. Штатное средство разворачивания бэкапа выдавало разные ошибки — 0x80042402, 0x80042407 и тд.
          В итоге запустил установку свежей win 7, чтобы создался загрузочный раздел 100 мб, потом просто стер все файлы из основного раздела и разархивировал бэкап туда при помощи рабочей win 7. Все успешно заработало.
            +1
            Виндовый бекап вещь вообще малопредсказуемая.

            Средствами Win Server 2008 R2 регулярно делался бекап состояния на отдельный ЖД. В час «Х», когда он наконец понадобился, развернуть его на ту же машину не удалось. А на соседнюю, с совершенно другим железом — пожалуйста.
            Подумали-подумали и акронисом его на исходную тачку вернули…
              0
              (Актуально если бэкап делался с магнитного диска)
              Некоторые умолчальные настройки винды зависят от типа диска на который производилась установка (Установщик определяет, ssd или нет).
              К сожалению уверен не на 100%, но предполагаю что при смене диска настройки автоматически не обновятся.
              Возможно имеет смысл подправить некоторые ключи реестра. Помню только superfetch, но думаю про остальное можно найти.
                0
                у меня еще было что при переносе с обычного диска на Advanced Format полностью отвалились апдейты и еще пара сервисов. обновление интеловского драйвера, где как раз добавили поддержку AF — починило всё. оказывается до сих пор есть софт, завязаный на размер сектора…
              +6
              >Купите лучше Acronis Universal Restore
              Или скачайте Clonezilla
                0
                Во-первых я очень сомневаюсь, что Clonezilla решит проблемы с железом.
                Во-вторых она не сможет сделать пожатый образ, который можно монтировать на чтение и запись.
                  +1
                  2) А как тогда у меня клонзилла (не первой свежести, кажись от 2012 года ещё) умудрилась сделать ISO образ с хрюшей, офисом и ещё парой других софтин, который весил менее 1 гб?
                    0
                    Вообще интересный вопрос, как это получилось. Я думаю, что ключевой момент тут — ISO. C ntfs так уже не получится. Тем более так не получится с произвольной файловой системой.

                    Скажите, вы этот ISO образ для чего использовали? С диска грузились? Или разворачивали на другую машину, как в статье?
                0
                Да это же автор моего любимого комментария к моей первой публикации! Хорошая статья, спасибо!

                Единственное, что в случае переноса раздела с файловой системой ntfs лучше использовать не partclone, а ntfsclone. Это снимает проблемы связанные c imagemount и отсутствием partclone в некоторых дистрибутивах.

                И один маленький вопрос. В случае с Windows 7 надо проводить манипуляции с BCD? И есть где-нибудь мануал о том, как их делать?

                  +1
                  Многочисленные эксперименты показали, что нет. Для Windows Vista мануал тут support.microsoft.com/kb/927392/ru
                    0
                    Дополнил статью данными о сигнатуре диска, она тоже нужна для успешной загрузки (раздел «MBR, таблица разделов и сигнатура диска»).
                  0
                  В свое время, когда купил хард побольше в ноутбук, перетащил с мелкого на большой при помощи обычной dd. Затем сделал /fixmbr и, средствами самой windows, перераспределил дисковое пространство. Конечно, тут мне не пришлось задумываться об оборудовании (т.к. ноутбук тот же самый).
                    0
                    Кул стори бро!
                    А я вот недавно переносил MacOS с диска на SSD. Жуткая жесть. В Макоси своеобразные представления о прекрасном.
                      0
                      Что именно было жуткой жестью? Грузим в рекавери-мод, запускаем Disk Utility, выбираем Source, выбираем Destination, уходим пить кофе.
                        0
                        Это если можно одновременно подключить оба диска к машине. А если нельзя, то сначала надо снять образ на большую флешку. Потом загрузиться с линкуса и восстановить образ на SSD. Соответственно Disk Utility немного недоступна.

                        Но это не жуткая жесть, это ерунда. Жуткая жесть в деталях.

                        Например мы делаем всё, как вы сказали. Вопрос. Сделает ли MacOS нормальное выравнивание разделов на новом диске? Или оставит такое же, как на старом?

                        Далее. MacOS создаёт рекавери раздел после раздела с системой. То есть если ты хочешь поменять размер раздела с системой — надо двигать рекавери.

                        Рекавери вообще не показывается в Disk Utility кстати в связи с чем вопрос о том, зачем он после основного становится ещё более актуальным.

                        Кроме того Disk Utility не видит разницы между размеров файловой системы и размером раздела и единственный способ сделать их одинаковыми — запустить процедуру починки диска, которая падает с ошибкой, если попробовать осуществить её с того диска, с которого загружена система.

                        Вот как-то так.
                          0
                          У вас хакинтош? Если да, то ССЗБ, никто не обещал вам работу OS X на стороннем железе.

                          Когда я менял диск в компьютере (макбук про MD101), рекавери установилось само из интернета и размеры разделов можно было изменять произвольно. Процедура проверки и исправления ошибок у меня не падает, да.

                          Какое нафиг выравнивание, о чем вы? Я вообще не знаю, что и как оно выравнивает, it just works.
                            0
                            Да нет, не хакинтош, нормальный мак. Большой проблемой было то, что оба диска подключить к ноутбуку было нельзя. Поэтому с рекавери было вообще никак.

                            Процедура проверки диска и исправления ошибок падает не всегда, а если размер файловой системы не соответствует размеру раздела. И если при этом рекавери загружен с того диска, который проверяется.

                            А вот насчёт it just works это вопрос неоднозначный. Особенно учитывая, чем может кончиться для диска форматирование с неправильным выравниваем разделов. Может оно работает. А может работает только если разбиваешь диск наново, а не переносишь систему. Наверняка сказать нельзя. И то, что Disk Utility искажает реальную картину только усугубляет ситуацию.
                            0
                            Возможно, тут помог бы внешний корпус для hdd с интерфейсом usb? Во всяком случае, именно с ним я и перегонял данные с одного hdd на другой
                              0
                              Да, я тоже думаю, что сильно помог бы, но его, увы, не было.
                      +3
                      Мне постоянно приходится развёртывать WinXP и Win7 из-под Linux.
                      Для этого я подготавливаю два архива: winxp.tar.gz и win7.tar.gz:
                      1) сначала устанавливаю винду на какой-нибудь компьютер, настраиваю там все программы, которые будут нужны (mso, sumatrapdf и т.д.)
                      2) поправьте C:\boot.ini или C:\Boot\BCD (с помощью EasyBCD, например) так, чтобы винда умела загружаться с разных разделов. Например
                      boot.ini
                      [boot loader]
                      timeout=0
                      default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
                      [operating systems]
                      multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows XP disk 1 part 1" /noexecute=optin /fastdetect
                      multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows XP disk 1 part 2" /noexecute=optin /fastdetect
                      multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Windows XP disk 1 part 3" /noexecute=optin /fastdetect
                      multi(0)disk(0)rdisk(0)partition(4)\WINDOWS="Windows XP disk 1 part 4" /noexecute=optin /fastdetect
                      multi(0)disk(0)rdisk(0)partition(5)\WINDOWS="Windows XP disk 1 part 5" /noexecute=optin /fastdetect
                      multi(0)disk(0)rdisk(0)partition(6)\WINDOWS="Windows XP disk 1 part 6" /noexecute=optin /fastdetect
                      multi(0)disk(0)rdisk(1)partition(1)\WINDOWS="Windows XP disk 2 part 1" /noexecute=optin /fastdetect
                      multi(0)disk(0)rdisk(1)partition(2)\WINDOWS="Windows XP disk 2 part 2" /noexecute=optin /fastdetect
                      multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Microsoft Windows XP Professional Multiprocessor PC"  /
                      fastdetect /noexecute=alwaysoff /hal=halmacpi.dll /kernel=ntkrnlmp.exe
                      multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Microsoft Windows XP Professional"  /fastdetect /noexecute=alwaysoff /detecthal
                      multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Multiprocessor PC with MPS"  /fastdetect /noexecute=alwaysoff /hal=halmps.dll /kernel=ntkrnlmp.exe
                      


                      3) перезагружаюсь в защищённом режиме (Safe mode) — жать F8 перед загрузкой
                      4) запускаю редактор реестра Пуск-Выполнить, regedit, включаю все сервисы ide и sata правя параметры из HKLM\SYSTEM\CurrentControlSet\services\:
                      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\
                      поиск по Ctrl+F значения “SCSI Miniport”
                      изменить параметр "Start" с значения "3" на значение "0"
                      нажать F3 чтобы искать дальше,
                      исправить везде, где найдёт.
                      
                      В этой же ветке найти ещё три сервиса:
                      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\msahci
                      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\pciide
                      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\iaStorV
                      Значение "Start" у них тоже в 0 (ноль).
                      

                      5) запустить «Диспетчер оборудования» (Компьютер-Свойства-Оборудование),
                      по Del удалить всё что связано со специфичным оборудованием:
                      — чипсет (например Intel XXX и т.д.)
                      — диски (VIA SATA xxx и т.д.)
                      — видеоконтроллер (NVidia G520 и т.п.)
                      Короче, всё фирменное. Если предложит перезапуститься — не перезапускаться, сказать «Нет»
                      6) не закрывая Диспетчер задач, выдернуть шнур питания (!!!) из системника.
                      Если сделаете «Пуск-Завершение работы», то считайте зря старались, снова в Диспетчере задач придётся удалять.
                      Всё, теперь у вас есть Винда, отвязанная от железа
                      7) установить по соседству Linux, например так
                      8) загрузиться в линуксе, запаковать винду в архив, например так:
                      #!/bin/sh
                      cd /mnt/win
                      tar --ignore-failed-read -czvf ./Win7.tar.gz bootmgr \
                        config.sys XELDZ autoexec.bat BOOTSECT.BAK Boot Windows \
                        Recovery "Program Files" ProgramData "Documents and Settings" \
                        Users PerfLogs Progs AUTOEXEC.BAT CONFIG.SYS MSDOS.SYS \
                        Bootfont.bin NTDETECT.COM boot.ini IO.SYS ntldr
                      

                      записать архив на флэшку
                      9) на новой машине установить линукс, загрузиться в нём,
                      с помощью GParted создать раздел для винды (fat32 или NTFS)
                      10) примонтировать раздел и распаковать винду на него:
                      #!/bin/sh
                      mkdir /mnt/win
                      mount /dev/sda1 /mnt/win
                      cd /mnt/win
                      tar xvzf /media/FLASH/win7.tar.gz -C /mnt/win
                      

                      11) добавить винду в загрузчик Grub:
                      sudo update-grub
                      

                      12) загрузиться в винде (я первый раз гружусь в защищённом по F8),
                      подождать 20 мин пока винда «подхватит» устройства,
                      если предложит перезагружаться — отказываться
                      13) загрузиться в нормальном режиме,
                      подправить boot.ini или Boot/BCD (если надо)
                      14) скачать и доустановить недостающие дрова. Всё!
                      15) если винду съели вирусы или она упала, то снова из линукса развернуть архив.

                      Если освоите методику, любая винда со всем софтом ставится за 5 минут :) (плюс установка дров — пол часа, но от этого уже никуда не деться).
                        0
                        Ещё момент. Порою grub неправильно определяет параметры загрузки и тогда винда не грузится. В этом случае строчку:
                        chainloader +1
                        

                        нужно заменить для WinXP на:
                        ntldr /ntldr
                        

                        а для Win7 на:
                        ntldr /bootmgr
                        


                        К слову сказать, Linux я устанавливаю из архива аналогично примерно таким скриптом:
                        install.sh
                        #!/bin/sh
                        
                        INST_DEV=/dev/sdb1
                        INST_MNT=/mnt/vdorogu
                        #INST_MNT=/media/VDOROGU
                        #INST_MNT=/media/042343232
                        
                        BOOT_DISK=/dev/sda
                        
                        LIN_DEV=/dev/sda2
                        LIN_MNT=/mnt/root
                        
                        WIN_DEV=/dev/sda1
                        WIN_MNT=/mnt/win
                        
                        
                        ## For Ext4
                        #tune2fs -o journal_data_writeback $LIN_DEV
                        #tune2fs -O ^has_journal $LIN_DEV
                        #e2fsck -f $LIN_DEV
                        
                        ## === Mount parts
                        
                        #mkdir $INST_MNT
                        #mount $INST_DEV $INST_MNT
                        #mkdir $LIN_MNT
                        #mount $LIN_DEV $LIN_MNT
                        #mkdir $WIN_MNT
                        #mount $WIN_DEV $WIN_MNT
                        
                        ## === Install Linux
                        
                        cd $INST_MNT
                        
                        tar xvzfk ./lubuntu1204.tar.gz -C $LIN_MNT
                        
                        cd $LIN_MNT
                        
                        mkdir cdrom
                        mkdir dev
                        mkdir media
                        mkdir mnt
                        mkdir mnt/win
                        mkdir proc
                        mkdir sys
                        mkdir tmp
                        
                        chmod 777 tmp
                        chmod 777 home
                        
                        grub-install --root-directory=$LIN_MNT $BOOT_DISK
                        mount --bind /dev $LIN_MNT/dev
                        mount --bind /proc $LIN_MNT/proc
                        mount --bind /sys $LIN_MNT/sys
                        
                        chroot $LIN_MNT grub-install --recheck --no-floppy $BOOT_DISK
                        chroot $LIN_MNT update-grub
                        
                        umount $LIN_MNT/dev
                        umount $LIN_MNT/proc
                        umount $LIN_MNT/sys
                        
                        ## === Install Windows
                        
                        cd $INST_MNT
                        
                        #tar xvzf ./iso/winxp.tar.gz -C $WIN_MNT
                        
                        # === Edit fstab
                        
                        nano $LIN_MNT/etc/fstab
                        

                          0
                          Ещё пару замечаний.

                          Размеры архивов ОС с популярным софтом получаются такие:
                          1) winxp.tar.gz — 1,6Гб
                          2) win7.tar.gz — 3,6Гб
                          3) lubuntu12.04.tar.gz — 1Гб

                          Систему по умолчанию в линуксе (lubuntu) можно изменить в файле:
                          /etc/default/grub, параметр задать например так GRUB_DEFAULT=5.
                            0
                            И ещё :)

                            Во-первых, вверху под «Диспетчер оборудования» и «Диспетчер задач» понимать всегда «Диспетчер устройств», ну оговорится я, не надо кипятиться. Смысл-то всё равно был понятен.

                            Во-вторых, не показал скрипт, к-м пакую линукс. Запускаю под root'ом tar_linux.sh:
                            #!/bin/sh
                            cd /
                            tar --ignore-failed-read --exclude=var/cache/apt -czvf lubuntu1204.tgz bin boot etc home lib opt root run sbin usr var > tar_root.log
                            

                            Ну и в третьих, загрузку винды через grub править в конфиге:
                            /boot/grub/grub.cfg
                            0
                            Зачем делать копирование MBR?
                            Не проще в консоли установки Windows Vista/7/8 использовать команду active с утилиты diskpart?
                            Команда прописывает загрузчик на имя файла bootmgr, для XP надо лишь переименовать ntldr в bootmgr.
                            Повторяюсь.
                              0
                              Для XP, Server 2003 и прочего legacy — самое то.
                              Дальше (≥Vista, Server 2008) удобнее, IMHO, штатные средства: sysprep /oobe /generalize в ОС, затем из WinPE захватить образ через DISM. Начиная с 7 / Server 2008R2 в образ можно драйверы и обновления добавлять. Но это всё относится только к переносу голой ОС (используем для автоматизации развёртывания и всяких там v2p). Для бэкапов DISM/imagex использовать нельзя.
                                0
                                Если заранее подготовить диск (создать раздел(ы)), то можно установить Win7/8 и без дополнительного 100-мегабайтного boot-раздела, просто в этом случае весь «boot» будет находиться на системном.
                                  0
                                  Чтобы ускорить развертывание есть:
                                  1) Установка по сети Windows (PXE)
                                  2) Установка по сети Windows (Windows AIK)
                                  3) Загрузка по сети live-CD с Linux
                                  4) Загрузка по сети live-CD с Windows
                                    0
                                    Статья интересная, спасибо.
                                    Однако сейчас даже корпораты покупают Windows 8, не говоря о ноутбуках пользователей. UEFI и GPT.
                                      0
                                      По статистике из Википедии на октябрь 2014:
                                      Win7 + WinXP = 70.23%
                                      Win8 + Win8.1 = 16.80%

                                      Parted поддерживает GPT, вроде и sfdisk — тоже.
                                      0
                                      А я по старинке пару раз юзал мультизагрузочную флешку с рекавери от Win7 и LiveCD с Ubuntu и dd. Перед клонированием через dd применял sysprep, а на другой машине вычищал от старых хвостов, разворачивал образ с помощью Ubuntu, а потом с рекавери диска восстанавливал загрузчик. Хотя да, тут присутствует в цепочке windows, но геморроя на порядок меньше.
                                      • UFO just landed and posted this here
                                          0
                                          Тем, что бесплатен и чрезвычайно гибок. Плюс способов загрузить линукс больше, чем способов загрузить акронис или нортон. Но бухгалтерам действительно стоит посмотреть в их сторону.
                                          • UFO just landed and posted this here
                                              0
                                              Есть инструмент, который бесплатно решает круг задач. Что может быть практичнее?
                                              • UFO just landed and posted this here
                                            0
                                            Мне пришлось разбираться в этом, когда потребовалось преобразовать энное количество машин из физических в виртуальные. Штатные конвертеры не всегда срабатывают, да и Acronis, бывает, промахивается, а заказчик требует, чтобы все работало в виртуальной среде.
                                            • UFO just landed and posted this here

                                          Only users with full accounts can post comments. Log in, please.