5 февраля 2013 г.

Установка Windows 8 с флешки
[Install Windows 8 from USB stick]


    В данной статье будет показано как добавить на загрузочную Grub4Dos флешку установку  Windows 8 (x86 / x64). Дистрибутивы так же хранятся на флешке в неизменном (почти) виде в ISO-образах. Их может быть столько - насколько хватит пространства флешки. Образы также мапятся с помощью драйвера FiraDisk.
    Решил выделить материал в отдельную статью, хотя способ установки 32-битной версии ничем особенным не отличается от установки Windows Vista/7. А вот к 64-битной версии есть небольшое дополнение, заключающееся в правке BCD для возможности добавления не подписанного драйвера FiraDisk (со временем, надеемся, автор всё же получит необходимые сертификаты).
    А теперь обо всем по порядку.


Установка Windows 8 (x86), используя драйвер FiraDisk.

    Примечание: данный способ применим для всех редакций Windows 8 (x86). Работоспособность сборок народных умельцев не гарантируется.

1. Создать папку Boot в корне флешки и скинуть в нее установочный образ Windows 8 (WIN8x86.iso)
    Примечание:
    1) Образ должен быть дефрагментирован! Иначе получите ошибку:
    Error 60: File for drive emulation must be in one contiguous disk area.
    2) Если образ больше 4ГБ, то ФС на флешке должна быть NTFS.

2. Скинуть в папку Boot файл FiraDisk.cmd (sfx-архив, содержащий скрипт установки и файлы драйвера).

3. Скинуть в корень флешки файл AutoUnattend.xml (содержит команду найти и запустить \Boot\FiraDisk.cmd).

4. Добавить следующий пункт в menu.lst:
title Windows 8 (x86)
set MYISO=WIN8x86.iso
map --mem (md)0x800+4 (99)
map /Boot/%MYISO% (0xff)
checkrange 0x80 read 0x8280 && map (hd0) (hd1)
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
map --hook
write (99) [FiraDisk]\nStartOptions=cdrom,vmem=find:/Boot/%MYISO%;\n\0
chainloader (0xff)/BOOTMGR || chainloader (0xff)
5. Процесс подготовки завершен. Можете устанавливать Windows.

    Примечание:
    1) Во время установки (в самом начале) будет установлен драйвер FiraDisk. Вы будете наблюдать черное окно с процессом установки драйвера (на скрине, окно из установки Win7, но суть та же). 
    Если оно не появилось, то это значит, что образ скорей всего не будет подхвачен, и вы можете увидеть следующее окно после выбора языков. 
    Тогда необходимо из Среды Установки (WinPE) вручную запустить установку драйвера командой E:\Boot\FiraDisk.cmd (букву диска подбираем сами) из консоли (консоль вызывается сочетанием SHIFT + F10).
    2) AutoUnattend.xml не подхватывается с USB-HDD и HDD, и, следовательно, не запускается FiraDisk.cmd. Решается ручным запуском FiraDisk.cmd или интеграцией его в дистрибутив. Как интегрировать в дистрибутив - смотрите в следующих статьях.

Установка Windows 8 (x64), используя драйвер FiraDisk.

    Примечание: данный способ применим для всех редакций Windows 8 (x64). Только для 64-разрядных версий! Для 32-разрядной - этого не требуется, т.е. см. выше. Работоспособность сборок народных умельцев не гарантируется. Для подготовки требуется Windows Vista и выше.

1. Подготавливаем дистрибутив:
    Примечание:
    Также этот пункт можете выполнить с помощью данного скрипта. Инструкция внутри. 
1.1. Достаем из ISO-образа дистрибутива файл bcd (находится по следующему пути: /boot/bcd). Обычно для этого использую UltaISO. Сохраняем в какой-нибудь папке.
1.2. Запускаем командную строку от имени администратора.
1.3. Прописываем в ней следующую команду:
bcdedit /store "X:\Ваш_путь_к_bcd\bcd" /set {default} TESTSIGNING ON
где "X:\Ваш_путь_к_bcd\bcd" - пусть до bcd (не обязательно использовать абсолютный путь).
У меня было так:

