Sostituzione di un disco guasto nella root ZFS | INTROSERV
EUR
european

EUR

usa

USD

Italy It
Ex. VAT Ex. VAT 0%

Sostituzione di un disco guasto nella root ZFS

Questa guida spiega come sostituire un disco guasto in un pool ZFS in configurazione mirror su Linux. La procedura comprende la messa offline del disco, la copia della tabella delle partizioni sul disco sostitutivo, il nuovo inserimento del disco nel pool e l'installazione del bootloader dopo il completamento del resilvering.

Prerequisiti

Sono necessari i privilegi di root. Gli esempi seguenti presuppongono un server con due dischi: /dev/sda (funzionante) e /dev/sdb (guasto). Adattare i nomi dei dispositivi alla propria configurazione.

Warning

Eseguire un backup di tutti i dati importanti prima di procedere. La sostituzione di un disco root è un'operazione ad alto rischio. Un errore in qualsiasi fase può causare la perdita di dati o rendere il sistema non avviabile. Evitare di utilizzare nomi di dispositivo come /dev/sdX nei comandi ZFS. I nomi dei dispositivi possono cambiare dopo un riavvio. Utilizzare invece identificatori stabili come /dev/disk/by-id/. Negli esempi seguenti viene utilizzato /dev/sdX per semplicità durante l'utilizzo degli strumenti di partizionamento. I comandi ZFS devono utilizzare sempre /dev/disk/by-id/.

Passaggio 1: controllare lo stato del pool

Prima di apportare qualsiasi modifica, controllare lo stato attuale del pool:

zpool status -v

L'output mostrerà quale disco presenta problemi e il relativo identificatore all'interno del pool.

Passaggio 2: mettere offline il disco guasto

Se il disco è ONLINE ma presenta problemi, metterlo offline prima della sostituzione fisica:

zpool offline rpool <failed-device>

ZFS smetterà di tentare di utilizzare il disco difettoso prima della sostituzione fisica. Sostituire <failed-device> con l'identificatore mostrato da zpool status -v. Se il disco è già nello stato FAULTED o REMOVED, saltare questo passaggio e procedere direttamente al Passaggio 3.

Passaggio 3: sostituire fisicamente il disco

Se il server supporta l'hot swap, è possibile sostituire il disco senza spegnerlo.

In caso contrario, spegnere il sistema:

poweroff

Dopo aver installato il disco sostitutivo, avviare il server e verificare che il nuovo disco sia visibile:

lsblk -o NAME,SIZE,MODEL ls -l /dev/disk/by-id/

Utilizzare l'identificatore by-id del nuovo disco nei passaggi successivi.

Passaggio 4: determinare il tipo di tabella delle partizioni

Installare gdisk se non è già presente:

apt install gdisk -y

Controllare il tipo di tabella delle partizioni del disco funzionante:

gdisk -l /dev/sda

Nell'output, cercare la sezione Partition table scan. Per MBR verranno visualizzati MBR: MBR only e GPT: not present. Per GPT verranno visualizzati MBR: protective e GPT: present.

Passaggio 5: preparare e copiare la tabella delle partizioni sul nuovo disco

La maggior parte delle configurazioni root ZFS utilizza il partizionamento GPT. Il metodo MBR è incluso per i sistemi legacy.

GPT

Prima di procedere, identificare il nome /dev/sdX corrispondente al nuovo disco, poiché gli strumenti di partizionamento lo richiedono:

lsblk -o NAME,SIZE,MODEL,SERIAL

Cancellare tutte le vecchie firme dal disco sostitutivo prima di copiare la tabella delle partizioni:

wipefs -a /dev/disk/by-id/<new-disk>

Warning

wipefs -a rimuove permanentemente tutte le firme dei filesystem e delle partizioni dal disco. Assicurarsi di specificare l'identificatore corretto del disco prima di eseguire questo comando.

Il comando seguente copia la tabella delle partizioni da /dev/sda (origine) a /dev/sdb (destinazione):

