Procedure consigliate per l'esecuzione di Linux in Hyper-V

Si applica a: Windows Server 2022, Azure Stack HCI, versione 20H2; Windows Server 2019, Windows Server 2016, Hyper-V Server 2016, Windows Server 2012 R2, Hyper-V Server 2012 R2, Windows Server 2012, Hyper-V Server 2012, Windows Server 2008 R2, Windows 10, Windows 8.1, Windows 8, Windows 7.1, Windows 7, Windows 7

Questo argomento contiene un elenco di raccomandazioni per l'esecuzione di macchine virtuali Linux in Hyper-V.

Ottimizzazione di file system Linux in file VHDX dinamici

Alcuni file system Linux possono usare quantità significative di spazio su disco reale anche quando il file system è per lo più vuoto. Per ridurre la quantità di spazio su disco reale dei file VHDX dinamici, prendere in considerazione le raccomandazioni seguenti:

  • Quando si crea VHDX, usare 1 MB BlockSizeBytes (dal valore predefinito 32 MB) in PowerShell, ad esempio:
PS > New-VHD -Path C:\MyVHDs\test.vhdx -SizeBytes 127GB -Dynamic -BlockSizeBytes 1MB
  • Il formato ext4 è preferibile a ext3 perché ext4 è più efficiente dello spazio ext3 quando viene usato con file VHDX dinamici.

  • Quando si crea il file system, specificare il numero di gruppi da 4096, ad esempio:

# mkfs.ext4 -G 4096 /dev/sdX1

Timeout del menu Grub in Macchine virtuali generazione 2

A causa dell'hardware legacy rimosso dall'emulazione nelle macchine virtuali di seconda generazione, il timer del conto alla rovescia del menu grub viene conteggiato troppo rapidamente per visualizzare il menu grub, caricando immediatamente la voce predefinita. Fino a quando grub non viene corretto per usare il timer supportato da EFI, modificare /boot/grub/grub.conf, /etc/default/grub o equivalente per avere "timeout=100000" anziché il valore predefinito "timeout=5".

Avvio PxE in Macchine virtuali di seconda generazione

Poiché il timer PIT non è presente nella Macchine virtuali di seconda generazione, le connessioni di rete al server TFTP PxE possono essere terminate prematuramente e impedire al bootloader di leggere la configurazione grub e caricare un kernel dal server.

In RHEL 6.x è possibile usare il bootloader EFI grub v0.97 legacy anziché grub2 come descritto di seguito: https://access.redhat.com/documentation/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-netboot-pxe-config-efi.html

Nelle distribuzioni linux diverse da RHEL 6.x è possibile seguire passaggi simili per configurare grub v0.97 per caricare kernel Linux da un server PxE.

Inoltre, sulla tastiera RHEL/CentOS 6.6 e l'input del mouse non funzioneranno con il kernel di preinstallazione che impedisce di specificare le opzioni di installazione nel menu. Per consentire la scelta delle opzioni di installazione, è necessario configurare una console seriale.

  • Nel file efidefault nel server PxE aggiungere il parametro kernel seguente "console=ttyS1"

  • Nella macchina virtuale in Hyper-V configurare una porta COM usando questo cmdlet di PowerShell:

Set-VMComPort -VMName <Name> -Number 2 -Path \\.\pipe\dbg1

Se si specifica un file kickstart nel kernel di pre-installazione, si evita anche la necessità di input da tastiera e mouse durante l'installazione.

Usare indirizzi MAC statici con clustering di failover

Le macchine virtuali Linux che verranno distribuite usando il clustering di failover devono essere configurate con un indirizzo MAC (Media Access Control) statico per ogni scheda di rete virtuale. In alcune versioni di Linux, la configurazione di rete potrebbe andare persa dopo il failover perché viene assegnato un nuovo indirizzo MAC alla scheda di rete virtuale. Per evitare di perdere la configurazione di rete, assicurarsi che ogni scheda di rete virtuale abbia un indirizzo MAC statico. È possibile configurare l'indirizzo MAC modificando le impostazioni della macchina virtuale in Gestione hyper-V o Gestione cluster di failover.

