Dopo aver letto il titolo di quest'articolo, qualcuno potrebbe pensare "Perché fare un cosa simile quando posso utilizzare Ubuntu dentro Windows??". Il primo motivo è per dimostrare che è possibile, il secondo perché è divertente e il terzo è in preparazione del passo successivo: eliminare Windows. Scherzi a parte, chi ha provato le potenzialità di Linux tramite Windows Subsystem for Linux ed è rimasto positivamente colpito, dovrebbe proprio provare come "gira" direttamente su hardware anziché virtualizzato tramite Windows inoltre, questo è un ottimo modo anche per conoscere meglio il sistema con il pinguino, dato che andremo a fare un'installazione manuale, "vecchia scuola", senza configurazione guidata.

Come installare Linux dualboot direttamente Windows (tramite WSL)

Prerequisiti

Per poter effettuare questa operazione è necessario, oltre ovviamente ad aver configurato l'ultima versione di WSL, un secondo disco dove andremo ad installare Linux e che dovremo "esporre" a WSL.

Dato che dovremo creare e formattare la/le partizione/partizioni necessarie per l'installazione di Linux, non è possibile "montare" solo una partizione ma è necessario che WSL sia in grado di accedere direttamente al disco; poiché non si può utilizzare il disco dove è installato Windows (anche se ci fosse spazio sufficiente) per comprensibili ragioni, è quindi necessario avere un secondo disco disponibile ma questo non dovrà necessariamente essere occupato totalmente da Linux, potremo installare il nuovo sistema anche in una porzione sufficientemente grande.

» Leggi: Linux su Windows 10: la Grande Guida a WSL2. Come installare Sottosistema Windows per Linux (WSL), eseguire programmi, accedere ai file (video)

Per questa guida farò riferimento alla popolare distribuzione Ubuntu ma, in maniera analoga, è possibile installare qualunque altra distro disponibile per WSL. Con un po' di lavoro aggiuntivo è possibile fare anche un installazione di una diversa distribuzione rispetto a quella utilizzata nel WSL!

» Leggi: Anatomia di una distro Linux

Passo 1: esporre il disco al WSL

Eseguiremo la maggior parte delle operazioni tramite WSL ma prima di avviarlo, dobbiamo esporre il discodove andremo ad installare Ubuntu al sottosistema e per farlo occorre agire da Powershell eseguito come Amministratore. Controlliamo i dischi disponibili sul nostro sistema con il comando

wmic diskdrive list brief

Una volta identificato il disco corretto (tramite la grandezza o il numero di partizioni, ad esempio), prendiamo nota del DeviceID in modo da poterlo esporre a WSL proprio come se fosse collegato direttamente alla versione di Ubuntu in uso. Per farlo basterà digitare

wsl --mount \\.\PHYSICALDRIVE1 --bare

Come installare Linux dualboot direttamente Windows (tramite WSL)

Se abbiamo solo due dischi non dovremo preoccuparci troppo di sbagliare, dato che se indichiamo per errore quello contenente Windows, il secondo comando restituirà un errore.

A questo punto possiamo avviare WSL e controllare se il disco viene visto correttamente con il comando lsblk: nel mio caso risulta essere /dev/sdc

Come installare Linux dualboot direttamente Windows (tramite WSL)

Passo 2: partizionamento e formattazione

Iniziamo adesso l'installazione di Ubuntu!! Creiamo le partizioni necessarie e formattiamole; per questa guida creerò solo 3 partizioni ma potete aggiungerne altre (ad esempio per separate /home da /): la prima servirà per ospitare /boot/efi, la seconda sarà SWAP e l'ultima ovviamente servirà per /. Per farlo utilizzerò gdisk da invocare con sudo per poter accedere direttamente a /dev/sdc

sudo gdisk /dev/sdc

