Показать полную графическую версию : [решено] Узнать, MBR или GPT?
Ксеноинженер
30-04-2013, 02:13
m0nkrus, Iska, ITDemon, всё гениальное просто! Если не ошибаюсь, каждая копия Windows считает место хранения своего загрузочного тома не иначе как "диском 0", Вы проверьте :) Если загрузочный том всегда на диске 0, то:
@echo off
CD /d %~dp0
echo Select Disk 0 >> diskpart.txt && echo detail disk >> diskpart.txt
Diskpart /s diskpart.txt | Findstr /c:"{"
IF ERRORLEVEL 1 (
ECHO Загрузочный том размещен на MBR-диске
) ELSE (
ECHO Загрузочный том размещен на GPT-диске
)
del /q diskpart.txt
pause
Ключ логики - имеет ли "диск 0" GUID вида {...} (GPT), или ИД Диска 0 имеет другой вид (MBR).
На MBR WinXP и GPT Win8 проверил - работает корректно, подозреваю на остальных версиях тоже ;)
Ксеноинженер, сейчас проверить уже не могу: под рукой не осталось машин, где ОС была бы установлена не на первый накопитель. Тем более — с GPT ;).
Ксеноинженер, увы, тоже проверить не на чем. Я системный диск всегда втыкаю в первый SATA-порт, так что он у меня в любом случае нулевой.
Хоть я и не могу сказать, работает ли ваша конструкция, но оптимизировать код, избавившись от внешнего файла, думаю, смогу. Ваше:
echo Select Disk 0 >> diskpart.txt && echo detail disk >> diskpart.txt
Diskpart /s diskpart.txt | Findstr /c:"{"Замена:
((echo select disk 0 && echo detail disk) ^| diskpart.exe) | findstr /c:"{"
Ксеноинженер
03-05-2013, 19:08
Добавил вывод ИД диска, для наглядности принятия решения скриптом.
@echo off
CD /d %~dp0
((echo select disk 0 && echo detail disk) ^| diskpart.exe) | findstr /c:"ИД диска" & ((echo select disk 0 && echo detail disk) ^| diskpart.exe) | findstr /c:"{">nul
IF ERRORLEVEL 1 (
ECHO Загрузочный том размещён на MBR-диске
) ELSE (
ECHO Загрузочный том размещён на GPT-диске
)
pause
Взять к примеру "тяжёлый случай (http://forum.oszone.net/thread-180021.html)", когда загрузчик на одном диске, а Windows на другом. Ведь для работы скрипта это не важно: Логический диск "с букавкай С:" может быть на диске 0,1, 2, 3, 4... . Пусть будет!
Тем не менее, место хранения Загрузчика ОС есть Диск 0 всегда! В противном случае данная копия Windows "не загружабельна" без правки:
любого имеющегося на Диске 0 загрузчика или BIOS, если загрузчика, на Диске 0, нет.
Какой из SATA портов будет Диском 0 определяет первая строка в "Boot Sequence" в BIOS.
Чтива полно на "железных" конференциях forum.oszone.net, ixbt.com.
m0nkrus, оптимизация хороша, пригодится и для других задач тоже!
Ксеноинженер, вот честно, не могу с уверенностью сказать, что мне нужно найти, где находится системный диск (скрытая 100-метровка) или загрузочный диск (диск С). Для первого случая ваш вариант подходит, для второго - не факт. Тут нужно тестировать, тестировать и еще раз тестировать. А не на чем...
Идея такой комплектации команд изначально не моя (http://forum.oszone.net/post-2140339.html#post2140339), а Iska.
Ксеноинженер
05-05-2013, 22:29
Тут нужно тестировать, тестировать и еще раз тестировать. А не на чем... »
Что ж, VMWare или VirtualBox в помощь. В EFI режиме с загрузочным GPT диском обе работают, в отличие от Hyper-V.
Ксеноинженер, я пробовал запустить установку винды на VirtualBox в UEFI-режиме - хрен вам!..
Ксеноинженер
06-05-2013, 00:25
m0nkrus, действительно, не стоит с VirualBox связываться, ведь конкурент субъективно стабильнее. Моя тестовая платформа "GPT EFI Boot":
Установил VMWare Player (https://my.vmware.com/web/vmware/free#desktop_end_user_computing/vmware_player/5_0). Создал новую машину.
Добавил в конфигурацию *.vmx машины строку блокнотом.firmware = "efi"
Включил машину, загрузился с MSDN образа, установил Windows.
Для копирования скрипта на виртуальную машину может пригодиться Утилита монтирования *.vmdk образов (http://www.vmware.com/download/eula/diskmount_ws_v55.html)
Ксеноинженер
06-05-2013, 15:13
Зачем вам сейчас вдруг понадобилось таким "оригинальным" способом самоутверждаться, мне совершенно непонятно.
Действительно, топик не место для этого. Прошу прощения за своё ребячество.
Однако,
m0nkrus, как можно, не тестируя, серьёзно говорить про работу скрипта в предложенных Вами экзотичных вариантах системы?
Краткая схема моих тестов:
BIOS
диск 0 MBR, "Системный раздел"
диск N GPT, "Загрузочный раздел", Цель установки
EFI
диск 0 GPT, "Системный раздел"
диск N MBR, "Загрузочный раздел", Цель установки
где N =1,2,3...
Результат: В обоих случаях после стандартной установки и диск 0 под "Системным разделом" и диск N под "Загрузочным разделом" имеют один и тот же формат. Подозреваю, установщик Windows конвертирует чистый Диск 0 в формат диска под загрузочным разделом, выбранным во время установки, А если Диск 0 занят, то ошибка установки.
Вывод: в "загружабельных" системах тип диска 0 и тип диска N под загрузочным разделом один и тот же, всегда.
Какие ещё вопросы по теме топика? На практике наш с вами скрипт исправно работает, пусть и по косвенному признаку: ID Диска 0.
Вывод: в "загружабельных" системах тип диска 0 и тип диска N под загрузочным разделом один и тот же, всегда. »
Поверьте моему богатому опыту - не всегда. Иначе я бы не зацикливался так на этом.
Ксеноинженер
30-05-2013, 23:59
Поверьте моему богатому опыту - не всегда. »
Верю и проверил.
Действительно схема нумерации дисков установщика Windows не привязана к BIOS и к номеру SATA порта.
Сама MS здесь лукавит:
when you install Windows Server 2012, Windows Server 2008 R2, Windows 8, or Windows 7, the installation creates a system partition alongside the Windows partition by default. The system partition is created to accommodate a Bitlocker requirement. Bitlocker requires that the boot files and Windows files are located on separate partitions. If the preselected default hard disk is not changed, the system partition is created on the disk that is detected as Disk 0.
http://support.microsoft.com/kb/937251
http://support.microsoft.com/kb/937252
Пока это так, устанавливать ОС в MBR-системе на один из двух физ.дисков - играть в угадай-Ку.
В MBR системе одно можно сделать с уверенностью -- на время установки ОС стОит отключать в BIOS/физически SATA-порты со всеми ПЗУ, кроме "системного"; вот тогда и скрипт будет работать исправно.
В EFI системе такая привязка нумерации дисков к ОС Есть, и в случае установки ПервойОС на диск 0 всё чётко при любом количестве физ. дисков. Но тем не менее в EFI при установке ВторойОС на диск 1-N (первая на диске 0) рекомендую тоже отключать все ПЗУ, кроме "системного", (целиком логические диски не в счёт). Почему рекомендую? Да очень просто, чтобы загрузиться с первой или второй системы, достаточно будет сменить последовательность дисков в BIOS/EFI. Без шаманства с bootsect.
В общем-то, привести в порядок свои диски в BIOS/EFI и устанавливать систему всегда на диск 0 - это элементарные правила!
P.S. Правила есть в любой игре. ;)
Ксеноинженер, предпочитаю скрипт, работающий всегда над скриптом, работающим по правилам.
Iska, m0nkrus,
а вы не пробовали для поиска системного диска применить DISKPART с параметром SEL DISK SYSTEM,
а потом проверить GPT ?
AnTaL, не пробовал. Свой вариант определения, который считаю наиболее корректным и универсальным, я озвучивал выше в #9 (http://forum.oszone.net/post-2139281-9.html) и в #11 (http://forum.oszone.net/post-2139297-11.html). У автора же достаточно специфичные требования на ТЗ, он нашёл свой вариант решения, вполне рабочий и, главное — его самого более чем устраивающий.
AnTaL, тут есть нюанс. Из справки по этой команде:
На компьютерах с BIOS фокус получает диск с номером 0 в BIOS.
На компьютерах с EFI фокус получает диск, содержащий раздел
ESP, используемый для текущей загрузки.
На компьютерах с EFI, если ESP отсутствует, есть несколько ESP
или компьютер загружается из среды предустановки Windows,
команда завершится сбоем.
Albatross
13-11-2013, 10:57
Нужно получить данные, какой формат имеет диск С, MBR или GPT и исходя из этой инфы задать флаговую переменную как 0 или 1. »
http://i57.fastpic.ru/thumb/2013/1113/ab/29846b44c91edf776fff4d856f94bdab.jpeg (http://fastpic.ru/view/57/2013/1113/29846b44c91edf776fff4d856f94bdab.jpg.html)
Albatross, родной, ты так, на секундочку, посмотри, в каком подфоруме ты пишешь...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.