Guide

Proxmox 5.x: zfs, raid, sostituzione disco, e controllo dello stato di salute del pool

Obiettivo di questo articolo

Familiarizzare con le funzionalità del cluster Proxmox VE come: file system zfs, zfs-raid, e cosa fare in caso si debba sostituire un disco.

Software utilizzato

Proxmox VE ver. 5.1 (ma replicabile sulle versione 5.x)

Hardware utilizzato

3 A3Server ogniuno equipaggiato con 2 dischi SSD da 512GB e 64GB di RAM.

Tipo Raid: Raid 1
Dischi: sda, sdb
Disco Guasto: sdb
Nome volume: rpool

I nodi li abbiamo chiamati PVE5, PVE6, PVE7.

Introduzione

Prima di cominciare abbiamo creato un cluster Proxmox VE di 3 nodi (se non lo avete già fatto, consultate la nostra guida) e lanciato i seguenti comandi per aggiornarlo, e installare alcuni pacchetti base Debian che ci tornano utili per eventuali troubleshooting.

# apt updare
# apt upgrade
# apt install htop iotop

Controllo lo stato del RAID

# zpool status -v

Lo stato del volume è identificabile chiaramente come online oppure degraded.

Metto offline il disco che presenta problemi

# zpool offline rpool 10224045266922284551

Dopo l’operazione sopra riportata, il volume si presenta così:

A questo punto possiamo fisicamente sostituire il disco “rotto” con un disco nuovo. Nelle nostre prove, dopo qualche fallimento, rispettando le regole di seguito elencate, non abbiamo più avuto problemi:

  1. Il disco deve essere “nuovo”.
  2. Il disco “nuovo” deve essere uguale, come dimensione, al quello che bisogna sostituire.
  3. Il disco “nuovo” deve essere vuoto e completamente privo di qualsiasi altro tipo di partizione.

Quelli descritti di seguito sono i passi necessari per l’operazione di “replace”.

Per prima cosa copiamo da un disco funzionante, ed online, la tabella delle partizioni:

# sgdisk –replicate=/dev/sdb /dev/sda

Generiamo un GUID casuale:

# sgdisk –randomize-guids /dev/sdb

Installiamo il boot loader nel nuovo disco:

# grub-install /dev/sdb

A questo punto posso lanciare l’operazione di replace (nel nostro caso sarà):

# zpool replace rpool /dev/sdb2 -f

Più in generale il comando da dare è:

# zpool replace rpool [nome Vecchio device] [nome Nuovo device]

Altro esempio in una situazione cole la seguente

Il comando sarà:

# zpool replace rpool scsi-35000cca26925d614 /dev/sdd1

L’operazione di resilvering ricreerà il volume.

Attenzione a non riavviare il server durante questa fase, perché c’è il rischio che non esegua più il boot correttamente.

Ad operazione finita il volume si presenterà come segue:

Il feedback sull’operazione appena eseguita è visibile a video: 0 errors.

Di seguito mostriamo un esempio di un disco che, prima o poi, andrà sostituito perché inizia a riportare degli errori.

Operazioni di verifica Filesystem ZFS

Il filesystem zfs fornisce un comando per eseguire il controllo di routine di tutte le incongruenze. Questo comando, che si chiama scrub , viene comunemente utilizzato come metodo per rilevare e prevenire errori prima che si traducano in errori hardware o software.

Lo scrub di zfs viene eseguito su Proxmox VE in modo regolare e programmato sul pool, e le informazioni che lo riguardano si possono reperire con il solito comando:

# zpool status -v

Qualora si abbia la sensazione che persistano degli errori hardware sul volume zfs , possiamo eseguire una verifica manuale lanciando il comando sul volume specifico:

# zpool scrub rpool

Questo comando ha un basso impatto sulle prestazioni del server e, normalmente, non impedisce alle vm di girare correttamente.

Posso controllare lo stato di esecuzione dello scrub con il comando:

# zpool status -v

Il comando mi permette di vedere ciò che sta succedendo sul volume.

È possibile interrompere l’operazione di scrub, in ogni momento e in base alle specifiche eseigenze, tramite il comando seguente:

# zpool scrub -s rpool

Qualora l’operazione non riuscisse a riparare il volume, il risultato sarà il seguente:

Il disco guasto sarà messo come “UNAVAIL” e sarà, dunque, necessario procedere alla sostituzione del disco.

Prima di riavviare il server, consigliamo di mettere sempre “OFFLINE” il disco da sostituire in modo che venga ignorato durante il boot o si corre il rischio che il server possa bloccarsi in fase di avvio.

Il comando nel nostro caso sarà il seguente:

# zpool offline rpool scsi-35000cca26925d614

Un altro comando che potrebbe essere utile per individuare errori, se avete un controller raid è:

# smartctl -a /dev/sdX     [X= lettera dell’unità]

 

Riteniamo utile riportare alcune mini-guide, trovate in rete (troverete link alle pagine ufficiali), che spiegano come risolvere alcuni danni al pool zfs.

Riparazione dei danni a livello di pool in uno storage ZFS

Se esiste un danno ed è nei metadati del pool, e tale danno impedisce l’apertura o l’importazione del pool, sono disponibili due comandi. Tentare di ripristinare il pool utilizzando uno dei seguenti comandi:

# zpool cleat -F
# zpool import -F

Questi comandi tentano di ripristinare le ultime transazioni del pool in uno stato operativo. È possibile utilizzare il comando di stato (seguente) per vedere un pool danneggiato e i passaggi di ripristino consigliati. Per esempio:

# zpool status
  pool: tpool
 state: FAULTED
status: The pool metadata is corrupted and the pool cannot be opened.
action: Recovery is possible, but will result in some data loss.
        Returning the pool to its state as of Wed Jul 14 11:44:10 2010
        should correct the problem.  Approximately 5 seconds of data
        must be discarded, irreversibly.  Recovery can be attempted
        by executing 'zpool clear -F tpool'.  A scrub of the pool
        is strongly recommended after recovery.
   see: http://www.sun.com/msg/ZFS-8000-72
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
         tpool      FAULTED      0     0     1  corrupted data
          c1t1d0    ONLINE       0     0     2
          c1t3d0    ONLINE       0     0     4

Il processo di recupero come descritto sopra, è quello che usa il comando:

# zpool clear -F tpool

Se si tenta di importare un lotto di memoria danneggiato, verranno visualizzati messaggi simili ai seguenti:

# zpool import tpool
cannot import 'tpool': I/O error
        Recovery is possible, but will result in some data loss.
        Returning the pool to its state as of Wed Jul 14 11:44:10 2010
        should correct the problem.  Approximately 5 seconds of data
        must be discarded, irreversibly.  Recovery can be attempted
        by executing 'zpool import -F tpool'.  A scrub of the pool
        is strongly recommended after recovery.

Il processo di recupero, come descritto sopra, utilizza il seguente comando:

# zpool import -F tpool
Pool tpool returned to its state as of Wed Jul 14 11:44:10 2010.
Discarded approximately 5 seconds of transactions

Se il pool danneggiato si trova nel file zpool.cache, il problema viene rilevato all’avvio del sistema e il pool danneggiato viene segnalato nel comando # zpool status.
Se il pool non si trova nel file zpool.cache, non verrà importato o aperto correttamente, e verranno visualizzati i messaggi del pool danneggiato quando si tenta di importarlo.

Se il pool non può essere ripristinato tramite il metodo di recupero descritto sopra, è necessario ripristinarlo, con tutti i relativi dati, da una copia di backup. Il processo varia a seconda della configurazione del pool e della strategia di backup.
Innanzitutto, salvare la configurazione visualizzata dal comando di # zpool status  in modo da poterla ricreare dopo che il pool è stato distrutto.
Usare, quindi, # zpool destroy -f  per distruggere il pool.
Consigliamo, inoltre, di mantenere un file che descriva il layout dei set di dati e le varie proprietà localmente impostate in un luogo sicuro, poiché queste informazioni diventeranno inaccessibili in caso di problemi.
Con la configurazione del pool e il layout del set di dati, è possibile ricostruire la configurazione completa dopo aver distrutto il pool.
I dati possono quindi essere popolati utilizzando qualsiasi strategia di backup o ripristino che si utilizza.

Tale informazioni sopra riportate derivano interamente dal
seguente documento

Documentazione ufficiale di Proxmox VE.

  ti posso interessare anche