Windows 10 in KVM: cambia il disco di avvio in Virtio


25

Ho installato una macchina virtuale Windows 10 usando un disco IDE e ora vorrei cambiare il disco per usare il driver Virtio.

Per altre versioni di Windows, l'approccio in questa domanda sembra essere sufficiente: come migrare una VM IDE su una VM virtio?

Tuttavia, con Windows 10, questo porta a un INACCESSIBLE_BOOT_DEVICEproblema.

Sono consapevole che l'approccio preferito è l'uso del dispositivo Virtio dall'inizio e installare il driver virtio appropriato quando richiesto. Sfortunatamente stavo avendo alcuni problemi separati con la modifica del CD in KVM (non riuscivo nemmeno a far funzionare 2 dispositivi CDROM).

Esiste un modo per correggere questo problema senza reinstallare?

Problema simile qui - https://me.m01.eu/blog/2015/03/windows-10-kvm-and-iscsi/#comment-36090


+1. Non sono riuscito a capire questo problema da solo. A seguito di varie soluzioni alternative per le versioni precedenti di Windows, ho provato a installare il driver VirtIO sulla VM di Windows dopo aver collegato un dispositivo a blocchi VirtIO, ma ho ancora ottenuto la INACCESSIBLE_BOOT_DEVICEschermata blu. Ho finito per reinstallare su un dispositivo di avvio VirtIO.
Deltik,

Perché sono pigro, lo posterò come commento per verificare: aggiungere un disco aggiuntivo, con virtio "controller". Installa il driver quando Windows ti chiede di farlo. Non è necessario creare partizioni o altro. Quindi passare il disco di avvio su virtio. Poiché un'istanza del driver del controller è ora installata (molto importante), dovrebbe funzionare.
Daniel B

@DanielB: è esattamente quello che ho fatto. Sembra che il tuo suggerimento
funzioni

Va bene. Bene, credo di avere il modo migliore per non risolvere il tuo problema (lol): basta modificare l'ISO di Windows e includere i driver. Tieni presente che deve rimanere avviabile. In questo modo puoi (si spera) installare direttamente su virtio.
Daniel B,

1
@DanielB: il driver VirtIO può essere caricato nel processo di installazione con un disco driver separato. Se Windows 10 è installato con il driver VirtIO, non ci sono problemi. È solo che le istruzioni esistenti su Internet per passare da IDE a VirtIO non funzionano per le macchine virtuali KVM di Windows 10.
Deltik,

Risposte:


24

Tutte le risposte sono corrette ma potrebbe essere necessario eseguire alcuni passaggi aggiuntivi dopo aver installato i driver virtio. Ecco i passaggi che ho seguito:

  1. Aprire un prompt dei comandi con privilegi elevati e impostare la macchina virtuale per l'avvio in modalità provvisoria digitando

    bcdedit / set {current} safeboot minimal

  2. arrestare la macchina virtuale e modificare il tipo di dispositivo di avvio in virtio.

  3. avviare la VM. Entrerà in modalità provvisoria.

    Nota: in modalità provvisoria tutti i driver di avvio verranno abilitati e caricati, incluso il driver virtio. Dato che ora è installato un miniport per usarlo, il kernel lo renderà parte dei driver che devono essere caricati all'avvio e non lo disabiliterà nuovamente.

  4. nella VM avviata ripristinare le impostazioni di bcdedit per consentire alla macchina di avviarsi in modalità Normale digitando (di nuovo nel prompt dei comandi con privilegi elevati):

    bcdedit / deletevalue {current} safeboot

  5. Fatto.


1
Fantastico! Questa era la parte mancante per me. Ho usato bcdedit /set safeboot minimal, omettendo il {current}perché non ero sicuro di cosa sarebbe dovuto andare lì.
Charles Green,

2
@CharlesGreen {current}è letterale, si digita così com'è.
Marc.2377,

Problema se si dispone dell'accesso PIN perché l'accesso con password può richiedere l'accesso alla rete. Sto reinstallando Windows di conseguenza. answer.microsoft.com/en-us/windows/forum/windows_10-security/…
Andrew Olney,

Ho provato con bcdedit / set {current} safeboot network nel primo passaggio per evitare il problema di accesso, ho anche creato un utente locale per essere più sicuro e non credo davvero che il problema mi sia stato applicato, ma poiché la macchina è collegato a un dominio e non ho il controllo di tutto ciò che volevo assicurarmi di non aver fatto nulla di male. E il parametro di rete almeno non ha rovinato il processo.
HackerBaloo,

come si fa 1), ovvero il prompt elevato?
Frederick Nord,

16

Viene fornita una risposta abbastanza semplice , che può funzionare in molti casi, insieme a suggerimenti su altre opzioni. Se (come me) non sei in grado di passare a IDE e sei costretto a usare VirtIO, il seguente approccio alternativo potrebbe funzionare:

  1. Aggiungi ISO di Windows 10 DVD / CD e driver virtio ISO a VM.
  2. Avviare Windows 10 DVD / CD e accedere a un prompt dei comandi dall'opzione della modalità di riparazione.
  3. Caricare il driver tramite l'interfaccia della riga di comando, ad es drvload e:\viostor\w10\amd64\viostor.inf
    • Nel mio caso e: è stato assegnato l'ISO virtio install.
    • Dopo aver caricato il driver f: era dove è stata montata l'installazione di Windows.
  4. Utilizzare il comando DISM per iniettare il driver del controller di archiviazione
    • Per esempio dism /image:f:\ /add-driver /driver:e:\viostor\w10\amd64\viostor.inf
    • Come sopra, modifica le assegnazioni delle lettere di unità in base al tuo ambiente.

Evita di dover giocherellare con la creazione di speciali CD / immagini di avvio di Windows e "patch" l'immagine di installazione di Windows reale al volo.

Nota, per questo caso di nicchia, suggerirei di evitare la riparazione all'avvio (che non è riuscita per me). Non sembra sapere come includere vistor.inf dopo averlo caricato e, se lo provi, fai attenzione a evitare l'entusiasmo del DVD di Windows 10 per ripristinare o reinstallare tutto ...

Credito per l'approccio DISM: utilizzo di dism per aggiungere driver


1
Alternativa a 4: fare clic con il tasto destro del mouse sul file inf -> Installa.
rbs,

Inoltre, fai attenzione a Windows Update che non funziona. Come da un post reddit, "l'aggiornamento ha cancellato i miei driver VirtIO": reddit.com/r/VFIO/comments/6b06y5/… . Questo potrebbe accadere nel caso angolare quando si esegue l'installazione di Windows sia come dual boot che come VM e si applica l'aggiornamento quando si utilizza l'hardware nativo ...
JPvRiel

1
Questo, oltre alla risposta di seguito. Ho dovuto eseguire l'avvio in Modalità provvisoria (bcdedit / set {current} safeboot minimal) e quindi rimuovere l'avvio in Modalità provvisoria (bcdedit / deletevalue {current} safeboot), quindi riavviare. Successivamente, ha funzionato con Windows Server 2016 Essentials.
G Trawo,

10

I passaggi da seguire in generale sono:

  1. Installa i driver VirtIO nella VM
  2. Imposta il disco di sistema della VM per usare VirtIO
  3. Se la macchina virtuale non si avvia, eseguire Startup Repair o addirittura Repair Install

La procedura in dettaglio è:

  1. Restituisce il disco di avvio su IDE.
  2. Assicurarsi che la VM di Windows sia arrestata.
  3. Scarica l'ISO dei driver VirtIO da qui .
  4. Montalo sull'unità CD per la VM.
  5. Aggiungi un dispositivo di archiviazione di tipo VirtIO. L'allocazione delle dimensioni non ha importanza poiché la si utilizza per installare i driver.
  6. Avviare la VM di Windows. Tenterà di installare i driver. In caso contrario, apri Gestione dispositivi e dovresti vedere il dispositivo SCSI elencato con l'icona del punto esclamativo accanto ad esso. È possibile scegliere di aggiornare il driver e selezionare la directory appropriata ISO montata. Una volta installato, non riavviare ma arrestare la macchina.
  7. Nelle impostazioni di virt-manager per Windows, modifica il tipo di archiviazione da IDE a VirtIO.
  8. È possibile rimuovere il dispositivo di archiviazione creato in precedenza. Non è più necessario.
  9. Avvia Windows, dovrebbe avviarsi e installare i driver SCSI. Sarà necessario riavviare dopo averlo fatto.
  10. Se la VM non si avvia ma i driver sono installati, è possibile provare a fare:

    1. Ripristino all'avvio che può risolvere alcuni problemi di sistema che potrebbero impedire l'avvio di Windows.
    2. L'ultima soluzione: ripara Installa durante l'avvio dall'ISO di Windows 10. Ciò manterrà tutte le applicazioni e le impostazioni dell'utente, aggiornando solo Windows e l'avvio. Usa un ISO di Windows 10 recente.

Se l'ultimo passaggio è purtroppo necessario, un'altra difficoltà che potrebbe verificarsi è se il CD di avvio di Windows non è in grado di comprendere il disco VirtIO perché questi driver non sono stati inclusi in esso da Microsoft. In questo caso, è necessario creare un CD / USB di avvio personalizzato che contenga questi driver, ma accertarsi di iniziare da un ISO di Windows dello stesso livello dell'installazione ottenendo quello più recente (attualmente 1511).

Ecco alcuni tutorial su come integrare i driver in Windows:


Questa risposta funzionerebbe (e funzionerà per altre versioni su Windows), tranne che al passaggio 9, quando si tenta di avviare c'è un errore INACCESSIBLE_BOOT_DEVICE (questo è dove ero quando ho pubblicato la domanda). Una riparazione all'avvio (10.1) non funziona e il passaggio 10.2 non è effettivamente possibile. Un'installazione di riparazione può essere eseguita solo avviando prima il sistema, senza il CD, quindi eseguendolo setup.exesul CD. Questo è ciò che descrive il link nella domanda e per quanto ne so non c'è altro modo per farlo.
Graeme,

Quali altre informazioni dovrei fornire esattamente? Ti ho ripetutamente detto che l'opzione non c'è. Il problema qui è che insisti continuamente che lo sia. Se si verificano "dozzine di altri in vari articoli trovati su Internet", fare riferimento a uno. Collega un articolo che descrive come eseguire l'avvio dal CD e avviare un'installazione di riparazione, senza prima avviare il sistema installato ed eseguirlo setup.exesul CD. Collega un articolo da una fonte affidabile che dimostra che non stai mentendo apertamente e io mi scuserò e ti darò il tuo prezioso voto.
Graeme,

Vedi ad esempio questo video su come eseguire Ripristino all'avvio su Windows 10 dal supporto di installazione. In caso contrario, prova a utilizzare il Prompt dei comandi . Come ho detto sopra, potresti aver bisogno della ISO integrata: non ho idea se l'installazione di WIn10 contenga i driver VirtIO.
harrymc,

Oppure puoi adattare il metodo drvload per aggiungere i driver VirtIO all'immagine di installazione di Windows PE avviata.
harrymc,

2
Mentre la risposta sopra sembra buona e sembra semplice, purtroppo con la mia VM che utilizza l' pc-q35-2.5emulazione / tipo di macchina, non è possibile aggiungere un controller IDE.
JPvRiel,

5

la risposta di harrymc funziona bene per me.

ho seguito i seguenti passi:

  1. Installa il driver virtio su Windows
  2. Aggiungi un disco virtio "fittizio" aggiuntivo. Riavvia e controlla se il "manichino" funziona.
  3. Se il passaggio 2 funziona, passa a virtio il disco di avvio.
  4. Reboot
  5. Rimuovere il disco virtio "fittizio" aggiuntivo
  6. ...

Si prega di non aggiungere "grazie" come risposte. Investi un po 'di tempo nel sito e otterrai i privilegi sufficienti per migliorare le risposte che ti piacciono, che è il modo Super User di dire grazie.
DavidPostill

1
Questa è una risposta sottovalutata: in Proxmox Windows 10 ha avuto problemi a inizializzare, anche dopo aver installato tutti i driver. Ho dovuto creare un piccolo disco da 1 GB come dispositivo a blocchi VirtIO, avviare la VM, verificare che fosse visualizzata correttamente, quindi spegnere + cambiare l'unità principale in VirtIO. Windows 10 non ha rilevato correttamente il driver dell'HDD, quindi ho dovuto convincerlo a caricarlo all'avvio prima di effettuare il passaggio.
Albert H

3

Sfortunatamente è possibile avere il driver perfettamente installato e ANCORA ottenere "Dispositivo di avvio inaccessibile". Il motivo è un po 'scioccante (trovo): un'installazione di Win 10 "ricorda" i driver richiesti al momento della prima installazione e per impostazione predefinita NON caricherà altri driver di archiviazione all'avvio. A quanto pare, ciò viene fatto per "pirateria" - rende difficile eseguire la "stessa" installazione su hardware diverso. C'è una grande documentazione su questa "caratteristica" in questo post dai forum di Gentoo. L'essenza è la seguente:

I driver destinati al caricamento vietato all'avvio possono essere determinati come segue: All'interno della chiave di registro Computer \ HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services è presente una sottochiave per ogni driver noto all'installazione. Il nome di questa sottochiave è solo il nome del driver. All'interno di ogni sottochiave del driver, ci sarà una sottochiave "STARTOVERRIDE" se a quel driver deve essere impedito il caricamento all'avvio. In particolare, all'interno della sottochiave STARTOVERRIDE è presente un parametro il cui nome è "0". Se il valore di questo parametro è "3", non verrà caricato all'avvio. Se si imposta questo valore su 0, il comportamento verrà "ignorato".

Io stesso vado su Computer \ HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services e cerco "STARTOVERRIDE". Ogni volta che lo trovo, se sotto c'è un nome chiamato "0" con valore "3", cambio a "0". Questo sembra essere eccessivo, devi solo cambiare l'unità che deve essere caricata. Nel mio caso ce ne sono diversi, e non ricordo mai quale, quindi faccio solo una "ricerca F3" all'interno di quella sezione "servizi".

E un ultimo suggerimento che non è necessario per l'archiviazione virtio corrente, firmata, ma potrebbe essere quello di qualcun altro che legge questo se vogliono usare un driver più sperimentale che non è (ancora) firmato: ho scoperto che ANCHE dopo aver fatto quanto sopra trucco, ho anche dovuto avviare nella schermata delle opzioni avanzate e scegliere F7 ("disabilitare la verifica della firma del driver"). Stranamente, non è stato sufficiente impostare il flag bcd per disabilitare la verifica del driver, perché il driver deve essere caricato prima che la macchina legga il BCD e scopra che non è necessario verificare la firma.

Tutto sommato, non l'ora più brillante di Microsoft. Devi davvero odiare i tuoi utenti se preferisci dare agli utenti legittimi una schermata blu artificiale inventata piuttosto che consentire alle persone (diciamo) di sostituire un disco SATA con un disco NVMe e farlo "solo funzionare".


Grazie per aver fornito così tanti dettagli, questa è la soluzione più praticabile! Un unico file per importare e risolvere tutto.
Florian Heigl,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.