Configurare RAID software in Linux

I RAID software vengono spesso usati nelle macchine virtuali Linux in Azure per presentare più dischi dati collegati come se si trattasse di un singolo dispositivo RAID. In genere questa configurazione consente di migliorare le prestazioni e la velocità effettiva rispetto all'utilizzo di un unico disco.

Collegamento di dischi dati

Per configurare un dispositivo RAID sono necessari due o più dischi dati vuoti. Il dispositivo RAID viene creato principalmente per migliorare le prestazioni dell'I/O su disco. In base alle esigenze di I/O, è possibile scegliere di collegare dischi che sono archiviati nell'archiviazione Standard con un massimo di 500 IO/ps per ogni disco o nell'archiviazione Premium con un massimo di 5.000 IO/ps per ogni disco. In questo articolo non verrà illustrato in dettaglio come eseguire il provisioning e collegare dischi dati a una macchina virtuale Linux. Per istruzioni dettagliate su come collegare un disco dati vuoto a una macchina virtuale Linux in Azure, vedere l'articolo di Microsoft Azure relativo al collegamento di dischi.

Importante

Non combinare dischi di dimensioni diverse, in questo modo le prestazioni del raidset potrebbero essere limitate a quella del disco più lento.

Installazione dell'utility mdadm

  • Ubuntu

    sudo apt-get update
    sudo apt-get install mdadm
    
  • CentOS e Oracle Linux

    sudo yum install mdadm
    
  • SLES e openSUSE

    zypper install mdadm
    

Creazione delle partizioni del disco

In questo esempio verrà creata una singola partizione del disco in /dev/sdc. La nuova partizione del disco verrà denominata /dev/sdc1.

  1. Avviare fdisk per iniziare la creazione delle partizioni

    sudo fdisk /dev/sdc
    Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
    Building a new DOS disklabel with disk identifier 0xa34cb70c.
    Changes will remain in memory only, until you decide to write them.
    After that, of course, the previous content won't be recoverable.
    
    WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
                    switch off the mode (command 'c') and change display units to
                    sectors (command 'u').
    
  2. Premere 'n' al prompt per creare una nuova partizione:

    Command (m for help): n
    
  3. Successivamente, premere 'p' per creare una partizione primaria:

    Command action
            e   extended
            p   primary partition (1-4)
    
  4. Premere '1' per selezionare la partizione numero 1:

    Partition number (1-4): 1
    
  5. Selezionare il punto di inizio della nuova partizione oppure premere <enter> per accettare le impostazioni predefinite, che prevedono il posizionamento della partizione all'inizio dello spazio libero nell'unità:

    First cylinder (1-1305, default 1):
    Using default value 1
    
  6. Selezionare le dimensioni della partizione, ad esempio digitare '+10G' per creare una partizione da 10 gigabyte. In alternativa, premere <enter> per creare un'unica partizione che occupa l'intera unità:

    Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): 
    Using default value 1305
    
  7. Successivamente, modificare l'ID e il tipo della partizione dal valore predefinito '83' (Linux) a 'fd' (rilevamento automatico RAID Linux):

    Command (m for help): t
    Selected partition 1
    Hex code (type L to list codes): fd
    
  8. Infine, scrivere la tabella delle partizioni sull'unità e chiudere fdisk:

    Command (m for help): w
    The partition table has been altered!
    

Creazione dell'array RAID

  1. Nell'esempio seguente verrà eseguito lo striping (livello RAID 0) di tre partizioni situate in tre dischi dati separati (sdc1, sdd1, sde1). Dopo l'esecuzione del comando verrà creato un nuovo dispositivo RAID denominato /dev/md127 . Si noti anche che se i dischi dati facevano precedentemente parte di una matrice RAID inattiva, può essere necessario aggiungere il parametro --force al comando mdadm:

    sudo mdadm --create /dev/md127 --level 0 --raid-devices 3 \
        /dev/sdc1 /dev/sdd1 /dev/sde1
    
  2. Creare il file system nel nuovo dispositivo RAID

    CentOS, Oracle Linux, SLES 12, openSUSE e Ubuntu

    sudo mkfs -t ext4 /dev/md127
    

    SLES 11

    sudo mkfs -t ext3 /dev/md127
    

    SLES 11: abilitare boot.md e creare mdadm.conf

    sudo -i chkconfig --add boot.md
    sudo echo 'DEVICE /dev/sd*[0-9]' >> /etc/mdadm.conf
    

    Nota

    Dopo aver apportato queste modifiche nei sistemi SUSE può essere necessario il riavvio. Questo passaggio non è obbligatorio su SLES 12.

Aggiungere il nuovo file a /etc/fstab

Importante

Se il file /etc/fstab non viene modificato in modo corretto, il sistema potrebbe diventare instabile. In caso di dubbi, fare riferimento alla documentazione della distribuzione per informazioni su come modificare correttamente questo file. È inoltre consigliabile creare una copia di backup del file /etc/fstab prima della modifica.

  1. Creare il punto di montaggio desiderato per il nuovo file system, ad esempio:

    sudo mkdir /data
    
  2. Quando si modifica /etc/fstab è consigliabile utilizzare l' UUID anziché il nome del dispositivo per fare riferimento al file system. Usare l'utilità blkid per determinare l'UUID per il nuovo file system:

    sudo /sbin/blkid
    ...........
    /dev/md127: UUID="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" TYPE="ext4"
    
  3. Aprire /etc/fstab in un editor di testo e aggiungere una voce per il nuovo file system, ad esempio:

    UUID=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee  /data  ext4  defaults  0  2
    

    In alternativa, in SLES 11:

    /dev/disk/by-uuid/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee  /data  ext3  defaults  0  2
    

    Salvare e chiudere /etc/fstab.

  4. Verificare che la voce /etc/fstab sia corretta:

    sudo mount -a
    

    Se questo comando genera un messaggio di errore, verificare la sintassi nel file /etc/fstab file.

    Eseguire quindi il comando mount per assicurarsi che il file system venga montato:

    mount
    .................
    /dev/md127 on /data type ext4 (rw)
    
  5. (Facoltativo) Parametri di avvio alternativo

    Configurazione di fstab

    Molte distribuzioni includono i parametri di montaggio nobootwait o nofail, che è possibile aggiungere al file /etc/fstab. Tali parametri consentono di ignorare gli errori durante il montaggio di uno specifico file system. Consentono pertanto di proseguire l'avvio del sistema Linux anche se non è possibile montare correttamente il file system RAID. Per altre informazioni su questi parametri, fare riferimento alla documentazione della distribuzione.

    Esempio (Ubuntu):

    UUID=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee  /data  ext4  defaults,nobootwait  0  2
    

    Parametri di avvio di Linux

    Oltre ai parametri precedenti, il parametro del kernel "bootdegraded=true" consente di avviare il sistema anche se il RAID viene percepito come danneggiato o con funzionalità ridotte, ad esempio se un'unità dati viene rimossa accidentalmente dalla macchina virtuale. Per impostazione predefinita, questa situazione può rendere impossibile l'avvio del sistema.

    Per informazioni sulla corretta modifica dei parametri del kernel, fare riferimento alla documentazione della distribuzione. Ad esempio, in molte distribuzioni (CentOS, Oracle Linux, SLES 11) è possibile aggiungere manualmente tali parametri al file "/boot/grub/menu.lst". In Ubuntu è possibile aggiungere il parametro GRUB_CMDLINE_LINUX_DEFAULT alla variabile in "/etc/default/grub".

Supporto per TRIM/UNMAP

Alcuni kernel di Linux supportano operazioni TRIM/UNMAP allo scopo di rimuovere i blocchi inutilizzati sul disco. Nel servizio di archiviazione standard, queste operazioni sono particolarmente utili per informare Azure che le pagine eliminate non sono più valide e possono essere rimosse. L'eliminazione delle pagine consente di risparmiare sui costi quando si creano file di grandi dimensioni per poi eliminarli.

Nota

RAID non può inviare comandi di rimozione se le dimensioni del blocco per la matrice sono impostate su un valore inferiore a quello predefinito di 512 KB. Questo perché anche la granularità di annullamento del mapping nell'host è di 512 KB. Se le dimensioni del blocco della matrice sono state modificate tramite il parametro --chunk= di mdadm, il kernel può ignorare le richieste TRIM/UNMAP.

Esistono due modi per abilitare la funzione TRIM in una VM Linux. Come di consueto, consultare la documentazione della distribuzione per stabilire l'approccio consigliato:

  • Usare l'opzione di montaggio discard in /etc/fstab, ad esempio:

    UUID=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee  /data  ext4  defaults,discard  0  2
    
  • In alcuni casi l'opzione discard può avere implicazioni sulle prestazioni. In alternativa, è possibile eseguire il comando fstrim manualmente dalla riga di comando oppure aggiungerlo a crontab per eseguirlo a intervalli regolari:

    Ubuntu

    # sudo apt-get install util-linux
    # sudo fstrim /data
    

    RHEL/CentOS

    # sudo yum install util-linux
    # sudo fstrim /data