2012-11-28 00:37:29 +0000 2012-11-28 00:37:29 +0000
32
32

Come usare BCDEdit per le installazioni dual boot di Windows?

Quali sono i comandi bcdedit necessari per impostare il dual boot tra diverse installazioni di Windows? 5

Background

Ho recentemente installato Windows 8 su un disco rigido separato1. Ora che Windows 8 è installato voglio fare il dual-boot per tornare a Windows 7.

Ho i miei due2 dischi rigidi:

C:\WINDOWS\system32>bcdedit

Windows Boot Manager
--------------------
identifier {bootmgr}
device partition=\Device\HarddiskVolume2
description Windows Boot Manager
locale en-US
inherit {globalsettings}
integrityservices Enable
default {current}
resumeobject {ce153eb7-3786-11e2-87c0-e740e123299f}
displayorder {current}
toolsdisplayorder {memdiag}
timeout 30

Windows Boot Loader
-------------------
identifier {current}
device partition=C:
path \WINDOWS\system32\winload.exe
description Windows 8
locale en-US
inherit {bootloadersettings}
recoverysequence {ce153eb9-3786-11e2-87c0-e740e123299f}
integrityservices Enable
recoveryenabled Yes
allowedinmemorysettings 0x15000075
osdevice partition=C:
systemroot \WINDOWS
resumeobject {ce153eb7-3786-11e2-87c0-e740e123299f}
nx OptIn
bootmenupolicy Standard
hypervisorlaunchtype Auto

Così potete vedere che ho i miei due dischi, con le partizioni contenenti Windows:

  • Windows 7 : \PhysicalDisk0 (partizione 03)
  • Windows 8 : \PhysicalDisk2 (partizione 1)

Quello che sto cercando di capire è come usare bcdedit per istruire la cosa che avvia Windows che c'è un'altra installazione di Windows là fuori.

Eseguendo ora bcdedit, mostra la configurazione corrente:

>bcdedit /create /d "The old Windows 7" /application osloader

Non riesco a trovare nessuna documentazione sulla differenza tra Windows Boot Manager e Windows Boot Loader.

Documentazione

C'è della documentazione su Bcdedit:

Ma non spiegano come modificare i dati di configurazione del boot binario.

Se dovessi indovinare, penserei che un Windows Boot Manager istruisce il BIOS su quale programma dovrebbe eseguire. Quel programma darebbe all'utente una serie di scelte di avvio. Questo lascia Windows Boot Loader essere una particolare scelta di avvio, che rappresenta una particolare installazione di Windows.

Se questo è il caso avrei bisogno di creare una nuova voce Windows Boot Loader.

Questo significa che potrei voler usare il parametro /create:

/create

Crea una nuova voce di boot:

bcdedit [/ store filename] / create [id] / d description [/ application apptype | / inherit [apptype] | / inherit DEVICE | / device ]

Quindi presumo una sintassi di:

Apptype Description
BOOTSECTOR The boot sector application
OSLOADER The Windows boot loader
RESUME A resume application

dove application può essere uno dei seguenti tipi:

>bcdedit /create /D "Windows Vista" /device "The Quick Brown Fox"

Purtroppo, l'unica documentazione su osloader è “Il boot loader di Windows”. Non vedo come questo possa differenziare tra Windows 8 su un disco rigido e Windows 7 su un altro.

L'altro possibile parametro quando /create un boot loader è

Purtroppo manca la documentazione per /device:

/device

Opzionale. Se id non è impostato su un identificatore noto, l'opzione che viene usata per specificare la nuova voce di avvio come una voce aggiuntiva di opzioni di dispositivo.

Poiché non ho impostato id su un identificatore noto, devo impostare /device su “l'opzione che viene usata per specificare la nuova voce di avvio come voce aggiuntiva di opzioni di dispositivo”. Conosco tutte queste parole; sono tutte inglesi. Ma non ho idea di cosa stia dicendo; quelle parole in quell'ordine sembrano senza senso.

Quindi sono un po’ in difficoltà. Non voglio fare come Dan Stolts di Microsoft, che ha distrutto i suoi dischi rigidi cercando di usare BCDEdit :

Non ho trovato nessun contenuto particolarmente utile quando ho distrutto la mia macchina giocando con BCDEdit. Questo post sarebbe stato ok se ci fosse stato molto più dettaglio soprattutto sul comando /set OSDevice, ecc. Così, una volta che ho sistemato la mia macchina, ho documentato la soluzione e le informazioni sono qui… .

Voglio dire, se un ragazzo Microsoft non riesce nemmeno a capire come usare BCDEdit per modificare il suo BCD, allora che possibilità ho io?

Lettura bonus

Note a piè di pagina

  • 1 Poiché il programma di installazione di Windows 8 avrebbe danneggiato la mia installazione di Windows 7, Ho deciso di scollegare il mio disco rigido “principale” durante l'installazione. Che è una lunga spiegazione del perché il programma di installazione di Windows 8 non ha rilevato l'installazione esistente di Windows 7. Normalmente il programma di installazione avrebbe creato automaticamente le voci necessarie per il dual-boot. Non che la ragione per cui sto facendo la domanda sia importante.
  • 2 In realtà ci sono tre unità, ma la terza è solo la memoria di massa. L'esistenza di un terzo disco rigido è irrilevante per la domanda. Lo menziono solo nel caso in cui qualcuno voglia sapere perché lo screenshot ha 3 dischi rigidi quando io ne menziono solo due.
  • 3 Ho arbitrariamente iniziato a numerare le partizioni a “zero”; non per implicare che le partizioni siano numerate partendo da zero. Menziono solo le partizioni perché non vedo come qualsiasi boot-loader possa fare il suo lavoro senza sapere in quale partizione, e in quale cartella, si trova un'installazione di Windows.
  • 4 Sto chiedendo di BCDEdit. Ho provato Visual BCD Editor. Sembra essere un editor BCD visuale. Vale a dire che è una GUI, ma usa ancora la stessa terminologia di BCDEdit, e richiede le stesse conoscenze che BCD non documenta.
  • 5 Per semplicità assumeremo che tutte le installazioni di Windows tra cui voglio fare il dual-boot siano Windows Vista o successive, rendendole tutte compatibili con BCDEdit e il boot loader binario. L'alternativa richiederebbe di addentrarsi nelle complessità del vecchio ntloader. Né sto chiedendo del dual boot a Linux; o di come avviare un'immagine Virtual Hard Drive (vhd). Solo versioni moderne di Windows su dischi rigidi esistenti nella stessa macchina.

Risposte (7)

16
16
16
2012-11-28 10:16:25 +0000

Questa non è una risposta diretta alla domanda prima di “Background”, ma indica una soluzione alternativa per la creazione di voci del caricatore per l'avvio di due (e più) sistemi operativi Windows Vista e successivi. Si prega di vedere anche la mia seconda risposta qui sotto circa la critica sulla terminologia usata in Visual BCD.

Nessuna guida, dispositivi, oggetti, elementi e blah, blah, blah.

Il mio background (salta se non ti interessa e vai alla soluzione qui sotto):

Ho implementato Visual BCD Editor.

Durante il processo di implementazione ho dovuto leggere tutte le fonti disponibili su bcdedit e sull'interfaccia WMI BCD Provider (interfaccia di programmazione, può essere usata con C++, C#). La documentazione di Microsoft è davvero scarsa.

Nel BCD ci sono oggetti (caricatori, impostazioni, elementi del dispositivo). Non c'è documentazione sulle connessioni tra gli oggetti nonostante ci siano dipendenze.

Ci sono più di 140 (!) elementi (proprietà) di oggetti BCD in Windows 7. Non conosco il significato di alcuni elementi - semplicemente non c'è documentazione.

In Windows 8 ci sono nuovi elementi - credo che il numero totale ora si avvicini a 180 (!!). Nessuna documentazione.

D'altra parte ci sono due utility molto potenti per manipolare il BCD: bcdboot e reagentc.

bcdboot - crea/corregge il caricatore di default anche il BCD e l'ambiente di boot nel suo complesso!

reagentc - installa/disinstalla l'ambiente di ripristino (winre.wim)

Entrambi gli strumenti non sono molto ben documentati.

Soluzione alternativa:

Non c'è quasi bisogno di bcdedit perché usando solo bcdboot si possono creare loader per Windows Vista e i sistemi operativi Windows successivi - si crea il loader per il primo sistema operativo, poi per l'ultimo e voilà si è creato l'ambiente di avvio per un sistema dual/multi boot:

Supponendo che siate in Windows 8:

1. bcdboot f:\windows (questo corrisponde a Windows 7 come nell'immagine in questione)

2. bcdboot c:\windows (questo corrisponde a Windows 8)

**Fatto! L'ambiente di avvio (e il BCD) dovrebbe essere sempre su [primo disco + partizione attiva]. (nell'immagine - Disco 2 == Primo disco nella sequenza di avvio del BIOS!)

Ultimo ma non meno importante è l'utilità bootsect per scrivere MBR e PBR (master e partition boot record) - ora standard in Windows 8 (prima era disponibile solo in WinRE).

Quindi usando solo bootsect e bcdboot si possono creare/fissare tutte le entità di avvio per un sistema dual boot.

Penso che il processo di avvio per Vista e successivi sia descritto molto bene su molti siti internet anche su Microsoft.com.

Nota:

Uno dei migliori siti su Windows BCD è il sito di Geoff Chappell - ci sono informazioni più dettagliate lì che su Microsoft.com. Gli utenti interessati potrebbero trovarvi informazioni abbastanza utili e alcune note critiche sulla documentazione di bcdedit.

10
10
10
2013-03-07 10:54:28 +0000

Quando ho formattato il mio drive C: per reinstallare Windows il master boot record è stato cancellato e l'installer di Windows 7 non è riuscito a ripristinarlo. Potrei usare uno strumento GUI bcdedit come Visual BCD Edit, ma perché dovrei installare qualcosa quando dovrebbe esserci un semplice comando in bcdedit che può fare il lavoro? Dopo molte ricerche nei file di aiuto online ho rinunciato a bcdedit e ho trovato la risposta qui sepolta nelle digressioni. Per creare una voce di avvio per la seconda partizione devi usare bcdboot.

Assumendo che tu sia in C:\Windows:

  1. bcdboot e:\windows
  2. bcdboot c:\windows Quando riavvii ti verrà presentato il menu di avvio di Windows con due voci per Windows 7. Se selezionate la voce che si avvia in C:\Windows potete rinominare la voce per questa partizione con:
  3. bcdedit /set {current} description "Windows 7 (Partition 1)" Questo rende il sistema operativo avviato all'avvio la voce predefinita nel menu di avvio:
  4. bcdedit /default {current} Questo pone il sistema operativo predefinito all'avvio come prima voce nel menu di avvio
  5. bcdedit /displayorder {default} /addfirst Oppure si potrebbe rendere il SO all'avvio la prima voce nel menu di avvio:
  6. bcdedit /dispalyorder {current} /addfirst Ora riavviate e selezionate la seconda voce nel menu di avvio che dovrebbe essere etichettata “Windows 7”. Una volta avviato in E:\Windows rinominate il sistema operativo avviato all'avvio:
  7. bcdedit /set {current} description "Windows 7 (Partition 2)" Testate che il menu di avvio funzioni bene e salvate i dati bcd in una partizione che non abbia un sistema operativo installato su di essa:
  8. bcdedit /export D:\Saved_BCD_Settings\SavedBCD Se in seguito fate casino potete ripristinare il menu di avvio bcd con:
  9. bcdedit /import D:\Saved_BCD_Settings\SavedBCD
5
5
5
2012-12-02 01:36:13 +0000

Alcune note di critica nella domanda originale sull'uso della stessa terminologia in Visual BCD che Microsoft usa per bcdedit.

Il concetto di BCD è sviluppato da Microsoft. Ha la sua propria terminologia. Non penso di poterlo cambiare. Posso solo estenderlo.

Microsoft ha dato due modi per accedere/modificare il BCD:

  1. usando bcdedit.exe - interfaccia a riga di comando
  2. BCD WMI Provider interface - interfaccia programmatica

Entrambe le interfacce parlano di oggetti ed elementi BCD. Questo è un concetto generale usato sia nella programmazione/computer che in altre aree umane. Potremmo andare fino alla filosofia che usa la terminologia di oggetti, proprietà e relazioni per descrivere il mondo e l'universo.

BCD WMI provider access è più flessibile in quanto dà al programmatore la possibilità di accedere ad ogni oggetto ed elemento del BCD e di operare su di essi liberamente.

Visual BCD fa pieno uso della BCD WMI Provider Interface e implementa l'accesso nello stesso modo in cui siamo abituati ad accedere al registro di Windows usando regedit.exe. Inoltre, lo strumento automatizza due compiti principali - creazione di caricatori e riparazione dual-boot. Nessun altro strumento offre una tale funzionalità automatica con un solo clic. Direi che questa è nuova terminologia e nuovo livello di astrazione. Non cambierei la base che Microsoft ha creato, posso solo costruirci sopra.

Gli utenti inesperti devono solo cliccare un pulsante e viene eseguita un'operazione complessa! Non è necessario alcun background! Non devi nemmeno sapere quante versioni di Windows hai installato - lo strumento cerca di trovarle tutte e poi crea dei caricatori per loro se i caricatori corrispondenti non sono già presenti nel BCD - la terminologia usata - “Create missing Windows loaders ” - penso che chiunque parli inglese possa capire/cliccare/confermare una tale operazione o mi sbaglio?

La complessità degli oggetti e degli elementi in BCD è naturale in quanto il concetto copre l'avvio di nuovi e vecchi sistemi operativi Windows così come di sistemi operativi stranieri come Linux, Unix ecc. Inoltre è un concetto generale per l'avvio di MBR e EFI su una varietà di dispositivi.

La parte più complessa del BCD è il concetto di dispositivo. Hai un dispositivo di partizione, un dispositivo ramdisk, un dispositivo file, un dispositivo di localizzazione - devi spendere un po’ di tempo per capirlo e non credo che questo sia per il normale utente di Windows. I forum sono pieni di domande sulle partizioni del disco, che è un argomento molto meno complesso. Molti utenti di Windows non conoscono nemmeno la differenza tra partizione primaria e logica, per esempio. Devi conoscere le partizioni se vuoi fare il dual/multi boot. Devi comprare un terreno se vuoi costruire una seconda casa.

Il concetto di BCD è lo stesso da Vista - solo nuovi elementi sono definiti in Windows 7/8.

Penso che la struttura del registro per BCD sia stata scelta perché Windows implementa già questa interfaccia ed è un'interfaccia transazionale affidabile che ha dimostrato di funzionare negli anni. Se il concetto di registro di Windows in generale sia un concetto buono o cattivo è un altro argomento.

Sta al programmatore/sviluppatore creare un'interfaccia più user friendly. Ho iniziato dando la stessa interfaccia - un equivalente GUI di bcdedit - in seguito l'interfaccia può essere astratta ad un livello più alto in base ai modelli di utilizzo. Una vista strutturata di BCD è già implementata. Questo è il livello di astrazione di base.

Il prossimo livello di astrazione sarebbe quello di concentrarsi sulle relazioni tra oggetti poiché questo argomento non è coperto da Microsoft. Non è un compito facile. La nuova terminologia arriva con l'astrazione.

3
3
3
2017-12-19 10:14:27 +0000

Anche se vecchio, voglio aggiungere alle risposte, perché molte delle risposte sopra contengono informazioni errate. Probabilmente funzionano, ma certamente non avete bisogno di un programma esterno, o anche di bcdboot per farlo. Per riferimento le informazioni corrette sono le seguenti:

Rapido background del BCD se non lo conosci

BCD è la configurazione di avvio di Windows. Contiene numerose sezioni, ciascuna identificata da un nome (chiamato “descrizione”) e un identificatore che assomiglia un po’ a questo: “{0743bb44-fda6-11e3-90c8-e3ee27f3aec6}”.

Ci sono diversi “identificatori noti”, e bcdedit userà questi al loro posto dove può, (a meno che non si usi l'opzione /v (verbose) con /enum). Assomigliano a questo: “{bootmgr}”, “{memdiag}”. Questi sono solo nomi abbreviati per identificatori completi, ma sono più facili da usare. Puoi usare entrambi.

Puoi elencare queste sezioni con il seguente comando (il “all” è opzionale ma senza di esso non vedrai una lista completa): bcdedit /enum all.

Uscita tipica:

C:\Windows\system32>bcdedit /enum all

Windows Boot Manager
--------------------
identifier {bootmgr}
device partition=\Device\HarddiskVolume1
description Windows Boot Manager
locale en-US
inherit {globalsettings}
default {current}
resumeobject {92b1a1b0-c023-11e3-b3f1-ec4d94108574}
displayorder {current}
toolsdisplayorder {memdiag}
timeout 30

Windows Boot Loader
-------------------
identifier {current}
device partition=C:
path \Windows\system32\winload.exe
description Windows 7
locale en-US
inherit {bootloadersettings}
recoverysequence {92b1a1b2-c023-11e3-b3f1-ec4d94108574}
recoveryenabled Yes
osdevice partition=C:
systemroot \Windows
resumeobject {92b1a1b0-c023-11e3-b3f1-ec4d94108574}
nx OptIn

Allo stesso modo, per facilità quando identifica i dispositivi, userà un formato come \Device\HarddiskVolume2, ma riconoscerà la partizione dalla sua lettera (“C:”) se ne viene assegnata una.

La lista prodotta da /enum all inizia con una sezione opzionale di boot manager del firmware (se la vostra scheda madre ha EFI). Il suo nome abbreviato è “{fwbootmgr}”. Controlla la scelta dell'avvio EFI iniziale (se usare il solito boot manager di Windows o dispositivi specifici). Generalmente potete ignorare {fwbootmgr} se presente.

Sotto c'è il “Windows Boot Manager ” (identificatore “{bootmgr}” ). Questo è quello con cui lavorerete. Contiene la configurazione per il menu di base o qualsiasi altra cosa che si ottiene all'avvio (se Windows Boot Manager funziona e può trovare BCD in primo luogo).

Sotto {bootmgr} ci sono un certo numero di sezioni “Windows Boot Loader” e forse altre sezioni, ognuna delle quali controlla un'azione o un'opzione di avvio.

Impostare il dual boot usando bcdedit (non serve altro)

Per il dual boot, si dice a bcdedit di /copy inserire un Windows Boot Loader esistente e conosciuto per il primo sistema operativo.

  • /copy per copiare una voce esistente
  • {current} è l’identificatore della voce che vuoi copiare. È una scorciatoia per la voce di avvio corrente. Se non è quello che vuoi fare il dual boot, usa l'identificatore corretto per quello che vuoi. Il testo di descrizione per ogni voce ti aiuterà a trovare quella che vuoi.
  • /d "Description for copied entry sarà la descrizione del nuovo elemento

Farà una copia di quella voce, gli darà la descrizione indicata e risponderà con il nuovo identificatore che ha dato alla copia:

bcdedit /copy {current} /d "Copy of my current Windows Boot Loader"

The entry was successfully copied to {5599a3fc-e4ee-11e7-a5f3-c86000d0b92a}.

Questo crea una voce indipendente con il nome giusto, ora dovete dirgli cosa fare. Dato che quasi nulla è cambiato nei sistemi operativi recenti, potete semplicemente impostare il device e l'osdevice sulla vostra partizione di Win7, e probabilmente funzionerà. Se necessario, guardate l'output di /enum quando avviate Win7 normalmente, e copiate le voci che sembra aspettarsi. Ma di solito è sufficiente assegnare temporaneamente una lettera al vostro 2° OS, come “Q”, e poi il comando è: bcdedit /set {NEW_IDENTIFIER} device partition=Q: o qualcosa del genere, e lo stesso per osdevice. bcdedit sistemerà le lettere di unità, vedi sotto. Puoi cancellare la lettera di unità temporanea una volta che è stata usata in bcd.

Poi aggiungetelo alla lista delle voci in {bootmgr} usando bcdedit /displayorder {NEW_ID} /addlast, e - cosa fondamentale - dite a bcd di mostrare un menu di avvio usando bcdedit /set {bootmgr} displaybootmenu Yes.

Fatto.

Nota - è sicuro usare lettere di unità “dispari” o “sbagliate” in BCD, ed è sicuro se anche l'output di /enum le contiene.

Per essere chiari, non dovete preoccuparvi che il vostro nuovo dispositivo sia identificato come Q: (o qualunque cosa sia) quando “dovrebbe essere C:”. bcdedit memorizza l'ID del disco rigido, non la lettera. Sta semplicemente accettando e visualizzando Q: per essere utile. Se un dispositivo ha una lettera, mostrerà di default la lettera invece dell'ID del dispositivo, per comodità. Puoi vedere questo rimuovendo o assegnando la lettera dal 2° OS in DISKPART o DISKMGMT.MSC e l'output di /enum tornerà immediatamente ad un \Device invece. In realtà è stato salvato l'ID corretto del disco rigido, e quando viene usato per l'avvio, Windows troverà quel dispositivo - la lettera è per facilità e non è mai stata effettivamente salvata.

3
3
3
2012-11-28 02:57:24 +0000

Avete bisogno di un comando BCDEdit /set per configurare il volume di avvio. Quindi aggiungi la voce al menu del sistema operativo Windows Boot Manager chiamando il comando BCDEdit /displayorder.

bcdedit /set {ntldr} device boot

Identificherà anche la partizione dell'altro sistema operativo o il seguente comando

bcdedit /set {ntldr} device partition=C:

La linea seguente rende la voce avviabile aggiungendola al menu

bcdedit /displayorder {ntldr} /addlast

Puoi verificare che la nuova voce apparirà nel menu di avvio eseguendo il comando bcdedit /enum ACTIVE e cercando la voce Windows Legacy OS Loader.

Nota : */create comando è usato per aggiungere sistemi operativi non Microsoft alla voce boot loader. *

Per maggiori informazioni al riguardo puoi leggere questo articolo sorgente


Per quanto riguarda la tua domanda su “ Differenza tra Windows Boot loader e Boot manager

Da wikipedia

Il processo di avvio di Windows NT inizia quando il computer trova un Windows boot loader, una parte del sistema operativo Windows responsabile di trovare Microsoft Windows e avviarlo. Sui sistemi IA-32 o x64, il boot loader è chiamato Windows Boot Manager (BOOTMGR). Prima di Windows Vista, tuttavia, il boot loader era NTLDR.

Vedi anche su technet .


Visual BCD Editor è una versione grafica avanzata dell'utilità bcdedit di Windows.

È il primo strumento GUI a implementare la modifica completa del negozio BCD (Boot Configuration Data) di Windows 7/Vista. Pagina di download per l'editor BCD visivo.

Prova l'opzione di riparazione nello strumento.

2
2
2
2013-09-29 04:16:20 +0000

In risposta alla domanda specifica dell'autore ribadita nei commenti (anche se differisce dalla sua domanda iniziale riguardo alle sequenze bcdedit.exe per realizzare lo stesso):

Forse quasi qualcosa di semplice come msconfig, tranne che ti permette di navigare in un'altra installazione di Windows e lui la aggiungerà per te. EasyBCD è esattamente quello che stai cercando (gratuito per uso personale). È uno strumento di gestione visuale del dual-boot per Windows, e l'aggiunta di una nuova voce di Windows avviene con un point-and-click, esattamente come lo hai descritto .

Ci sono molte risorse su EasyBCD online, quindi non ripeterò tutto qui. Fondamentalmente EasyBCD avvolge la complessità di bcdedit.exe e la estende con i propri moduli di bootloader per permetterti di impostare dual-boot con altre (più recenti o più vecchie) versioni di Windows, così come Linux, BSD, e altro.

Rivelazione completa: sono l'autore principale di EasyBCD.

-1
-1
-1
2017-11-17 00:12:31 +0000
bcdedit
bcdboot
bcdedit /create

Questo può essere puntato a un file come un file .vhd ma creato come una partizione diskpart e inizializzato e collegato, o montato al volo e riavviato come un SO. L'OS può essere nascosto dentro un'altra partizione. un'altra partizione può essere nascosta dentro un'altra partizione e l'OS dentro di essa. quando si esegue bcdedit per essere puntato a un altro file .vhd non importa dove si trova. Si carica. Il mio istruttore ha mostrato questo in classe ma non è riuscito o si è rifiutato di dare altre spiegazioni a bcdedit. Ma questo funziona per nascondere e far funzionare un sistema operativo completamente funzionale.

  1. bcdboot e:\windows
  2. bcdboot c:\windows