sgdisk -R /dev/sdb /dev/sda

Warning

In sgdisk -R, il primo argomento è il disco di destinazione e il secondo è quello di origine. Eseguire questo comando con gli argomenti invertiti sovrascriverà la tabella delle partizioni del disco funzionante.

Se il disco sostitutivo è più grande di quello originale, espandere la GPT per utilizzare l'intero disco:

sgdisk -e /dev/sdb

Quindi assegnare un nuovo UUID univoco al disco sostitutivo:

sgdisk -G /dev/sdb

Warning

sgdisk -G assegna nuovi UUID a tutte le partizioni del disco sostitutivo. Se /etc/fstab contiene voci basate su UUID per una di queste partizioni, il sistema potrebbe non avviarsi. Dopo il completamento del resilvering, verificare che /etc/fstab utilizzi identificatori /dev/disk/by-id/ invece degli UUID.

Ricaricare la tabella delle partizioni affinché il kernel rilevi il nuovo layout:

udevadm trigger udevadm settle

Se il disco sostitutivo era stato precedentemente utilizzato in un altro pool ZFS, cancellare i vecchi metadati ZFS per evitare conflitti:

zpool labelclear /dev/disk/by-id/<new-disk-partX> 2>/dev/null || true

Sostituire <new-disk-partX> con l'identificatore effettivo della partizione ZFS.

MBR

Il comando seguente copia la tabella delle partizioni da /dev/sda (origine) a /dev/sdb (destinazione):

sfdisk -d /dev/sda | sfdisk /dev/sdb

Se le nuove partizioni non sono visibili nel sistema dopo la copia, ricaricare la tabella delle partizioni:

udevadm trigger udevadm settle

Passaggio 6: aggiungere il disco al pool

Sostituire la voce del disco guasto nel pool con il nuovo disco. Per prima cosa, verificare l'identificatore esatto del disco guasto così come viene visualizzato nel pool:

zpool status rpool

Nell'output, individuare la voce relativa al disco guasto nell'elenco dei dispositivi del pool. Verrà visualizzata come percorso completo, ad esempio /dev/disk/by-id/ata-WDC_WD10_12345-part3, con stato FAULTED, UNAVAIL o OFFLINE. Utilizzare questo percorso come <old-device> nel comando replace:

zpool replace rpool <old-device> /dev/disk/by-id/<new-disk-part>

Sostituire <old-device> con l'identificatore del disco guasto del passaggio precedente. Sostituire <new-disk-part> con l'identificatore by-id della partizione del disco sostitutivo, utilizzando lo stesso numero di partizione del disco funzionante, ad esempio -part3 o -part4. Per trovare l'identificatore corretto, eseguire ls -l /dev/disk/by-id/.

Se il vecchio disco è completamente non disponibile (UNAVAIL) e zpool replace restituisce un errore, aggiungere l'opzione -f per forzare la sostituzione:

zpool replace -f rpool <old-device> /dev/disk/by-id/<new-disk-part>

Dopo aver eseguito zpool replace, verificare che il resilvering sia iniziato e che il nuovo disco appaia come ONLINE:

zpool status

Il resilvering continuerà automaticamente in background.

Passaggio 7: monitorare il resilvering

Monitorare l'avanzamento del resilvering con:

zpool status -v

L'output mostra l'avanzamento, la velocità e il tempo stimato rimanente. Attendere che lo stato mostri state: ONLINE e che il resilvering sia completato prima di procedere. A seconda delle dimensioni del disco, l'operazione può richiedere diverse ore.

Passaggio 8: verificare il dataset di avvio

Prima di installare il bootloader, verificare che il pool abbia configurato il dataset di avvio corretto:

zpool get bootfs rpool

L'output dovrebbe mostrare un percorso del dataset come rpool/ROOT/debian. Se il valore è none o punta al dataset errato, impostarlo manualmente:

zpool set bootfs=rpool/ROOT/debian rpool

Sostituire rpool/ROOT/debian con il nome effettivo del dataset root del sistema. Per elencare i dataset disponibili, eseguire zfs list.

Passaggio 9: installare il bootloader

Installare il bootloader sul disco sostitutivo dopo il completamento del resilvering. Durante il resilvering, il sistema continua a funzionare dal disco originale, quindi questo passaggio può essere eseguito in sicurezza una volta che il pool è integro.

BIOS (Legacy)

grub-install /dev/disk/by-id/<new-whole-disk>

Su alcuni sistemi, grub-install potrebbe non accettare un percorso by-id. In tal caso, sostituire /dev/disk/by-id/<new-whole-disk> con il nome del dispositivo corrispondente, ad esempio /dev/sdb.

UEFI

Montare la partizione EFI del disco sostitutivo in una directory temporanea prima di eseguire grub-install. Questo evita di nascondere la partizione EFI attualmente attiva:

mkdir -p /mnt/new_efi mount /dev/disk/by-id/<new-disk-part1> /mnt/new_efi

Sostituire <new-disk-part1> con l'identificatore effettivo della partizione EFI (in genere -part1 o -part2; tipo di partizione EF00). In caso di dubbi, verificare con ls -l /dev/disk/by-id/.

Se la partizione EFI è vuota, copiare il contenuto della partizione EFI esistente prima di eseguire grub-install:

cp -r /boot/efi/* /mnt/new_efi/

Installare il bootloader:

apt install grub-efi-amd64 efibootmgr -y grub-install --target=x86_64-efi --efi-directory=/mnt/new_efi --bootloader-id=debian --recheck /dev/disk/by-id/<new-whole-disk> update-grub update-initramfs -u -k all

Sostituire --bootloader-id=debian con il nome corrispondente alla propria distribuzione, ad esempio ubuntu o debian. Sostituire /dev/disk/by-id/<new-whole-disk> con l'identificatore by-id dell'intero disco sostitutivo, non di una partizione.

L'esecuzione di update-initramfs garantisce che il ramdisk iniziale includa i moduli ZFS correnti e riconosca il nuovo layout del pool. Senza questo passaggio, il sistema potrebbe non avviarsi dopo la sostituzione.

Smontare la partizione EFI dopo l'installazione:

umount /mnt/new_efi

Verificare le voci di avvio EFI:

efibootmgr -v

Warning

Sui sistemi con root ZFS, grub-install potrebbe non riuscire o potrebbe richiedere opzioni aggiuntive a seconda della versione di GRUB e della configurazione del sistema. Ad esempio, alcuni sistemi richiedono l'installazione di GRUB con i moduli di supporto ZFS oppure l'esecuzione del comando da un ambiente chroot. Se il comando restituisce un errore, consultare la documentazione della propria distribuzione per le istruzioni specifiche sull'installazione di GRUB con ZFS.

Info

Su Proxmox VE, grub-install è disabilitato. Utilizzare invece proxmox-boot-tool. L'esempio seguente utilizza /dev/sdb2: sostituirlo con la partizione EFI effettiva del proprio sistema:

proxmox-boot-tool format /dev/sdb2 proxmox-boot-tool init /dev/sdb2

Conclusione

Dopo aver installato il bootloader, riavviare il server e verificare che si avvii normalmente. Eseguire uno scrub per verificare la presenza di eventuali errori di lettura/scrittura che potrebbero essersi verificati durante il resilvering:

zpool scrub rpool

Verificare quindi lo stato del pool:

zpool status -v

Il pool dovrebbe essere online e senza errori. Se durante la procedura si verificano problemi, controllare i log di sistema con journalctl -xe per ulteriori dettagli.

Warning

Prima di smaltire il disco guasto rimosso nel Passaggio 3, riavviare il server e verificare che il sistema si avvii normalmente con il disco sostitutivo. Conservare il disco guasto come fallback fino a quando non sarà confermato il corretto avvio del sistema.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA