[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 1 месяц
  • Сообщений: 842
  • Репутация:40

    [+] [-]
VHDChild позволяет массово создать VHD(X) дочек и добавить их для Native Boot загрузки в системный загрузчик или другой том для BIOS и\или UEFI. Параметры и их описание находятся в файле настроек Setting.ini. Особо не тестировал..
Перед запуском проконтролируйте, чтобы все VHD(X) были размонтированы.
Имена дочек и название пункта загрузки формируется из имени родителя + суффикс имени дочек + порядковый номер 01, 02 и т.д.
Если имя уже занято, то порядковый номер будет 11, 12 и т.д., если заняты и эти, то 21, 22 и т.д. И так до упора..
Предупреждение. Прописывать для загрузки родительский VHD - это очень плохая идея. После загрузки его - потеряете всех дочек! То есть принцип такой - загрузили родителя, настроили, затем удалили его пункт загрузки и прописали дочек. После этого родителя не трогать и монтировать можно только для чтения ибо дочки откажутся от него.
Совет. Суффикс имени для будущих дочек лучше не менять ибо он используется для фильтрации чтобы отделить родителей от дочек. Ну или поменять на что-то редкое, например _child.
Также крайне нежелательно использовать кириллицу в пути к папке с VHD(X) и именах VHD(X).
Лог изменений
v1.2
Устранена неадекватная реакция AV ESET-NOD32.
Bcdboot, bcdedit и bootsect заменены на версии из ADK Windows 10, version 1803.
Добавлены параметры SubFolders, TypeMenu и TimeOut. Подробнее см. в Setting.ini.
Устранена ошибка при кириллическом имени VHD(X).
Устранена ошибка парсинга пути.
По мелочам.
v1.1
Исправлена критическая ошибка.
v1.0
Что-то работает.

Сделан по просьбе Hunter23071985, просьбу можно посмотреть под спойлером.
Вижу примерно так: на PC есть минимум одна установленная ОС, новее XP.
В корне какого-то диска есть папка [OS], внутри - произвольное количество vhd с разными версиями Windows.
От каждого родительского vhd надо создать произвольное количество разностных дисков от нуля до бесконечности.
Если в настройках CMD указано создать 2 разностных диска и в папке обнаружен W10.vhd, то надо создать W10-d01.vhd и W10-d02.vhd.
Если также обнаружен W08.vhd, надо создать W08-d01.vhd и W08-d02.vhd.
Все эти VHD надо прописать в D:\[BOOT]\BCD.
Идеально (но не обязательно) сделать 3 варианта: прописать только родительские, только разностные и все найденные.
Название записи в BCD - по названию файла без расширения, порядок записей - по имени файла в продолжение существующих пунктов BCD.
Вложение


Последний раз редактировалось: dialmak (2018-08-21 06:08), всего редактировалось 21 раз(а)

[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 1 месяц
  • Сообщений: 842
  • Репутация:40

    [+] [-]
Исправил критичную ошибку..
Перезалил исправленную версию.

[Цитировать]

    Hunter23071985
  • 874
  • Стаж: 8 лет 10 месяцев
  • Сообщений: 152
  • Репутация:6

    [+] [-]
Лог на старом ноутбуке с Win8.1, залил на диск 10 VHD от XP до 10.
Первые проблемы:
1) не работает с NumberChild=0
(если VHD стационарные, лучше сохранить дрова и настройки внутри, потом прописать diff'ы и в них работать)
2) в логе много позиций Warning и Error
3) в меню после перезагрузки всего 6 ОС, включая установленную
4) в список попала Vista: она, как и XP, из VHD просто так не загрузится.
Для неё у меня в BCD в качестве загрузчика указан \[BOOT]\OldOS\grldr_Vista:
call Fn.5 0 128
debug 0
default 0
timeout 0
configfile /[BOOT]/OldOS/menu_Vista.lst
clear

Содержимое menu_Vista.lst:
map /[BOOT]/OldOS/NTBOOT.iso (0xff)
map --hook
root (0xff)
command /NTBOOT VBOOT=/[OS]/Win06_x32-d1.vhd