1.4. Заталкиваем измененный файл bcd обратно в ISO-образ взамен существующего. UltraISO в помощь.

2. Создаем папку Boot в корне флешки и скидываем в нее модифицированный установочный образ Windows 8 (WIN8x64.iso)
    Примечание:
    1) Образ должен быть дефрагментирован! Иначе получите ошибку:
    Error 60: File for drive emulation must be in one contiguous disk area.
    2) Если образ больше 4ГБ, то ФС на флешке должна быть NTFS.

3. Скинуть в папку Boot файл FiraDisk.cmd (sfx-архив, содержащий скрипт установки и файлы драйвера).

4. Скинуть в корень флешки файл AutoUnattend.xml (содержит команду найти и запустить \Boot\FiraDisk.cmd).

5. Добавить следующий пункт в menu.lst:
title Windows 8 (x64, Rus)
set MYISO=WIN8x64.iso
map --mem (md)0x800+4 (99)
map /Boot/%MYISO% (0xff)
checkrange 0x80 read 0x8280 && map (hd0) (hd1)
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
map --hook
write (99) [FiraDisk]\nStartOptions=cdrom,vmem=find:/Boot/%MYISO%;\n\0
chainloader (0xff)/BOOTMGR || chainloader (0xff)
5. Процесс подготовки завершен. Можете устанавливать Windows.

    Примечание:
    1) Все тоже самое, что и для Win8 x86.

    Полный готовый комплект для установки Windows XP/Vista/7/8 - брать здесь.

Используемый материал:
Сообщение Atlant'a на greenflash.su
Сообщение Cha-Cha на greenflash.su
43 - Install Windows 8, Server 2012, Win 7, 2K8 & Vista from multiple ISO files on the same Flash drive.
GRUB4DOS; GRUB Legacy (<= 0.97)
Установка windows xp с мультизагрузочной флешки Установка Windows 7 и Windows XP с флешки
Два дистрибутива Windows 7 на одной флешке

При копировании статьи просьба указывать источник и автора.
С уважением, GRomR1.