Usare schede di rete specifiche di Hyper-V, non la scheda di rete legacy

Configurare e usare la scheda Ethernet virtuale, ovvero una scheda di rete specifica di Hyper-V con prestazioni migliorate. Se sia le schede di rete legacy che quelle specifiche di Hyper-V sono collegate a una macchina virtuale, i nomi di rete nell'output di ifconfig -a potrebbero mostrare valori casuali, ad esempio _tmp12000801310. Per evitare questo problema, rimuovere tutte le schede di rete legacy quando si usano schede di rete specifiche di Hyper-V in una macchina virtuale Linux.

Usare l'utilità di pianificazione I/O noop/none per migliorare le prestazioni di I/O del disco

Il kernel Linux offre due set di utilità di pianificazione di I/O del disco per riordinare le richieste. Un set riguarda il sottosistema "blk" precedente e un set è per il sottosistema "blk-mq" più recente. In entrambi i casi, con i dischi a stato solido di oggi è consigliabile usare un'utilità di pianificazione che passa le decisioni di pianificazione all'hypervisor Hyper-V sottostante. Per i kernel Linux che usano il sottosistema "blk", si tratta dell'utilità di pianificazione "noop". Per i kernel Linux che usano il sottosistema "blk-mq", si tratta dell'utilità di pianificazione "none".

Per un disco specifico, le utilità di pianificazione disponibili possono essere visualizzate in questo percorso del file system: /sys/class/block/<diskname>queue/scheduler, con l'utilità di pianificazione attualmente selezionata tra parentesi quadre. È possibile modificare l'utilità di pianificazione scrivendo in questo percorso del file system. La modifica deve essere aggiunta a uno script di inizializzazione per rendere persistente i riavvii. Per informazioni dettagliate, vedere la documentazione della distribuzione linux.

NUMA

I kernel Linux con versione precedente a 2.6.37 non supportano NUMA in Hyper-V con macchine virtuali di dimensioni maggiori. Questo problema incide principalmente sulle distribuzioni precedenti che usano il kernel upstream Red Hat 2.6.32. Il problema è stato risolto in Red Hat Enterprise Linux (RHEL) 6.6 (kernel-2.6.32-504). I sistemi che eseguono kernel personalizzati con versione precedente a 2.6.37 o kernel basati su RHEL con versione precedente a 2.6.32-504 devono impostare il parametro di avvio numa=off nella riga di comando del kernel in rub.conf. Per altre informazioni, vedere l'articolo KB 436883 di Red Hat.

Riservare più memoria per kdump

Nel caso in cui il kernel di acquisizione dump finisca con un panico all'avvio, riservare più memoria per il kernel. Ad esempio, modificare il parametro crashkernel=384M-:128M in crashkernel=384M-:256M nel file di configurazione di Ubuntu grub.

La compattazione di VHDX o l'espansione di file VHDX e VHDX possono comportare tabelle di partizione GPT errate

Hyper-V consente la compattazione dei file VHDX (Virtual Disk) senza considerare le strutture di dati di partizione, volume o file system che possono esistere sul disco. Se il VHDX viene ridotto a dove termina il VHDX prima della fine di una partizione, i dati possono andare persi, tale partizione può essere danneggiata o i dati non validi possono essere restituiti quando la partizione viene letta.

Dopo il ridimensionamento di un disco rigido virtuale o VHDX, gli amministratori devono usare un'utilità come fdisk o parted per aggiornare le strutture di partizione, volume e file system in modo da riflettere la modifica delle dimensioni del disco. La compattazione o l'espansione delle dimensioni di un disco rigido virtuale o VHDX con una tabella di partizione GUID (GPT) genererà un avviso quando viene usato uno strumento di gestione delle partizioni per controllare il layout della partizione e l'amministratore verrà avvisato di correggere le intestazioni GPT prime e secondarie. Questo passaggio manuale è sicuro da eseguire senza perdita di dati.

Riferimenti aggiuntivi