Differences between revisions 1 and 2
Revision 1 as of 2022-09-21 16:14:14
Size: 4943
Editor: Kurgan
Comment:
Revision 2 as of 2022-09-21 16:16:10
Size: 5224
Editor: Kurgan
Comment:
Deletions are marked like this. Additions are marked like this.
Line 4: Line 4:

'''Attenzione: versioni diverse di PVE hanno metodi abbastanza diversi fra loro. Se si usa UEFI e non BIOS ci sono differenze. Se si usa systemd-bootloader o come cavolo si chiama e non GRUB ci sono differenze. Questa procedura funzione SOLO con le condizioni sotto indicate'''

Cambiare un disco rotto in ZFS

Situazione di partenza

Attenzione: versioni diverse di PVE hanno metodi abbastanza diversi fra loro. Se si usa UEFI e non BIOS ci sono differenze. Se si usa systemd-bootloader o come cavolo si chiama e non GRUB ci sono differenze. Questa procedura funzione SOLO con le condizioni sotto indicate

Questa procedura è stata usata in questa configurazione:

  • pve-manager/6.0-4/2a719255 (running kernel: 5.0.15-1-pve)
  • due dischi in ZFS dai quali viene fatto il boot in modalità BIOS con GRUB
  • il disco sda è guasto
  • la macchina supporta hot swap (anche se ufficialmente non lo fa, di fatto lo fa)

La condizione iniziale è un failure del mirror, che si presenta cosi`:

  • #zpool status
      pool: rpool
     state: DEGRADED
    status: One or more devices has been removed by the administrator.
            Sufficient replicas exist for the pool to continue functioning in a
            degraded state.
    action: Online the device using 'zpool online' or replace the device with
            'zpool replace'.
      scan: scrub repaired 0B in 0 days 02:57:11 with 0 errors on Sun Sep 11 03:21:12 2022
    config:
    
            NAME                                             STATE     READ WRITE CKSUM
            rpool                                            DEGRADED     0     0     0
              mirror-0                                       DEGRADED     0     0     0
                ata-HGST_HUS722T2TALA604_WMC6N0P2VZD7-part3  REMOVED      0     0     0
                ata-HGST_HUS722T2TALA604_WMC6N0P3WHRV-part3  ONLINE       0     0     0

I dischi sono partizionati (default dell'installer di PVE) in questo modo:

  • Una partizione BIOS BOOT
  • Una partizione EFI
  • Una partizione grande con dentro ZFS

La caratteristica peculiare di questa installazione (default di PVE prima di 6.4) è che usa GRUB con il supporto per ZFS, ergo boota caricando il kernel dalla partizione ZFS (sda3 / sdb3) e non dalla partizione EFI, nella quale comunque si trova una copia del kernel e (credo) del bootloader di systemd, che non viene usato. Ricordo che il PC boota in modalità BIOS e non UEFI. Ogni versione di PVE ha piccole differenze, e la documentazione purtroppo non è dettagliatissima, specie per le versioni piu` vecchie.

Procedura

  • mettere definitivamente offline il disco che già è guasto (nel nostro caso, il disco è ata-HGST_HUS722T2TALA604_WMC6N0P2VZD7-part3 ovvero /dev/sda3) usando il comando "zpool offline <nomepool> <nomedisco>"

    zpool offline rpool ata-HGST_HUS722T2TALA604_WMC6N0P2VZD7-part3
  • Staccare fisicamente il disco e cambiarlo con uno totalmente vergine
  • Verificare che il kernel lo veda (nel mio caso ho cambiato sda con un disco nuovo che viene visto sempre come sda)
  • Copiare le partizioni (GPT) dal disco buono a quello nuovo (occhio a non fare al contrario) con il comando "sgdisk <disco ancora funzionante> -R <disco nuovo>"

    sgdisk /dev/sdb -R /dev/sda
  • Randomizzare gli UID delle partizioni, in quanto la copia le fa IDENTICHE e non vogliamo avere UID uguali nei due dischi. Si usa il comando "sgdisk -G <disco nuovo>"

    sgdisk -G /dev/sda
  • Eseguire dentro ZFS il "replace" del disco rotto con quello nuovo. Per verificare come si chiama il disco nuovo, ci aiuta fare un "ls -la /dev/disk-by-id" dove troviamo dei link simbolici dall' ID al /dev/sdXX. Qui vediamo che il nostro nuovo disco si chiama ata-HGST_HUS722T2TALA604_WMC6N0R544H5-part3. Facciamo quindi il comando "zpool replace <nome del pool> <id del disco rotto> <id del disco nuovo>". In questo caso a dire il vero non sono dischi ma partizioni di dischi. L' id del disco rotto l'abbiamo visto prima con il comando "zpool status". La doc di PVE dice di usare il modificatore "-f" (force), io non l'ho usato e ha funzionato lo stesso.

    # zpool replace rpool ata-HGST_HUS722T2TALA604_WMC6N0P2VZD7-part3 ata-HGST_HUS722T2TALA604_WMC6N0R544H5-part3
  • Ora dovrebbe iniziare la ricostruzione del mirror, che impiegherà qualche ora ragionevolmente, in funzione di dimensioni e velocità (e spazio occupato nel disco). La posso seguire con il comando
    zpool status
  • A questo punto devo ASPETTARE CHE FINISCA altrimenti grub NON SI INSTALLA. Ergo, posso andare a pranzo.
  • Finita la ricostruzione, formattiamo e riempiamo la partizione EFI (nel nostro caso, /dev/sda2) anche se di fatto non la useremo. Ma è opportuno averla funzionante se mai dovessimo avviare da super grub disk in quanto quest'ultimo NON VEDE ZFS. Per fare questo lavoro possiamo usare il comando pve-efiboot-tool che è stato però sostituito da "proxmox-boot-tool" dalla 6.4 in poi. Io poi per stare sicuro di copio dentro anche la config di grub, sempre per poterla poi leggere con super grub disk.
     pve-efiboot-tool format /dev/sda2
     pve-efiboot-tool init   /dev/sda2
     mount /dev/sda2 /mnt
     cp -a /boot/grub /mnt
     umount /mnt
  • ultimo passo, installiamo grub su /dev/sda (il nostro disco nuovo) lasciando stare quello gia` presente su /dev/sdb (il nostro disco vecchio)
    grub-install /dev/sda

Riferimento dal quale ho preso parte della procedura: https://pve.proxmox.com/wiki/ZFS_on_Linux#sysadmin_zfs_change_failed_dev

PVE/ZfsSostituzioneDisco (last edited 2022-09-21 16:16:10 by Kurgan)