Установка Windows 7 на USB storage и/или виртуальный диск VHDИсточник: habrahabr
В данной статье хочу рассмотреть вопросы по установке на внешний USB-накопитель не обычного набора инструментов реанимации, а полноценной рабочей ОС, которую можно носить с собой. И если Linux ставится из коробки на любое устройство и без проблем работает, то Windows и не ставится, и не работает. Также эта статья может быть полезена при загрузке Windows на новом оборудовании (при обновлении материнской платы и т.д.). Изначально было 2 противоречивых требования души:"всё своё ношу с собой" и "не хочу быть нагруженным", что в итоге вылилось в установку Ubuntu на внешний диск. Всё было замечательно, но чувствовалась какая-то незавершённость. И решил я установить Windows 7 туда же. Но появились проблемы:
И они были успешно решены. Нам потребуются
Поехали В настройках виртуальной машины подключаем к CD-ROM Windows 7 и добавляем HDD: "Use physical disk" -> выбрать диск, соответствующий USB (скорее всего, он последний). Стоит отметить, что другие диски на данном этапе лучше удалить из виртуальной машины. Загружаемся с CD и попадаем в установщик. Установка Сейчас самое время указать установщику VHD. Командой Shift+F10 открывается консоль. Допустим, мы хотим установить Windows на C:\win7.vhd: diskpart create vdisk file=C:\win7.vhd type=fixed maximum=25000 select vdisk file=C:\win7.vhd attach vdisk create partition primary list volume Убеждаемся, что имеем 3 volume с Fs: UDF, NTFS, RAW. Ну или больше, если на диске есть другие разделы. Теперь можно уходить с консоли и перейти к непосредственной установке. При выборе назначения установки, мы должны увидеть Disk 1 Partition 1, при выборе которого Windows 7 заботливо предупредит о возможных проблемах, но продолжить всё-таки разрешит. Настройка для запуска с USB С особенностями загрузки Windows 7 я особо не знаком, но вкратце суть примерно такая: загрузчик читает ядро и самые важные драйвера (к которым USB не относится) и передаёт управление ядру, которое должно прочитать всё остальное, но в нашем случае оно ничего не найдёт. Соответственно, сам напрашивается вариант: надо сказать загрузчику, что USB критически важен и надо бы сначала его загрузить, а потом передавать управление. И, что характерно, в Microsoft дали такие возможности: надо в реестре по адресам [HKLM/System/CurrentControlSet/services/usb*] установить значение ключа Start в 0. Самым неприятным оказывается то, что периодически это поле само сбрасывается в 3, судя по всему при появлении новых устройств. Но и это не проблема. Существует 2 возможных решения (суть которых, естественно, совпадает): usbbotfix.bat - мне понравился больше, ибо командный файл, который легко правится. Взят отсюда и мною добавлены улучшения: отключение создания имён 8.3, отключение обновления времени последнего обращения (ну зачем нам лишние операции записи) и запрет удаления страниц с исполняемым кодом, дабы случайно не сбросился в своп код драйвера USB (вполне возможно, что это не обязательно, но лучше перестраховаться). Этот файл также скажет планировщику вызывать его при Event 20003 - т.е. при добавлении новых устройств. Содержимое файла такое: @echo off if "%1"=="fix" goto :fix
rem -- install task copy /y "%~f0" "%SystemRoot%\system32\usbbootfix.bat" SCHTASKS /Create /RU SYSTEM /SC ONEVENT /MO "*[System[Provider[@Name='Microsoft-Windows-UserPnp'] and EventID=20003]]" /EC System /TN USBBootFix /TR "'%SystemRoot%\system32\usbbootfix.bat' fix" /F rem -- apply other settings fsutil behavior set disablelastaccess 1 fsutil behavior set disable8dot3 1 reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v DisablePagingExecutive /t REG_DWORD /d 1 /f reg add HKLM\SYSTEM\CurrentControlSet\services\pciide /v Start /t REG_DWORD /d 0x0 /f reg add HKLM\SYSTEM\CurrentControlSet\services\msahci /v Start /t REG_DWORD /d 0x0 /f reg add HKLM\SYSTEM\CurrentControlSet\services\intelide /v Start /t REG_DWORD /d 0x0 /f reg add HKLM\SYSTEM\CurrentControlSet\services\viaide /v Start /t REG_DWORD /d 0x0 /f rem -- run :fix once after install
:fix call :fixservice usbehci "Boot Bus Extender" call :fixservice usbohci "Boot Bus Extender" call :fixservice usbuhci "Boot Bus Extender" call :fixservice usbhub "System Bus Extender" call :fixservice usbstor "SCSI miniport" goto :eof
:fixservice setlocal set Start= set Group= for /f "skip=2 tokens=1,2,*" %%I in ('reg query HKLM\SYSTEM\CurrentControlSet\services\%~1') do ( if "%%I"=="Start" set Start=%%K if "%%I"=="Group" set Group=%%K ) if not "%Start%"=="0x0" reg add HKLM\SYSTEM\CurrentControlSet\services\%~1 /v Start /t REG_DWORD /d 0x0 /f if not "%Group%"=="%~2" reg add HKLM\SYSTEM\CurrentControlSet\services\%~1 /v Group /t REG_SZ /d "%~2" /f endlocal goto :eof UsbBootWatcher.exe - проверенное временем решение, устанавливается как сервис и вызывается при изменении выбранных нами ключей реестра. Можно взять тут. Если загрузка системы не происходит В случае, если мы уже пришли на новое место и там оказалось, что ОС запускаться не хочет, придётся чинить тем, что есть: раздел загрузки Repair, в который Windows скорее всего сам и предложит загрузиться после неудачной попытки (если не предложит - перед загрузкой нажимать F8). Затем открываем "Command Prompt" (в случае неудавшегося автоматического восстановления перед этим нажимаем "View advanced options"). Запускаем редактор реестра командой "regedit". Стоит отметить, что это - реестр системы восстановления. Подключаем нужный реестр (точнее, улей). Нас интересует "[HKLM/SYSTEM/]", он хранится в файле %WINDIR%\System32\Config\System. Для этого наводим фокус на "HKEY_LOCAL_MACHINE", в меню выбираем File -> Load Hive -> нужный файл -> Key name: "nn" (в случае установки на VHD, необходимо его в подключить в консоли). Загрузка с USB Т.к. перезапускаться лишний раз всем лень, проверимся мы снова в виртуальной машине. Выключаем её, в настройках удаляем все HDD, запускаемся, перебрасываем USB-HDD в виртуалку и… Понимаем, что наш диск не видно. Но ведь в списке того, что требуется не была упомянута поддержка BIOS'ом загрузки с USB. Теперь мы можем перенести внешний диск на любую другую реальную машину и запуститься. Вот и всё. Интересны Ваши предложения по практическому применению. Краткое резюме
Важные замечания/нерешённые проблемы
|