Migrare una macchina fisica Linux verso Microsoft Azure

Al giorno d’oggi, nella gestione di infrastrutture, può capitare di dover effettuare migrazioni di macchine fisiche verso il cloud. Questa operazione richiede un’attenta analisi dello scenario e una procedura dettagliata che può variare in base al sistema operativo che si vuol migrare.

In questa guida analizzeremo tutti gli step necessari per migrare una macchina fisica Ubuntu 16.04 verso i servizi cloud di Azure.

La prima fase racchiude tutte le operazioni relative alla preparazione della macchina nel rispetto dei requisiti di Azure.

1. Nella macchina fisica è necessario aggiornare gli archivi con quelli di Azure in /etc/apt/sources.list

Per effettuare l’operazione basterà eseguire da terminale:

# sudo sed -i 's/[a-z][a-z].archive.ubuntu.com/azure.archive.ubuntu.com/g' /etc/apt/sources.list

# sudo apt-get update

2. È necessario aggiornare il sistema operativo al kernel più recente eseguendo i comandi seguenti:

# sudo apt-get update

# sudo apt-get install linux-generic-hwe-16.04 linux-cloud-tools-generic-hwe-16.04

# sudo apt-get dist-upgrade

# sudo reboot

3. Modificare la configurazione di avvio del kernel per Grub in modo da includere ulteriori parametri del kernel per Azure.

Per fare questo, editare il /etc/default/grub e modificare la stringa GRUB_CMDLINE_LINUX_DEFAULT nel seguente modo:

GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300"

4. Dopo la modifica lanciare sudo update-grub per aggiornare la configurazione.

5. Per poter interfacciare la macchina con i servizi di Azure è necessario installare l’Agente Linux di Azure. L’installazione di questa componente avviene attraverso i seguenti comandi:

# sudo apt-get update

# sudo apt-get install walinuxagent

6. Successivamente è necessario effettuare il deprovisioning della macchina e prepararla per il provisioning in Azure:

# sudo waagent -force -deprovision

# export HISTSIZE=0

# logout

La seconda fase racchiude tutte le operazioni necessarie per convertire la macchina fisica in un’immagine. In questa fase ci avvarremo dell’utilizzo di due strumenti:

  • DD è una componente di Linux comunemente usata per creare le immagini di un disco e produrne un file immagine
  • VHDTool è uno strumento per Windows utilizzato per manipolare i file VHD (Download: http://bit.ly/1FWQzVx)
1. Per creare l’immagine del disco della macchina bisogna lanciare il seguente comando:

dd if=/dev/sda of=/mnt/my_ubuntu_disk.img

dove sda fa riferimento all’intero disco della macchina e my_ubuntu_disk.img è il nome di dell’immagine che andremo a creare all’interno di un mount point che potrà essere un disco esterno oppure una share di rete.

N.B. L’operazione potrebbe durare molto tempo in caso di disco di grosse dimensioni. Il prompt non darà alcun feedback fino al termine dell’operazione. È possibile monitorare lo stato della creazione dell’immagine dalle variazioni della dimensione del file.

DD crea l’immagine includendo anche lo spazio vuoto. Eventualmente è possibile usare ulteriori tool per ridurre la dimensione dell’immagine. È pertanto necessario utilizzare uno spazio di appoggio sufficientemente grande.

2. Dal prompt dei comandi di Windows lanciare VHDTool /convert c:\my_ubuntu_disk.img

3. Rinominare il file my_ubuntu_disk.img con estensione .vhd

Nella terza fase si procederà all’upload del VHD su Azure e alla creazione della macchina virtuale.

1. Tramite l’interfaccia della riga di comando di Azure 2.0 accedere alla sottoscrizione attraverso il comando az login

2. Creare un gruppo di risorse. I gruppi di risorse riuniscono in modo logico tutte le risorse di Azure a supporto delle macchine virtuali. Per creare il gruppo eseguire: az group create –name myResourceGroup –location westus

3. Creare un account di archiviazione per il VHD nel gruppo di risorse appena creato con il comando:

az storage account create --resource-group myResourceGroup --location westus \

     --name mystorageaccount --kind Storage --sku Standard_LRS

4. Generare le chiavi di accesso per l’account di archiviazione:

az storage account keys list --resource-group myResourceGroup --account-name mystorageaccount

Al termine dell’esecuzione del comando, prendere nota del valore di key1 poiché verrà utilizzato per accedere all’account di archiviazione.

5. Creare un contenitore di archiviazione per organizzare i dischi in modo logico:

az storage container create --account-name mystorageaccount \

--account-key valoredikey1 --name mydisks

6. Il seguente passaggio permetterà l’effettivo caricamento del VHD su Azure:

az storage blob upload --account-name mystorageaccount \

--account-key key1 --container-name mydisks --type page \

--file /path/to/disk/my_ubuntu_disk.vhd --name myUbuntu.vhd

7. Per creare una macchina virtuale dal disco rigido virtuale, occorre convertire innanzitutto il disco rigido virtuale in un disco gestito con il comando:

az disk create --resource-group myResourceGroup --name myManagedDisk \

--source https://mystorageaccount.blob.core.windows.net/mydisks/myUbuntu.vhd

8. Una volta creato il disco gestito, lanciando il seguente comando, si otterrà il suo URI di cui prenderemo nota:

az disk list --resource-group myResourceGroup \

    --query '[].{Name:name,URI:creationData.sourceUri}' --output table

9. Infine, per creare la macchina virtuale:

az vm create --resource-group myResourceGroup --location westus \

--name myVirtualMachine --os-type linux \

--admin-username miouser --admin-password miapassword \

--attach-os-disk uri_del_disco

Una volta terminata la procedura, avremo riprodotto la macchina fisica sul cloud di Azure. Da questo momento del completamento del deploy, potremo gestire la macchina dal portale di Azure.


Bisognerà effettuare delle verifiche sull’apertura degli endpoint corrispondenti ad eventuali porte configurate sulla macchina fisica. Inoltre, grazie ai servizi cloud, sarà possibile completare la configurazione aggiungendo nuove funzionalità alla macchina come ad esempio un set di disponibilità.