Нужные файлы могу прикрепить. Можно добавить поддержку XP и Vista в скрипт? Ими ещё часто пользуются, в т.ч. для тестов...
Чтобы не плодить посты, буду обновлять этот по мере тестирования...


Последний раз редактировалось: Hunter23071985 (2018-08-20 15:51), всего редактировалось 2 раз(а)

[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 1 месяц
  • Сообщений: 842
  • Репутация:40

    [+] [-]
Hunter23071985
не работает с NumberChild=0
И не должно, не совсем понимаю какая проблема. Если NumberChild=0, то прога не нужна. Если же не нужна конкретная доця - просто удалишь потом.
в логе много позиций Warning и Error
Если у тебя все в порядке - должно быть так

Если же видишь такое, то по логу видно куда копать.
VHD "Win09_x32_d01.vhd" was successfully created, attached and assigned letter I:.
BFSVC Error: Failed to open file I:\windows\boot\Resources\BOOTRES.DLL for read! Error code = 0x780
BFSVC Warning: Failed to determine source OS version.
BFSVC Error: Failed to open file I:\windows\boot\PCAT\bootmgr for read! Error code = 0x780
BFSVC Error: Failed to validate boot manager checksum (I:\windows\boot\PCAT\bootmgr)! Error code = 0xc1
VHD "Win09_x32_d01.vhd" was successfully detached.
В Setting.ini в конце как раз для таких случаев написано предупреждение. Как вариант выхода - юзать что-то другое или модифицировать под себя. А ещё лучше не вырезать нужные файлы из системы.
в меню после перезагрузки всего 6 ОС, включая установленную
Ну логично, я насчитал -5
Можно добавить поддержку XP и Vista в скрипт?
А разве доця не создается? Другое дело, что эти ОС грузятся по другому, хз, по моему там вообще такого понятия как дифф диск для загрузки нет. Короче это невозможно никак, да и имхо слава богу..

[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 1 месяц
  • Сообщений: 842
  • Репутация:40

    [+] [-]
З.Ы. Там в большинстве случаев не найден bootmgr, просто нужно положить его в \windows\boot\PCAT\ в родителе
BFSVC Error: Failed to open file I:\windows\boot\PCAT\bootmgr for read! Error code = 0x780
BFSVC Error: Failed to validate boot manager checksum (I:\windows\boot\PCAT\bootmgr)! Error code = 0xc1

[Цитировать]

    Hunter23071985
  • 874
  • Стаж: 8 лет 10 месяцев
  • Сообщений: 152
  • Репутация:6

    [+] [-]
vovan1982
В Win98 все обновления, библиотеки и т.д. и т.п. - в "! Read me.xlsx" вроде было об этом сказано.
dialmak
Если NumberChild=0, то прога тоже очень нужна: удобно ведь разом прописать кучу DIFF (или VHD) без всяких BootIce'ов!
В логе и в Settings.ini всё видно, про \windows\boot\PCAT\ и прочих тоже понятно, но что означает переменная "FixBoot"?
Можно ли автоматом положить в VHD нужные для VHDChild файлы? И нужны ли они - есть много VHD без этих файлов и они без проблем грузятся.
Поддержка Vista и XP тоже важна - судя по посту выше, многим и Win98 интересен! Положить ещё несколько файлов и всё заработает!
Пожалуйста, сделайте v1.2 с учётом хотя бы части этих пожеланий! И, если можно, в формате bat - на exe VirusTotal ворчит.
Upd: проверил на другом PC - все ОС в VHD, "россыпью" нет ни одной и скрипт работает! Значит можно убрать пункт "чтобы все VHD(X) были размонтированы".
Более того, я похоже нашёл ещё 2 способа использования VHDChild, на которые не надеялся и даже не упоминал в просьбе!
На PC модифицированный загрузчик - bootmgr с bootmgr.ldr лежат в "D:\[BOOT]\" и грузятся только под BIOS (с EFI не разбирался - нет "железа" для тестов).
Если указать BootLetter=D и TypeBoot=ALL, скрипт всё равно не найдёт папку "D:\[BOOT]\" и ... создаст новый загрузчик под BIOS и UEFI!!! Неожиданно и очень круто!
Правда весит загрузчик 32.7 МБ (74 файла, 20 папок) - можно бы поудалять лишнее, так ведь? Но самое главное, неужели можно:
а) взять нулёвый PC - отформатировать диск - сделать его активным - положить VHD - запустить VHDChild - перезагрузить и работать?
б) взять рабочую флешку (форматировать и "активировать" её не надо) - положить VHD - запустить VHDChild - загрузочная флешка готова?
Если "да", молю добавить переименование папки boot в [BOOT] и размещение в ней bootmgr, BOOTNXT (мешают они в корне флешки) и bootmgr.ldr.
Если "нет" или т.п. - жаль конечно, но тогда прошу ввести переменную для указания "D:\[BOOT]\BCD", чтобы избавиться от необходимости объединения 2 BCD. )))

[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 1 месяц
  • Сообщений: 842
  • Репутация:40

    [+] [-]
VHDChild v1.2
Устранена неадекватная реакция AV ESET-NOD32.
Bcdboot, bcdedit и bootsect заменены на версии из ADK Windows 10, version 1803.
Добавлены параметры SubFolders, TypeMenu и TimeOut. Подробнее см. в Setting.ini.
Устранена ошибка при кириллическом имени VHD(X).
Устранена ошибка парсинга пути.
По мелочам.
Ссылка на закачку в шапке.

[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 1 месяц
  • Сообщений: 842
  • Репутация:40

    [+] [-]
Hunter23071985,
Но самое главное, неужели можно:
а) взять нулёвый PC - отформатировать диск - сделать его активным - положить VHD - запустить VHDChild - перезагрузить и работать?
Естественно, нужно просто указать BootLetter и при желании TypeBoot

Ведь написано вроде понятно, без двухсмысленностей

BootLetter=
; Буква тома для создания загрузчика Native Boot, например BootLetter=H, по умолчанию: используется текущий системный загрузчик.
TypeBoot=
; Тип загрузчика Native Boot, может принимать значения BIOS, UEFI или ALL, по умолчанию: тип загрузчика определяется системой.
; TypeBoot=BIOS будет создан BIOS загрузчик, TypeBoot=UEFI будет создан UEFI загрузчик, TypeBoot=ALL будут создан и BIOS и UEFI загрузчик.
; Внимание! Если BootLetter не задана, то TypeBoot будет проигнорирован.

б) взять рабочую флешку (форматировать и "активировать" её не надо) - положить VHD - запустить VHDChild - загрузочная флешка готова?
Нужно создать раздел, отформатировать в FAT32\NTFS и сделать раздел активным - это для BIOS
Нужно создать раздел, отформатировать в FAT32 - это для UEFI
Нужно создать раздел, отформатировать в FAT32 и сделать раздел активным - это для и для BIOS и для UEFI, можно грузиться как угодно
Можно также использовать флешку БЕЗ MBR (это так называемый вариант No Partition) , тогда естественно раздел активным сделать не получится, такие тоже вполне грузятся, но не везде.
Форматирование нужно делать средствами Windows или если в чем-то другом, то использовать параметр FixBoot=2 для флешки с MBR или FixBoot=1 для флешки No Partition.
VHD может лежать на любом диске, где удобнее и скорость выше
молю добавить переименование папки boot в [BOOT]
Это не понял. Стандартное расположение для BCD такое
\Boot\BCD для BIOS
\EFI\Microsoft\Boot\BCD для UEFI

[Цитировать]

    Hunter23071985
  • 874
  • Стаж: 8 лет 10 месяцев
  • Сообщений: 152
  • Репутация:6

    [+] [-]
dialmak
Ведь написано вроде понятно, без двухсмысленностей
Фразу "будет создан загрузчик" я понял, как "будет создана загрузочная запись/строка для DIFF" в существующем BCD BIOS и/или UEFI.
Может к фразе "по умолчанию: используется текущий системный загрузчик" добавить ", при его отсутствии будет создан новый"?
Нужно создать раздел, отформатировать
Ничего не создавал, не форматировал и не отмечал активным. Взял SSD-флешку с NTFS, закинул папки [BOOT], [EFI], [OS] и прописал bootmgr.ldr в MBR.
Который год загружаю с этой флешки компьютеры и ноутбуки с BIOS и (U)EFI (в режиме Legasy)... Если этого достаточно, зачем усложнять?
Это не понял.
При создании загрузчика "с нуля" VHDChild создаёт в корне диска 2 файла (bootmgr и BOOTNXT) и 2 папки (Boot и EFI), как и задумано MS.
Так вот на рабочей флешке с кучей файлов и папок эти 4 объекта примерно, как зуб в носу.
Предлагаю сократить до 2-х, перенеся файлы bootmgr и BOOTNXT в \boot, и переименовать папки в [BOOT] и [EFI].
Так они будут всегда в начале списка, но понадобится bootmgr.ldr. Это совсем не обязательно, просто мне кажется так было бы удобнее.
VHDChild v1.2
Огромное спасибо, в т.ч. за TypeMenu=Legacy - так намного удобнее!
Надеюсь, прочие полезные доработки тоже есть в Ваших планах? ah

[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 1 месяц
  • Сообщений: 842
  • Репутация:40

    [+] [-]
Hunter23071985,
Фразу "будет создан загрузчик" я понял, как "будет создана загрузочная запись/строка для DIFF" в существующем BCD BIOS и/или UEFI.
Вот я удивляюсь. Если бы было так, то я б написал "добавляет запись в существующем BCD".
Простой пример. Стоит 7, создал VHD с 10. Если я добавлю запись в существующий BCD, то при загрузке 10 будет пшик. Ибо 7 ничего не знает о существовании 10.
Поэтому фраза "по умолчанию: используется текущий системный загрузчик" фактически не точна. Текущий системный загрузчик будет заменён и не только он, там куча файлов.
Ничего не создавал, не форматировал и не отмечал активным.
Ясен пень это не нужно, если кто-то это уже сделал до тебя. Если же диск или флешка пусты (из магазина или просто тупо обнулил), то нужно и создать MBR или GPT структуру, раздел и сделать раздел активным (для MBR) и отформатировать, а иногда и PBR сменить (для MBR).
Предлагаю сократить до 2-х, перенеся файлы bootmgr и BOOTNXT в \boot, и переименовать папки в [BOOT] и [EFI].
VHDChild для создания загрузки использует стандартную утилиту bcdboot. Читаем что делает эта утилита.
Короче суть басни такова - чтобы менять пути - нужно делать ей замену. Конечно сделать можно, но тратить свободное время на странные изыски у меня желания нет, иногда нужно и денежку зарабатывать. Что касается файлов, которые она создает - тут можно обойтись минимумом, достаточно их удалить из родительского VHD и они не скопируются. Пути, где они лежат написаны в ридми.
Немного потестил VHDChild. Всё довольно печально. Есть 2 критические ошибки. Не рекомендую использовать пока..
На днях выложу исправленную версию. Также будет добавлен функционал. Если будет время - сделаю GUI вариант и возможность запуска через правую кнопку мыши на файле VHD\VHDX и папке с VHD\VHDX..

[Цитировать]

    Hunter23071985
  • 874
  • Стаж: 8 лет 10 месяцев
  • Сообщений: 152
  • Репутация:6

    [+] [-]
dialmak
Флешка в начале была пуста, отформатировал в NTFS и заполнил файлами. Много после этого закинул загрузчик и прописал лоадер в MBR.
Более ничего не делал, не форматировал и не активировал, файлы не перемещал, всё работает на всех встречавшихся мне железках...
Возможно причина в том, что флешка эта определяется, как жёсткий диск?
Искать замену bcdboot не нужно, но раз уж мы всё равно меняем либо создаём с нуля загрузчик и кучу файлов, хотелось бы их "прокачать".
Смею лишь просить, но не смею настаивать. Если сочтёте интересным (или наоборот необдуманным), предлагаю обсудить в личной переписке.
В любом случае спасибо за информацию и Ваши усилия по написанию, тестированию и улучшению программы, пусть всё получится!


Показать сообщения:    

Текущее время: 28-Мар 16:53

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы