Condividi tramite


Errore di arresto di Windows - Stato Nessuna memoria

Si applica a: ✔️ macchine virtuali di Windows

Questo articolo fornisce i passaggi per risolvere i problemi in cui Windows non si avvia e visualizza il codice di stato o di errore #0xC0000017, noto anche come "Stato assenza memoria".

Sintomo

Quando utilizzi Diagnostica di avvio per visualizzare lo screenshot della macchina virtuale (VM), vedrai che lo screenshot mostra il codice di errore:0xC0000017. A seconda della versione di Windows in esecuzione, potresti vedere questo codice visualizzato in Windows Boot Manager o nella schermata di ripristino.

Windows Boot Manager

Screenshot del codice di errore 0xC0000017 in Windows Boot Manager.

Schermata di ripristino

Screenshot del codice di errore 0xC0000017 nella schermata di ripristino.

Causa

Il disco del sistema operativo è pieno, troppo frammentato oppure il sistema operativo (SO) non è in grado di accedere alla memoria o al file di paging o a entrambi.

Soluzione

Panoramica del processo

Suggerimento

Se hai un backup recente della VM, puoi provare a ripristinare la VM dal backup per risolvere il problema di avvio.

  1. Creare e accedere a una macchina virtuale di ripristino
  2. Liberare spazio sul disco
  3. Eliminare la memoria danneggiata dall'archivio BCD
  4. Ripristina il file di paging nella posizione predefinita
  5. Abilitare la console seriale e la raccolta di dump di memoria
  6. Ricostruire la macchina virtuale

Note

Quando si verifica questo errore, il sistema operativo guest non è operativo. Risolverai i problemi in modalità offline per risolvere questo problema.

Creare e accedere a una macchina virtuale di ripristino

  1. Utilizzare i passaggi 1-3 dei comandi di riparazione della VM per preparare una VM di riparazione.
  2. Utilizzando Connessione Desktop remoto, collegarsi alla macchina virtuale di ripristino.

Per le macchine virtuali di generazione 2, assegnare una lettera alla partizione Extensible Firmware Interface (EFI)

Se si utilizza una macchina virtuale di generazione 2, la partizione EFI del disco collegato potrebbe non avere una lettera assegnata. Dovrai seguire i passaggi seguenti per assegnare una lettera alla partizione prima di procedere con questa guida alla risoluzione dei problemi.

  1. Nella Ricerca di Windows, immettere diskmgmt e aprire console Gestione disco.

  2. Identificare il disco danneggiato collegato alla VM di riparazione. In genere, questo disco è elencato per ultimo nella console e ha il valore numerico più alto.

  3. Nota se in quel disco c'è una partizione che contiene la EFI System Partition, che non ha un valore di lettera assegnato (come l'unità F:). Se tutte le partizioni sono assegnate, puoi andare avanti per liberare spazio sul disco. Altrimenti, continua ad assegnare una lettera a questo disco.

    Screenshot della finestra Gestione disco, che mostra una partizione che contiene la partizione di sistema E F I.

  4. Aprite un prompt dei comandi con privilegi elevati come amministratore e digitate diskpart per avviare lo strumento DISKPART.

  5. Immettere i comandi seguenti:

    list disk
    sel disk <NUMBER OF THE ATTACHED DISK>
    list partition
    sel partition <NUMBER OF THE SYSTEM (EFI) PARTION>
    assign
    
    • Nel comando, sostituire <NUMBER OF THE ATTACHED DISK> con il numero del disco identificato nel passaggio 2.
    • Nel comando, sostituire <NUMBER OF THE SYSTEM PARTION> con il numero della partizione del sistema EFI. A questa partizione non è stata ancora assegnata una lettera, ma dovrebbe essere del tipo Sistema e avere una dimensione di circa 100 MB.

    Note

    Confrontare le partizioni nella console Gestione disco con quelle elencate nello strumento DISKPART può essere utile per determinare quale numero di partizione corrisponde alla partizione di sistema EFI nel disco collegato.

  6. Chiudere la finestra del prompt dei comandi.

Liberare spazio sul disco

Ora che il disco danneggiato è collegato alla VM di riparazione, è necessario verificare che il sistema operativo su quel disco disponga di spazio sufficiente per funzionare correttamente.

  1. Controlla se il disco è pieno facendo clic con il pulsante destro del mouse sull'unità del disco collegato e selezionando Proprietà.

  2. Se il disco ha meno di 300 Mb di spazio libero, espandilo fino a un massimo di 1 Tb utilizzando PowerShell.

  3. Una volta che la dimensione del disco è 1 Tb, dovrai eseguire una pulizia del disco. Puoi utilizzare lo strumento Pulizia disco per liberare spazio.

  4. Apri un'istanza del prompt dei comandi con privilegi elevati (esegui come amministratore) ed esegui una deframmentazione sull'unità:

    defrag <LETTER ASSIGNED TO THE OS DISK>: /u /x /g

    • A seconda del livello di frammentazione, la deframmentazione potrebbe richiedere ore.
    • Nel comando, sostituire <LETTER ASSIGNED TO THE OS DISK> con la lettera del disco del sistema operativo (ad esempio, unità F:).

