bcdedit.exe отказывается открывать системный магазин

3711
Poma

Похоже, моя BCD как-то сломана, но я не могу понять, что не так. Система загружается просто отлично, но она не позволяет Windows устанавливать обновления:

MoSetupPlatform: Opening BCD store... CDlpActionDiskSpaceReq::CalculateRequiredDiskSpaceInstallReq(1752): Result = 0x8007001F 

Я запускаю Windows 10 на MacBook (bootcamp), он использует таблицу разделов EFI. Когда я бегу bcdedit /enumв повышенном режиме я получаю

The boot configuration data store could not be opened. A device attached to the system is not functioning. 

Когда я пытаюсь открыть магазин напрямую, он открывается просто отлично:

B:\>bcdedit.exe /store B:\EFI\Microsoft\Boot\BCD /enum  Windows Boot Manager -------------------- identifier  device partition=B: path \EFI\Microsoft\Boot\bootmgfw.efi description Windows Boot Manager locale en-US inherit  default  resumeobject  displayorder  toolsdisplayorder  timeout 30  Windows Boot Loader ------------------- identifier  device partition=C: path \WINDOWS\system32\winload.efi description Windows 10 locale en-US inherit  recoverysequence  displaymessageoverride Recovery recoveryenabled Yes isolatedcontext Yes allowedinmemorysettings 0x15000075 osdevice partition=C: systemroot \WINDOWS resumeobject  nx OptIn bootmenupolicy Standard 

Windows хранит фактический BCD где-нибудь еще? Как Windows узнает, на каком разделе и пути искать системное хранилище BCD?

Как мне диагностировать, что не так с моим магазином BCD?

обновление: забыл, что я загружаюсь с помощью refindзагрузчика, который, вероятно, загружаетсяbootmgfw.efi

1
«Хранит ли Windows настоящий BCD где-то еще? - Нет, он хранится в разделе EFI. Почему вы монтируете и назначаете букву диска вашему разделу EFI? Ramhound 6 лет назад 0
И полный путь всегда `EFI \ Microsoft \ Boot \ BCD`? Poma 6 лет назад 0
Раздел EFI не должен иметь букву диска. Ответ на ваш вопрос заключается в том, что для систем UEFI это действительно так: https://technet.microsoft.com/en-us/library/cc721886(v=ws.10).aspx Ramhound 6 лет назад 0
Я временно подключил его к B: чтобы облегчить решение этой проблемы. Но если обе команды пытаются открыть один и тот же файл, как получается, что одна из них успешна, а другая - нет? Poma 6 лет назад 0

2 ответа на вопрос

1
Poma

Похоже, OS X делает некоторые изменения, которые несовместимы и ломают bcdedit. Вот как мне удалось временно решить эту проблему: сбросить NVRAM с помощью + Alt+ P+ R, затем загрузить прямо в раздел Windows, удерживая Alt. Я смог установить обновления Windows, но после загрузки в OS X и установки обновлений bcdedit снова сломался.

-2
Vishukani

A Хранит ли Windows настоящий BCD где-то еще? Как Windows узнает, на каком разделе и пути искать системное хранилище BCD?

Режим EFI работает с двумя ногами;

1- специальный раздел BIOS (в области записи на чипе), в котором сохраняются GUID раздела загрузчика ОС.
2- системный (скрытый) раздел с этим GUID с именем EFI, в котором находится исполняемый файл Bootloader (файлы расширений .efi).

Если вы установили / переустановили несколько ОС в режиме EFI, то есть вероятность, что микросхема BIOS SPI загромождена множеством записей старых ОС и в конечном итоге заняла место на этих специальных 8 МБ (если я не ошибаюсь) на раздел микросхемы и стал доступен только для чтения.

У Microsoft есть страница Technet, на которой показано, как очистить дубликаты EFI или ненужные записи guid (например, ОС удалена, но запись EFI все еще там).
Это включает в себя создание резервной копии текущей конфигурации, а затем ее сброс без дублирования записей.

на повышенном приглашении cmd;

Bcdedit /export savebcd 

это создаст резервную копию текущих конфигураций загрузчика.
сделайте его копию в целях восстановления (savebcd будет нашей резервной копией);

Copy savebcd newbcd 

Затем экспортируйте текущие записи в текстовый файл в удобочитаемом формате;

Bcdedit /enum firmware > enumfw.txt  notepad enumfw.txt 

Загрузите этот файл с помощью блокнота и просмотрите его, чтобы указать дубликаты записей.

удалить каждую дубликат / устаревшую запись:

Bcdedit /store newbcd /delete 

где 93cee840-f524-11db-af62-aa767141e6b3 - это просто пример руководства,
замените его на руководство, которое вы считаете ненужным

как только вы удалили все ненужные руководства;

Bcdedit /import newbcd /clean 