Ricordo che io utilizzerò un intero disco da dedicare all'installazione; se volte utilizzare solo parte del disco, dovrete aggiustare i comandi di conseguenza! Dato che è un disco nuovo, devo prima creare una tabella delle partizioni in GPT, premendo o. Poi creerò le 3 partizioni premendo ogni volta n, cambiando il numero della partizione, indicando il settore di inizio e di fine (oppure semplicemente la grandezza in MB o GB) e infine il codice per il tipo di partizione, che saranno: ef00 (EFI System Partition) per la partizione che ospiterà /boot/efi, 8200 per SWAP e 8300 per la partizione che ospiterà /. Termino comandando la scrittura delle modifiche con w e confermando con Y

Come installare Linux dualboot direttamente Windows (tramite WSL)

Al termine controllerò se le 3 partizioni sono state correttamente create con il solito comando lsblk e passerò alla formattazione. La EFI System Partition (che ospiterà /boot/efi) necessità del filesystem FAT, mentre per ospitare / scelgo btrfs; swap ovviamente ha il suo filesystem dedicato. I comandi da impartire saranno

sudo mkfs.fat -F 32 /dev/sdc1

sudo mkfs.btrfs /dev/sdc3

sudo mkswap /dev/sdc2

Come installare Linux dualboot direttamente Windows (tramite WSL)

Passo 3: montaggio delle partizioni e installazione sistema di base

Adesso che le nostre partizioni sono pronte possiamo montarle per poterci installare il sistema. Creiamo prima i punti di mount e poi montiamo le partizioni: per / io ho scelto /mnt/ubuntu e poi creiamo il percorso per /boot/efi all'interno.

ATTENZIONE all'ordine dei comandi da impartire!!

sudo mkdir /mnt/ubuntu

sudo mount /dev/sdc3 /mnt/ubuntu

sudo mkdir -p /mnt/ubuntu/boot/efi

sudo mount /dev/sdc1 /mnt/ubuntu/boot/efi

Come installare Linux dualboot direttamente Windows (tramite WSL)

Le nostre partizioni sono montate e possiamo quindi procedere a installare la base del sistema di Ubuntu (anche se ancora non possiamo proprio chiamarlo Ubuntu, siamo comunque in tempo per installare una sua diretta derivata!) con lo strumento debootstrap. Installiamolo e, dato che ci siamo, possiamo installare anche arch-install-scripts che ci servirà più avanti.

» Leggi: Come si installa un programma su Linux?

Una volta pronto tutto il necessario, dobbiamo solo indicare a debootstrap quale versione del sistema vogliamo (con il nome di versione: focal, groovy, hirsute, impish, jammy, ...) e dove vogliamo che sia installato (nella nostra / montata in /mnt/ubuntu) e attendere la fine dell'installazione.

sudo apt install debootstrap arch-install-scripts

sudo debootstrap jammy /mnt/ubuntu

Come installare Linux dualboot direttamente Windows (tramite WSL)

Passo 4: configurazione e installazione completa

A breve "entreremo" nel nuovo sistema per configurarlo e terminare l'installazione ma non avvieremo ancora il nuovo sistema, andremo a configurarlo tramite chroot. Per prima cosa però generiamo, con genfstab, la tabella dei filesystem /etc/fstab che terrà conto di come sono montate le partizioni nel nostro sistema durante ogni avvio.

sudo genfstab -U /mnt/ubuntu | sudo tee /mnt/ubuntu/etc/fstab

Come installare Linux dualboot direttamente Windows (tramite WSL)

Notiamo che, anche se abbiamo specificato a genfstab di utilizzare l'UUID (opzione -U) dei dischi, il file generato non contiene questo identificativo bensì il percorso del disco così come visto dal sistema in uso (che è virtualizzato!) e questo è un problema perché non è detto che sia visto allo stesso modo dalla nostra installazione "fisica" di Ubuntu!! Al momento che entreremo nel nuovo sistema sarà meglio correggere subito questo difetto altrimenti rischieremo che Ubuntu non sia in grado di avviarsi!!