Pulisci la memoria danneggiata dall'archivio dei dati di configurazione di avvio (BCD).

  1. Apri un prompt dei comandi con privilegi elevati (esegui come amministratore).

  2. Interrogare il file di configurazione di avvio per i flag di memoria errata con il seguente comando:

    bcdedit /store <LETTER ASSIGNED TO THE OS DISK>:\boot\bcd /enum {badmemory}

    • Nel comando, sostituire <LETTER ASSIGNED TO THE OS DISK> con la lettera del disco del sistema operativo (ad esempio, unità F:).
  3. Se la query non mostra blocchi di memoria difettosi, passa all'attività successiva. Altrimenti, continua con il passaggio 4.

  4. Se vengono identificati blocchi di memoria danneggiati, questi blocchi impediscono la creazione di un disco RAM e devono essere eliminati con il seguente comando:

    bcdedit /store <LETTER ASSIGNED TO THE OS DISK>:\boot\bcd /deletevalue {badmemory} badmemorylist

    • Nel comando, sostituire <LETTER ASSIGNED TO THE OS DISK> con la lettera del disco del sistema operativo (ad esempio, unità F:).

Ripristina il file di paging nella posizione predefinita

Il file di paging memorizza i dati che non possono essere conservati dalla memoria ad accesso casuale (RAM) del computer come forma di overflow/backup. È possibile che il file sia ospitato in un VHD anziché nell'unità Temp, che è la posizione predefinita di Azure. In caso affermativo, il file potrebbe non essere accessibile e dovrebbe essere ripristinato nella posizione predefinita.

Prima di eseguire qualsiasi operazione, è necessario creare una copia della cartella \windows\system32\config su un disco integro. Questo passaggio assicura che possa annullare eventuali modifiche indesiderate. Lavorerai su file di sistema importanti, quindi questa precauzione è altamente raccomandata.

  1. Nella ricerca di Windows, inserisci regedit e apri l'applicazione Editor del Registro di sistema.

  2. Nell'Editor del Registro di sistema, evidenziare la chiave HKEY_LOCAL_MACHINE e selezionare File> Carica hive... dal menu.

    Lo screenshot mostra i passaggi per caricare un hive nell'editor del Registro di sistema.

  3. Nella finestra di dialogo Carica Hive, seleziona \windows\system32\config\SYSTEM e fai clic su Apri.

    1. Ti verrà richiesto un nome, che devi inserire BROKENSYSTEM. Questo nome aiuterà a differenziare gli alveari interessati durante la risoluzione dei problemi.
    2. Espandi HKEY_LOCAL_MACHINE per vedere la nuova chiave BROKENSYSTEM che hai aggiunto.
  4. Utilizzando l'editor del registro, determinare da quale ControlSet si sta avviando la macchina.

    1. Vai a HKEY_LOCAL_MACHINE>> BROKENSYSTEM>> Seleziona.
    2. Nelle chiavi elencate, notare il valore dei dati di Corrente. Ad esempio, se questo valore è 1 o 0x00000001 (1), il set di controllo sarà ControlSet001.
  5. Controllare la posizione in cui è configurata la creazione di PageFile.

    1. Mentre sei in HKEY_LOCAL_MACHINE\BROKENSYSTEM, espandi la directory corrispondente al numero di ControlSet identificato nel passaggio 4, ad esempio ControlSet001.
    2. Passare a Controllo>> Gestore sessioni>> Gestione memoria e prendere nota della posizione della chiave ExistingPageFiles.
    3. Questa chiave deve trovarsi nel percorso di Azure predefinito dell'unità temporanea. Se non è presente e si trova in un disco rigido virtuale in un'altra posizione, ad esempio l'unità disco dati o l'unità del sistema operativo, sarà necessario eliminarla.
    4. Passare a quella posizione in Esplora file e quindi eliminare il file pagefile.sys.

Abilita la console seriale e la raccolta di dump della memoria

Opzione consigliata: prima di ricompliare la macchina virtuale, attivare la Console seriale e la raccolta dei dump di memoria seguendo i seguenti passaggi:

  1. Aprire una sessione del prompt dei comandi con privilegi elevati come amministratore.

  2. Eseguire i seguenti comandi BCDEdit utilizzando le opzioni /ems e /emssettings:

    Attivare la console seriale:

    bcdedit /store <volume-letter-containing-the-bcd-folder>:\boot\bcd /ems {<boot-loader-identifier>} ON
    bcdedit /store <volume-letter-containing-the-bcd-folder>:\boot\bcd /emssettings EMSPORT:1 EMSBAUDRATE:115200
    
  3. Verificare che lo spazio libero sul disco del sistema operativo sia maggiore della dimensione della memoria (RAM) sulla macchina virtuale.

    Se lo spazio sul disco del sistema operativo non è sufficiente, è necessario modificare la posizione in cui viene creato il file di dump della memoria e fare riferimento a qualsiasi disco dati collegato alla macchina virtuale che disponga di spazio libero sufficiente. Per modificare la posizione, sostituisci %SystemRoot% con la lettera dell'unità del disco dati, ad esempio F:, nei seguenti comandi.

    Per abilitare il file di dump del sistema operativo, eseguire i seguenti comandi load, add e unload per implementare la configurazione suggerita utilizzando lo strumento reg:

    Caricare l'hive del Registro di sistema dal disco del sistema operativo danneggiato:

    reg load HKLM\<broken-system> <volume-letter-of-broken-os-disk>:\windows\system32\config\SYSTEM
    

    Abilitare su ControlSet001:

    reg add "HKLM\<broken-system>\ControlSet001\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f
    reg add "HKLM\<broken-system>\ControlSet001\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f
    reg add "HKLM\<broken-system>\ControlSet001\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f
    

    Abilitare su ControlSet002:

    reg add "HKLM\<broken-system>\ControlSet002\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f
    reg add "HKLM\<broken-system>\ControlSet002\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f
    reg add "HKLM\<broken-system>\ControlSet002\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f
    

    Scaricare il disco del sistema operativo danneggiato:

    reg unload HKLM\<broken-system>
    

Ricostruire la macchina virtuale

Utilizzare il passaggio 5 dei comandi di riparazione della VM per ricostruire la VM.

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.