Очищает текущие записи EFI и импортирует очищенные (файл, из которого мы только что удалили ненужные записи) данные конфигурации.
Если вы по-прежнему получаете сообщение «Устройство, подключенное к системе, не работает». ошибка,
тогда; Я не хочу быть доносчиком плохих новостей, но у вас есть два пути, по которым нужно следовать;
- придерживайтесь своей текущей системы; сделайте ВСЮ резервную копию образа диска (включая раздел EFI) как можно скорее., потому что, скорее всего, ваш чип SPI (BIOS) загроможден, и вы не сможете сбросить его без перепрошивки / замены.
Это означает, что текущие указатели Bootloader на чипе являются окончательными, и если вы попытаетесь переустановить другую ОС в режиме EFI, она просто не завершит установку, а установщик будет прерван с ошибкой (семейство ОС Windows) или завершит работу, но BIOS не будет загрузите его (установщики Linux, например, openSUSE), более того, вы потеряете свой старый конфиг, у вас не будет загрузки ОС на вашем устройстве.
- Учитывая, что у вас Mac, попросите техподдержку перепрошить / заменить BIOS.
если это не так или не осуществимо; замените переключатель жесткого диска на прежний режим BIOS (если этот переключатель в BIOS все еще работает, для меня он просто не работает (Lenovo Ideapad B50)

кроме этих, есть и другие варианты, которые следует исключить следующим образом : так как они предлагаются, как если бы они были безопасными советами в некоторых видео на Youtube на эту тему, так что я просто упоминаю их, чтобы не пытаться, потому что они опасны и / или аннулирует гарантию на устройство (удаление батареи ноутбука + разборка устройства для выставления материнской платы, затем удаление батареи биоса + ожидание (ожидание) сброса биоса или короткое замыкание (короткое замыкание) микросхемы SPI ); особенно метод удаления батареи bios никогда не работает на большинстве (если не на всех) ноутбуках, в то время как короткое замыкание SPI-чипа может привести к поломке даже всей системы.

Надеюсь, что это помогло.

«Есть и другие варианты, которые следует исключить». Так что же это за варианты? Быть конкретными. Старайтесь сводить комментарии к минимуму. Это ненужное отвлечение. Ramhound 6 лет назад 0
`Bcdedit / export savebcd` это уже не работает, как и любые другие команды, которые читают текущее системное хранилище BCD. Похоже, что bcdedit ищет BCD не в том месте, потому что он открывается при прямой ссылке. Poma 6 лет назад 0
А что именно хранится на специальном разделе BIOS? Потому что вы говорите, что это может стать загроможденным, но затем продолжите описывать, как очистить записи в файле BCD, который хранится на жестком диске в разделе EFI. Poma 6 лет назад 0
@Poma - Единственное, что я знаю, что хранится на микросхеме, связанной с UEFI, - это ключи безопасной загрузки. Что, конечно, является дополнительной функцией Windows и не относится к описываемой вами проблеме. Apple, как известно, обеспечивает более жесткий контроль над своим оборудованием, то есть оборудование Apple, которое обеспечивает более жесткий контроль над их конфигурацией EFI на своем оборудовании. Ramhound 6 лет назад 0
как я уже сказал, это двухсторонняя система, одна из которых является указателем, другие являются загрузчиками, записи указателей записаны на чипе (не на жестком диске), раздел FAT32, который является частью BIOS (не совсем BIOS, но его проще описать), Вторая часть, в которой находятся загрузчики, находится в разделе EFI, очистка bcdedit включает в себя удаление повторяющихся / устаревших записей указателей из BIOS. Vishukani 6 лет назад 0
@ Vishukani, так что вы говорите, что команда bcdedit редактирует и сохраняет данные в BIOS, а не в файле `\ EFI \ Microsoft \ Boot \ BCD`? Poma 6 лет назад 0
нет, я никогда этого не говорил, если вы внимательно прочитаете мой ответ, вы получите его; \ EFI <это путь MOUNT диска EFI, на котором находятся файлы BOOTLOADER, а не входы указателя BOOTLOADER (он находится в встроенном разделе UEFI с BIOS), это двухэтапный процесс. Vishukani 6 лет назад 0
Я пытаюсь, но это все еще не складывается. Если bcdedit не редактирует данные в BIOS, то почему bcdedit может использоваться для освобождения места в BIOS, как вы описали выше? И что же тогда представляет собой запись указателя в загрузчике? Poma 6 лет назад 0
@Poma - на вашем столе есть список работников, пишет BILL- 555-10-55, пишет STEVE-555-20-50, поэтому в любое время, когда вам нужно связаться с ними, у вас есть их телефоны в списке, это список загрузчиков в ваш BIOS, вы хотите вызвать BILL (WINDOWS), он вызывает 555-10-55 (это точка монтирования вашего загрузчика, который находится в скрытом разделе с именем EFI и загрузчик Windows, расположенный в EFI \ Microsoft \ Boot \), так что это данные находятся на жестком диске, но адреса (номера телефонов) зарегистрированы в BIOS, но в конечном итоге вы получаете столько рабочих, которых нанимают и увольняют, ваш список становится загроможденным, поэтому вам нужно очистить свой список. Vishukani 6 лет назад 0
Здесь все еще есть противоречие. Таким образом, вы не можете отрицать, что `bcdedit` редактирует и сохраняет данные в файле` \ EFI \ Microsoft \ Boot \ BCD` раздела EFI. Тогда как очистка записей в файле на разделе EFI поможет очистить пространство в BIOS? Poma 6 лет назад 0
@ Пома - Вы понимаете, Вишукани троллинг, в этот момент не так ли? Ramhound 6 лет назад 0
Похоже, я получил то, что вы пытаетесь сказать из статьи Technet. Таким образом, очевидно, что в некоторых системах bcdedit выполняет двухстороннюю синхронизацию между записями в файле BCD на разделе EFI и записями в BIOS, поэтому очистка их в EFI также освободит место в BIOS. Это правильно? Если это так, это не объясняет мою проблему - почему bcdedit не может перечислять записи в системном хранилище Poma 6 лет назад 0