17 комментариев:

  1. Спасибо автору за идею и упрощение. Однако есть некоторые замечания по поводу 64-битной версии:
    Для использования 64-битной версии файл AutoUnattend.xml не работает, т.к. в разделе где параметр processorArchitecture="amd64" - ссылка на какой-то другой исполняемый "LOADISO.CMD" <= поправьте пожалуйста.

    У меня есть предложение по упрощению загрузки 64-битной системы без правки iso-образа во внешнем редакторе, все происходит с помощью grub4dos:

    ============================================
    title Windows 8 Setup (x64) - DVD (Russian)
    set MYISO=ru_windows_8_x64_dvd_915419.iso
    map --mem (md)0x800+4 (99)
    map /Boot/%MYISO% (0xff)
    checkrange 0x80 read 0x8280 && map (hd0) (hd1)
    checkrange 0x80 read 0x8280 && map (hd1) (hd0)
    map --hook
    write (99) [FiraDisk]\nStartOptions=cdrom,vmem=find:/Boot/%MYISO%;\n\0
    find --set-root /Boot/bcd_new
    dd if=()/Boot/bcd_new of=(0xff) seek=29864
    chainloader (0xff)/BOOTMGR || chainloader (0xff)
    ============================================

    Как Вы понимаете seek=29864 справедливо только для ru_windows_8_x64_dvd_915419.iso(MD5: 5cc9d59523fdaa96dca5fd8bbae808a3) образа.
    HEX 0x0095000(15290368/512=29864)
    Для других редакций, файл bcd может быть тем же, однако в образе необходимо искать соответствующее ему seek(смещение).
    Плюс т.к. мы не мапим в память, то изменение/замена bcd происходит прямо на флешке - образ при этом функционально работает (мы не изменяем его размер или целостность, происходит замена 256кб на другие 256кб этого же bcd файла). С таким же успехом можно возвратить в образ оригинальный bcd файл (если мы его предварительно сохранили).
    В случае если мы не хотим изменять оригинальный образ, можно просто мапить в память - измененяя параметр "map /Boot/%MYISO% (0xff)" на параметр "map --mem /Boot/%MYISO% (0xff)" - все действия с файлом bcd будут в памяти.
    Спасибо и удачи!

    ОтветитьУдалить
  2. Подтверждаю - для x64 редации ничего не работает - так как ссылка в AutoUnattend.xml ведет на неизвестный и вообще отсутствующий файл LOADISO.CMD

    ОтветитьУдалить
    Ответы
    1. В самое ближайшее время собираюсь заняться и все поправить.
      Спасибо, что отписались о возникшей ошибке.

      Удалить
  3. Заменил в AutoUnattend.xml файле %i:\fira\LOADISO.CMD cmd /k %i:\fira\LOADISO.CMD на %i:\Boot\FiraDisk.cmd cmd /k %i:\Boot\FiraDisk.cmd и все заработало :)
    И было бы неплохо в статью включить способ без изменения оригинального iso файла предложенный Dmytro16.

    ОтветитьУдалить
    Ответы
    1. Исправил ошибки в файле AutoUnattend.xml.
      Способ от Dmytro интересен и довольно прост, но не всегда подходит.
      Как он уже упомянул для каждого образа свои смещения. А я старался использовать что-то более распространенное и подходящее большинству.

      Удалить
    2. Спасибо! :)
      Кстати если кому надо - образы винды 8.1 я беру тут http://philka.ru/forum/topic/45610-windows-81-originalnye-obrazy-microsoft-msdn-russian-ot-08042014/

      Удалить
  4. Простите, хотел спроситью Почему при загрузке выскакивает сообщение, что не найден файл /source/install.wim? Спасибо!

    ОтветитьУдалить
    Ответы
    1. Без понятия. Когда выскакивает? После чего? Что делали с образом?

      Удалить
    2. Делвл то, что указано в данной статье. При чём сообщение выскакивает не постоянно, бывает всё работает, но чаще выскакивает сообщение о том, что не найден файл install.wim, и установка сбрасывается. Не могу понять в чём причина. Вчера сделал то, что указано для Windows 8 x64, и всё заработало. Но сомневаюсь, что это выход. Не вижу связи между отсутствием файла install.wim и редактированием BCD.

      Удалить
    3. а если попробовать интегрировать FiraDisk в дистрибутив... об этом писал тут:
      http://gromr1.blogspot.ru/2013/02/install-windows-vista-7-8-from-usb-modify-distr.html

      кстати, дистрибутив то оригинальный от MS?

      Удалить
  5. Только что пробовал запускать инсталляцию Windows 7 x86 и x64 c тем, что предлагалосьсделать для Windows 8 x64. Всё работает. Хотя в дальнейшем могут быть проблемы. Мне так кажется потому, что не улавливаю связи между отсутствием файла install.wim и редактированием BCD с помощью "modify_WIN8x64".

    ОтветитьУдалить
  6. А FiraDisk интегрирован в дистрибутив изначально.

    ОтветитьУдалить
  7. Исправь пожалуйста ссылки на скачивание FiraDisk и 2 ой файл. Спасибо, у тебя очен интересный и полезный блог.

    ОтветитьУдалить
  8. to GRomR1
    Загрузка ISO из виртуального раздела.
    хак-не-хак, не знаю...
    Но хотели универсальное решение, получите))
    Оригинал - http://www.rmprepusb.com/tutorials/autoiso
    На русском - http://puhpol.ru/viewtopic.php?id=291

    Конфигурация для меню без титла - чтобы прошла проверка флешки на наличие раздела, также если тип раздела равен 0x00 (отсутствует) - то обнуляем (если флешка ранее нами использовалась данным методом)...
    Тут же понятное дело ориентировка только на тип раздела 0x00 - (не может быть разделом вашего HDD, разве что - не созданный раздел).

    =======================================
    #As this method relies on a blank, unused 4th entry in the boot drive's partition table, you
    #should add these lines to the top of your main menu.lst file to check that it is safe to use:
    # make empty table entry in 4th position in ptn table before running any menu entry
    #last digit !result!
    #parttype (%@root:~1,3%,3)
    #set check=%@retval%
    #filter hex val
    parttype (%@root:~1,3%,3) | set check=
    set check=%check:~-5,4%
    if "%check%"=="" echo Error 22: No such partition! && configfile
    if "%check%"=="0x00" partnew (%@root:~1,3%,3) 0 0 0 && echo NOTE: Unused PTN table entry 4 on drive (%@root:~1,3%,3) was successfully cleaned! && pause --wait=1
    if not "%check%"=="0x00" echo WARNING: PTN TABLE ENTRY 4 (%check%) IS ALREADY IN USE! && pause
    =======================================

    Тут уже меню, также проверка на всякий случай и создание раздела (hdX,3) с типом 0x00 и размером/старт сектор/последний сектор = нашему ISO образу на флешке...
    Например если не обнулять (hdX,3) раздел флешки, то в Winhex'е можно свободно открыть/или удалить (hdX,3) раздел, где сам раздел является своеобразной ссылкой на ISO образ на том же диске.

    =======================================
    title Test3
    #USER SET variable for /path/isofile
    set ISO=/iso/kali-linux-1.0.8-i386.iso
    #AUTODETECT variable ISORoot for device with ISO-file, i.e. (hd0,0)
    find --set-root --devices=h %ISO% && call set ISORoot=%@root^%
    #AUTODETECT variable UUID for root device with ISO-file
    uuid %ISORoot% && call set UUID=%^?%
    #last digit !result!
    #parttype (%@root:~1,3%,3)
    #set check=%@retval%
    #if not %@retval%==0 echo Error! && pause && configure
    #filter hex val
    parttype (%@root:~1,3%,3) | set check=
    set check=%check:~-5,4%
    if "%check%"=="" echo Error 22: No such partition! && pause && configfile
    if not "%check%"=="0x00" echo WARNING: PTN TABLE ENTRY 4 (%check%) IS ALREADY IN USE! && pause && configfile
    partnew (%@root:~1,3%,3) 0 %ISO%
    map %ISO% (0xff)
    checkrange 0x80 read 0x8280 && map (hd0) (hd1)
    checkrange 0x80 read 0x8280 && map (hd1) (hd0)
    map --hook
    chainloader (0xff)
    boot
    =======================================

    http://www.rmprepusb.com/tutorials/xbmcbuntu#TOC-Try-xbmcbuntu-directly-from-an-ISO-
    http://www.rmprepusb.com/tutorials/tails#TOC-More-Examples

    ОтветитьУдалить
  9. спасибо автору за проделанную работу, но по прошествии дня могу смело сказать что скрипт на добавление FiraDisk.cmd запускается при добавлении его в образ, но при этом вываливается новая проблема с файлом install.wim как на 7ке так и на 8.1

    спасибо за потраченное время

    ОтветитьУдалить
  10. Доброго времяни суток, всё сделал как в описании, но появился один нюанс а именно:
    Windows не удалось собрать данные для [OSImage] поскольку указанный файл образа X:\sources\install.wim не существует.
    При этом Fira disk стартует, образ монтируется........
    на USB 2.0 проблема пропадает, а вот на 3.0 появляется, проверил через DiskPart определяется ли флешка в среде установки, оказалось что нет... Драйвера USB 3.0 в образ интегрировал, с помощью dism...... Подскажите где этот подводный камень или я очевидного не вижу... Заранее спасибо за ответ!

    ОтветитьУдалить
    Ответы
    1. Здравствуйте.
      Не знаю ответ на этот вопрос.
      Могу разве, что посоветовать поискать решение на форуме http://forum.ru-board.com/topic.cgi?forum=5&topic=48335&start=460
      Или спросить там.
      Возможно мой способ уже устарел. Я давно не слежу за этой темой.

      Удалить