Passaggi per Aggiungere/Sostituire un Disco al RAID1 ZFS su Proxmox

Stavo provando PROXMOX, il mio intento era di riutilizzare per la prova due vecchi dischi (256Gb e 320Gb) da mettere in raid1 (copia) con filesystem ZFS.

L’installer permette di creare un raid1 ZFS ma NON con due dischi di diverse dimensioni e questo e’ stato un problema. Per ovviare ho installato il sistema su un disco solo (il piu’ piccolo) con filesystem ZFS e successivamente ho creato il raid.

Ecco come installare un secondo disco.

Supponiamo questo scenario

  • Disco origine: /dev/sda (256GB)
  • Disco destinazione: /dev/sdb (320GB)

Cancella il Disco di Destinazione (se non gia’ vuoto o nuovo):

Utilizza wipefs per rimuovere tutte le firme delle partizioni dal disco di destinazione (/dev/sdb):

wipefs -a /dev/sdb

Copia le Partizioni dal Disco di Origine:

Usa sgdisk per copiare le partizioni dal disco di origine (/dev/sda) al disco di destinazione (/dev/sdb):

sgdisk /dev/sda -R /dev/sdb

Cambia l’ID del Disco di Destinazione:

Cambia l’ID del disco di destinazione per assicurarti che sia unico:

sgdisk -G /dev/sdb

Formatta la Partizione di Avvio:

La prima cosa da fare e’ identificare quale e’ la giusta partizione:

fdisk -l /dev/sda

Questo restituira’ la tabella delle partizioni del disco di origine che dopo i comandi appena eseguiti deve essere uguale sul disco di destinazione (fdisk -l /dev/sdb per controllare)

root@proxmox:~# fdisk -l /dev/sdb
Disk /dev/sdb: 298.09 GiB, 320072933376 bytes, 625142448 sectors
Disk model: WDC WD3200AAJS-2
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: FC9BC34B-C37B-435A-BE68-2B06E6F80D3C

Device       Start       End   Sectors   Size Type
/dev/sdb1       34      2047      2014  1007K BIOS boot
/dev/sdb2     2048   2099199   2097152     1G EFI System
/dev/sdb3  2099200 488397134 486297935 231.9G Solaris /usr & Apple ZFS

Da qui si vede che la partizione di avvio e’ sdb2, e quindi si utilizza proxmox-boot-tool per formattare la partizione di avvio sul disco di destinazione (/dev/sdb2):

proxmox-boot-tool format /dev/sdb2

Inizializza la Partizione di Avvio:

Inizializza la partizione di avvio sul disco di destinazione:

proxmox-boot-tool init /dev/sdb2

Aggiungi il Disco al Pool ZFS:

A questo punto devi identificare il nome del primo “disco” nel raid, per farlo basta il comando:

    zpool status

Che restituira’ qualcosa tipo:

root@proxmox:~# zpool status -v
  pool: rpool
 state: ONLINE
config:

        NAME                                                      STATE     READ WRITE CKSUM
        rpool                                                     ONLINE       0     0     0
          ata-Hitachi_HTS543225L9A300_081112FB0F00LLJLE3DB-part3  ONLINE       0     0     0

errors: No known data errors

Aggiungi il disco di destinazione (/dev/sdb3) al pool ZFS esistente (rpool), unendo i due dischi:

zpool attach rpool ata-Hitachi_HTS543225L9A300_081112FB0F00LLJLE3DB-part3 /dev/sdb3

Verifica lo Stato del Pool ZFS:

Controlla lo stato del pool ZFS per assicurarti che il processo di resilvering sia iniziato e che il pool sia in stato ONLINE:

    zpool status

Ed ecco fatto, ora i due disch sono in raid1 e sono uno la copia dell’altro.

E se uno dei due dischi si rompe?

Se uno dei due dischi si dovesse rompere l’altro e’ in grado di fare il boot del sistema e far funzionare i servizi regolarmente. Questo ti dara’ inoltre il tempo e gli strumenti per sostituirlo.

il comando zpool status dovrebbe restituire qualcosa tipo:

root@proxmox:~# zpool status
  pool: rpool
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-4J
  scan: resilvered 59.8G in 00:30:10 with 0 errors on Wed Jul  3 19:39:59 2024
config:

        NAME                    STATE     READ WRITE CKSUM
        rpool                   DEGRADED     0     0     0
          mirror-0              DEGRADED     0     0     0
            505977634126597088  UNAVAIL      0     0     0  was /dev/disk/by-id/ata-Hitachi_HTS543225L9A300_081112FB0F00LLJLE3DB-part3
            sda3                ONLINE       0     0     0

errors: No known data errors

anche nella interfaccia web di proxmox si vede il degrado

Il disco che prima era di origine ora non e’ piu’ disponibile. Se seguissimo il sistema del “zpool replace” che viene suggerito recupereremo il raid1 dei dati ma il nuovo disco non farebbe il boot perché mancante delle prime due partizioni. Quindi consiglio un bel:

zpool detach rpool /dev/DISCODARIMUOVERE

e rifare la procedura piu’ o meno dall’inizio 🙂