Attenzione: quando entreremo nel sistema agiremo sempre come root! Controlliamo bene quello che abbiamo digitato prima di premere Invio, altrimenti rischiamo di dover ricominciare tutto daccapo!!

Utilizzeremo una particolare versione di chroot messa appunto dagli sviluppatori di ArchLinux, arch-chroot che si occuperà di gestire alcuni filesystem virtuali per noi, basterà indicare quale percorso dovrà considerare come nuova /

sudo arch-chroot /mnt/ubuntu

Andiamo subito a correggere /etc/fstab! Per vedere gli UUID dei dischi che dovremo sostituire al percorso, possiamo utilizzare blkid. Possiamo fare questa operazione "a mano", modificando una voce per volta oppure possiamo utilizzare uno script che faccia tutto in una volta. Se avete partizionato il disco in maniera semplice come ho fatto io, potete utilizzare lo script allegato (di cui potete vedere uno screenshot qua sotto); se avete configurato un sistema più complesso sarà meglio ricontrollarlo prima di eseguirlo e, se necessario, modificarlo

Come installare Linux dualboot direttamente Windows (tramite WSL)

Al termine meglio controllare che il file /etc/fstab sia esattamente come lo vogliamo!!

Come installare Linux dualboot direttamente Windows (tramite WSL)

Passiamo adesso a configurare la posizione geografica approssimativa (in modo da regolare automaticamente l'ora), la lingua di sistema e il tipo di tastiera utilizzata. Possiamo effettuare queste modifiche anche in seguito ma dato che richiedono solo 3 comandi e qualche click, meglio toglierci subito il pensiero

dpkg-reconfigure tzdata

Come installare Linux dualboot direttamente Windows (tramite WSL)

dpkg-reconfigure locales

Come installare Linux dualboot direttamente Windows (tramite WSL)

dpkg-reconfigure keyboard-configuration

Come installare Linux dualboot direttamente Windows (tramite WSL)

Infine completiamo l'installazione aggiungendo tutti i componenti della versione Desktop che desideriamo, non dobbiamo specificare ogni pacchetto che vogliamo, possiamo avvalerci dei metapacchetti che contengono la lista di tutti i pacchetti necessari; io ad esempio ho scelto di installare ubuntu-desktop-minimal che si compone comunque di più di 1200 pacchetti!! A questi aggiungiamo poi altri fondamentali pacchetti come linux-image-generic, linux-headers-generic e linux-firmware.

Come installare Linux dualboot direttamente Windows (tramite WSL)

Ricordo che è sempre possibile cambiare "flavors" in seguito se abbiamo sbagliato scelta o semplicemente se vogliamo provare qualcosa di nuovo

Come passare facilmente da Ubuntu a Kubuntu, Xubuntu, Lubuntu, Ubuntu Mate, Ubuntu Studio, Budgie Ubuntu e viceversa

Creiamo un nuovo utente e assicuriamoci di aggiungerlo al gruppo dei sudoers oltre agli altri gruppi solitamente attivi per questa distro

adduser cub3

usermod -a -G sudo,adm,cdrom,dip,plugdev,lpadmin cub3

Come installare Linux dualboot direttamente Windows (tramite WSL)

Passo 5: configuriamo il doppio avvio

Il nostro Ubuntu è ormai installato nel secondo disco, dobbiamo "solo" configurare l'avvio in modo da avere la scelta dei sistemi da avviare.

Installiamo il pacchetto grub-efi (dato che si tratta di un sistema con UEFI) e poi installeremo GRUB nel percorso dedicato che abbiamo appositamente creato (/boot/efi/). Se abbiamo un sistema con Secure Boot attivo e non vogliamo disattivarlo, dovremo installare anche il pacchetto shim-signed (che è firmato da Microsoft).

apt install grub-efi

Installiamo poi GRUB con il seguente comando. Con Secure Boot attivo dovremo aggiungere un altra opzione --uefi-secure-boot.

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB

Come installare Linux dualboot direttamente Windows (tramite WSL)

Noteremo che il comando sopra restituisce un avviso relativo alle variabili EFI che non si possono impostare in questo sistema (grub-install: warning: EFI variables cannot be set on this system.) e che dovremo completare l'installazione di GRUB manualmente (grub-install: warning You will have to complete the GRUB setup manually.). Diciamo subito che è normale e che non è un grosso problema ma richiede un minimo di lavoro aggiuntivo che vedremo in seguito.

Per adesso abbiamo terminato con WSL; usciamo quindi dall'ambiente chroot con exit e smontiamo tutte le partizioni montate prima di chiudere tutto

exit

sudo umount /mnt/ubuntu/boot/efi /ubuntu/

sudo swapoff -a

exit

Chiudiamo WSL, torniamo a Powershell, arrestiamo WSL e smontiamo il disco da questo con i comandi

wsl --shutdown

wsl --unmount \\.\PHYSICALDRIVE1

Come installare Linux dualboot direttamente Windows (tramite WSL)

Passo 6: avviamo la nuova installazione di Ubuntu!

Per correggere il problema riguardante GRUB ci possono essere varie soluzioni possibili ma la più pratica che sono riuscito a trovare comporta la sostituzione del bootloader di windows con GRUB tramite l'installazione di GRUB2win.

Scarichiamo l'ultima versione disponibile dal sito ufficiale, scompattiamo il file zip dove ci rimane più comodo e avviamo il file setup.exe.

Grub2win rileverà il metodo di boot e il sistema operativo in uso e, una volta cliccato su OK, scaricherà i necessari moduli compatibili dopodiché sarà possibile iniziare la configurazione cliccando su Setup

Come installare Linux dualboot direttamente Windows (tramite WSL)

GRUB2win cercherà tutte le partizioni, troverà il posto giusto dove installarsi e creerà una prima bozza della configurazione; a noi non rimarrà altro da fare che cliccare su Return to Setup Menu e successivamente su Close the Setup Program.

Come installare Linux dualboot direttamente Windows (tramite WSL)

A questo punto si aprirà una l'interfaccia di gestione di GRUB2win che potremo utilizzare anche per personalizzarne l'aspetto ma adesso ci concentreremo su quello che ci interessa: attivare il dual boot.

È possibile che nonostante il precedente setup abbia rilevato la partizione con Ubuntu, questo non sia stato inserito nel menù di avvio di GRUB: dovremo quindi inserirla manualmente cliccando su Manage Boot Menu e in seguito su Add A New Entry.

Nella nuova finestra sarà sufficiente selezionare Type: ubuntu e Root Partition la partizione dove abbiamo installato il sistema (quella che abbiamo montato in /mnt/ubuntu); salvo casi particolari, non è necessario aggiungere ulteriori parametri all'avvio, possiamo quindi cliccare su Apply e infine su OK per vedere la nuova voce appena creata aggiunta in fondo alla lista. A questo punto possiamo cliccare di nuovo su Apply per tornare alla schermata iniziale, dove dovremo assicurarci che GRUB2win sia impostato come predefinito, cliccando (se presente!) su Set GRUB2win As The Default e infine concludere l'operazione con OK.

ATTENZIONE: aggiornamenti di Windows possono sovrascrivere il nuovo bootloader, ripristinando quello di default. È opportuno quindi lasciare installato GRUB2win, aggiornarlo se necessario e lanciarlo al bisogno.

Come installare Linux dualboot direttamente Windows (tramite WSL)

Non ci rimane, infine, che riavviare il computer e selezionare Ubuntu nel menù di GRUB per trovarci sul nuovo sistema che potremo continuare a configurare come più ci piace

Come installare Linux dualboot direttamente Windows (tramite WSL)