Il sistema di gestione dei Raid Software di Solaris è molto efficiente, e generalmente la sostituzione di dischi che presentano dei problemi software e hardware è una operazione abbastanza semplice da eseguire da linea di comando.
Nel caso di una RAID1, ovvero disk mirroring, se un disco è difettoso basta sganciarlo dal Raid con i comandi del Solstice DiskSuit, sostituirlo e riagganciare il nuovo disco al Raid per il resync dei dati.
L’attività però può presentare alcuni problemi se il Mirror è in uno stato di inconsistenza o se se entrambi i dischi presentano degli errori.
In questo articolo vi mostrerò la procedura che ho adottato per risolvere questo tipo di problema su un “Pezzo di Ferro” abbastanza vecchiotto ma nello stesso tempo molto critico per il Cliente.
Infatti si trattava di uno dei server di produzione (quelli che non devono essere mai spenti!).
In questi casi lo stato di Maintenance e Last Erred dei submirror non consentivano infatti di sganciare uno dei due dischi del mirror e il resync non funzionava.
Come è possibile vedere anche da Iostat entrambi i dischi presentavano errori hardware e software.
Per rendere l’attività ancora più difficile tutte le partizioni, compresa quella di root facevano parte del mirror. Quindi impossibile scangiarle per effettuare una semplice manutenzione “a caldo”.
Inoltre tuttà l’attività doveva essere effettuata da Remoto via RDP attraverso un Notebook collegato via Seriale alla console del server… (Dall’Italia su un server in Olanda).
Queste premesse sono doverose poichè un sistemista molte volte (nella maggiorparte dei casi), deve scontrarsi con realtà di lavoro in cui efficienza e alti livelli di servizio e uptime dei sistemi da garantire, si scontrano con scarsa strumentazione di gestione.
Questo è ancora più evidente quando si deve operare su sistemi eterogenei e quindi ci si deve accontentare di quello che c’è.
Ovviamente questa attività richiede un fermo del sistema (non si può avere tutto), ma garantire che questo sia minimo, posso assicurare che in un ambienete Enterprise di produzione è veramente importante.
Quindi 90% delle attività verranno fatte con il server attivo.
Un 10% invece richiederanno un fermo del servzio ma i tempi saranno solo quelli del reboot e per le sole attività in Single User Mode di ricreazione del mirror per una maggiore sicurezza.
Ovviamente non escludo ci possano essere altri metodi per raggiungere lo stesso obbiettivo e che alcune attività possano anche essere evitate.
Nell’elaborazione ho tenuto in considerazione la criticità del sistema e della logistica limitando al minimo ogni possibile rischio.
Ho suddiviso tutte le azioni in macro attività per una più comoda lettura.
Solaris 5.8 – Sun Fire V210
1) Provare a marcare i blocchi difettosi attraverso l’analyze del format su tutti e due i dischi e verificare se il Raid riesce ad effettuare il sync;
2) Reinizializzare lo swap perchè in questa situazione la partizione D1 è un Concat/Stripe Raid 0;
3) Scegliere uno dei due dischi con meno errori software (in questo caso il disco 1) per far ripartire il server escludendo il raid software;
4) Da Console remota di managemet riavviare il server con il disco 1 e ricreazione del mirror;
5) Resync del Mirror;
6) Sostituzione del secondo disco.
Questa la situazione iniziale attraverso format e iostat su tutti e due i dischi, dove si possono notare lo stato dimaintenance dei mirror e gli errori sui dischi:
bash-2.03# metastat d0: Mirror Submirror 0: d10 State: Needs maintenance Submirror 1: d20 State: Needs maintenance Pass: 1 Read option: roundrobin (default) Write option: parallel (default) Size: 13320384 blocks d10: Submirror of d0 State: Needs maintenance Invoke: metareplace d0 c1t0d0s0 <new device> Size: 13320384 blocks Stripe 0: Device Start Block Dbase State Hot Spare c1t0d0s0 0 No Maintenance d20: Submirror of d0 State: Needs maintenance Invoke: after replacing "Maintenance" components: metareplace d0 c1t1d0s0 <new device> Size: 13320384 blocks Stripe 0: Device Start Block Dbase State Hot Spare c1t1d0s0 0 No Last Erred d3: Mirror Submirror 0: d13 State: Okay Submirror 1: d23 State: Okay Pass: 1 Read option: roundrobin (default) Write option: parallel (default) Size: 20484288 blocks d13: Submirror of d3 State: Okay Size: 20484288 blocks Stripe 0: Device Start Block Dbase State Hot Spare c1t0d0s3 0 No Okay d23: Submirror of d3 State: Okay Size: 20484288 blocks Stripe 0: Device Start Block Dbase State Hot Spare c1t1d0s3 0 No Okay d4: Mirror Submirror 0: d14 State: Okay Submirror 1: d24 State: Okay Pass: 1 Read option: roundrobin (default) Write option: parallel (default) Size: 16393536 blocks d14: Submirror of d4 State: Okay Size: 16393536 blocks Stripe 0: Device Start Block Dbase State Hot Spare c1t0d0s4 0 No Okay d24: Submirror of d4 State: Okay Size: 16393536 blocks Stripe 0: Device Start Block Dbase State Hot Spare c1t1d0s4 0 No Okay d5: Mirror Submirror 0: d15 State: Okay Submirror 1: d25 State: Okay Pass: 1 Read option: roundrobin (default) Write option: parallel (default) Size: 10247232 blocks d15: Submirror of d5 State: Okay Size: 10247232 blocks Stripe 0: Device Start Block Dbase State Hot Spare c1t0d0s5 0 No Okay d25: Submirror of d5 State: Okay Size: 10247232 blocks Stripe 0: Device Start Block Dbase State Hot Spare c1t1d0s5 0 No Okay d6: Mirror Submirror 0: d16 State: Needs maintenance Submirror 1: d26 State: Okay Pass: 1 Read option: roundrobin (default) Write option: parallel (default) Size: 79810368 blocks d16: Submirror of d6 State: Needs maintenance Invoke: after replacing "Maintenance" components: metareplace d6 c1t0d0s6 <new device> Size: 79810368 block Stripe 0: Device Start Block Dbase State Hot Spare c1t0d0s6 0 No Last Erred d26: Submirror of d6 State: Okay Size: 79810368 blocks Stripe 0: Device Start Block Dbase State Hot Spare c1t1d0s6 0 No Okay d1: Concat/Stripe Size: 6146304 blocks Stripe 0: Device Start Block Dbase c1t0d0s1 0 No Stripe 1: Device Start Block Dbase c1t1d0s1 0 No # metastat d1 d1: Concat/Stripe Size: 6146304 blocks Stripe 0: Device Start Block Dbase c1t0d0s1 0 No Stripe 1: Device Start Block Dbase c1t1d0s1 0 No bash-2.03# iostat -En c1t0d0 Soft Errors: 8 Hard Errors: 3 Transport Errors: 0 Vendor: FUJITSU Product: MAT3073N SUN72G Revision: 0602 Serial No: 000528B08SBH Size: 73.40GB <73400057856 bytes> Media Error: 3 Device Not Ready: 0 No Device: 0 Recoverable: 8 Illegal Request: 0 Predictive Failure Analysis: 0 c1t1d0 Soft Errors: 1 Hard Errors: 3 Transport Errors: 0 Vendor: FUJITSU Product: MAT3073N SUN72G Revision: 0602 Serial No: 000529B0923B Size: 73.40GB <73400057856 bytes> Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 1 Illegal Request: 0 Predictive Failure Analysis: 0 c0t0d0 Soft Errors: 0 Hard Errors: 20 Transport Errors: 0 Vendor: TEAC Product: DV-28E-C Revision: 1.4B Serial No: Size: 18446744073.71GB <-1 bytes> Media Error: 0 Device Not Ready: 20 No Device: 0 Recoverable: 0 Illegal Request: 0 Predictive Failure Analysis: 0
1) Provare a marcare i blocchi difettosi attraverso l’analyze del format su tutti e due i dischi e verificare se il Raid riesce ad effettuare il sync
format ... analyze> read Ready to analyze (won't harm SunOS). This takes a long time, but is interruptable with CTRL-C. Continue? yes
pass 0 Medium error during read: block 7630996 (0x747094) (749/21/268) ASC: 0x11 ASCQ: 0x1 Repairing hard error on 7630996 (749/21/268)...ok.
Medium error during read: block 7630997 (0x747095) (749/21/269) ASC: 0x11 ASCQ: 0x1 Repairing hard error on 7630997 (749/21/269)...ok.
Recoverable error during read: block 7635796 (0x748354) (750/8/404) ASC: 0x17 ASCQ: 0x8 Medium error during read: block 7635799 (0x748357) (750/8/407) ASC: 0x11 ASCQ: 0x1 Repairing hard error on 7635799 (750/8/407)...ok.
.....
2) Reinizializzare lo swap perchè in questa situazione la partizione D1 è un Concat/Stripe Raid 0
SWAP D1
Poichèla swap è d1: Concat/Stripe, per evitare malfunzionamenti mentre il server è in servizio è possibile (ma non necessaria) modificare la configurazione dello swap utilizzando come swap temporaneo dei files di swap su una partizione in cui ci sia sufficiente spazio.
Successivamente il verranno ricreati due swap utilizzando le singole slices senza il mirror.
Crezione di 2 file di swap da 1 Gb temporanei
bash-2.03# swap -s total: 1148704k bytes allocated + 283096k reserved = 1431800k used, 3244712k available
bash-2.03# mkfile 1024m /notes/tmp/tempswap1 bash-2.03# mkfile 1024m /notes/tmp/tempswap2bash-2.03# swap -a /notes/tmp/tempswap1bash-2.03# swap -a /notes/tmp/tempswap2 bash-2.03# swap -l swapfile dev swaplo blocks free /dev/md/dsk/d1 85,1 16 6146288 6146288 /notes/tmp/tempswap1 - 16 2097136 2097136 /notes/tmp/tempswap2 - 16 2097136 2097136Disabilitazione swap partition
swap -d /dev/md/dsk/d1Cancellata partizione di swap RAID 0
metaclear d1Ripristino swap direttamente sulla slice del secondo disco
swap -a /dev/dsk/c1t1d0s1Eliminazione dei due file di swap di appoggio temporanei
swap -d /notes/tmp/tempswap2 swap -d /notes/tmp/tempswap1bash-2.03# swap -l swapfile dev swaplo blocks free /dev/dsk/c1t1d0s1 32,9 16 3073136 28112483) Scegliere uno dei due dischi con meno errori software (in questo caso il disco 1) per far ripartire il server escludendo il raid software
Copia dei file di configurazione
bash-2.03# cp vfstab vfstab.org bash-2.03# cp system system.orgCancellazione dei metadb sul disco da sostituire
# metadb flags first blk block count a m p luo 16 1034 /dev/dsk/c1t0d0s7 a p luo 1050 1034 /dev/dsk/c1t0d0s7 a u 16 1034 /dev/dsk/c1t1d0s7 a u 1050 1034 /dev/dsk/c1t1d0s7 metadb -d /dev/dsk/c1t1d0s7Disattivazione del submirror dal mirror
metadetach d4 d14metadetach d3 d13metadetach -f d6 d16metadetach d5 15metadetach d0 d10Modifichiamo il mount del filesystem prima del riavvio. Monterà root direttamente nella slice
metaroot /dev/dsk/c1t0d0s0Modifica di /etc/vfstab e verifica di /etc/system
Modifica del file vfstab
/dev/dsk/c1t1d0s1 - - swap - no -/dev/dsk/c1t1d0s4 /dev/rdsk/c1t1d0s4 /usr ufs 1 no logging /dev/dsk/c1t1d0s3 /dev/rdsk/c1t1d0s3 /var ufs 1 no logging /dev/dsk/c1t1d0s6 /dev/rdsk/c1t1d0s6 /notes/data1 ufs 2 yes logging /dev/dsk/c1t1d0s5 /dev/rdsk/c1t1d0s5 /notes/trans1 ufs 2 yes loggingCopia della toc del disco
prtvtoc /dev/rdsk/c1t0d0s0 >/root/c1t0d0s0.toc cat /root/c1t0d0s0.toc | fmthard -s - /dev/rdsk/c1t0d0s0Inizializzazione del boot automatico dal disco 1
eeprom "boot-device=disk1:a disk0:a"Halt del sistema
halt4) Da Console remota di managemet riavviare il server con il disco 1 e ricreazione del mirror
Boot in Single User mode per evitare lo start delle applicazioni sensibili. Potrebbe essere necessario un fsck per correggere eventuali errori del disco
boot -sSostituzione fisica del disco 0 HDD0
devfsadm -CRicreazione del database delle repliche
metadb -a -f -c2 /dev/dsk/c1t1d0s7 metadb -a -f -c2 /dev/dsk/c1t0d0s7Ricreazione dei mirror
metainit -f d10 1 1 c1t0d0s0 metainit -f d20 1 1 c1t1d0s0 metainit d0 -m d20metaroot d0metainit -f d13 1 1 c1t0d0s3 metainit -f d23 1 1 c1t1d0s3 metainit d3 -m d2metainit -f d14 1 1 c1t0d0s4 metainit -f d24 1 1 c1t1d0s4 metainit d4 -m d24metainit -f d15 1 1 c1t0d0s5 metainit -f d25 1 1 c1t1d0s5 metainit d5 -m d25metainit -f d16 1 1 c1t0d0s6 metainit -f d26 1 1 c1t1d0s6 metainit d6 -m d26Attivazione dello swap sulla singola slice
swap -a /dev/dsk/c1t0d0s1Installazione del boot loader
installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c1t0d0s0Cambio sequenza di boot
eeprom "boot-device=disk0:a disk1:a"Modifica di /etc/vfstab e verifica di /etc/system
Modifica del file vfstab e ripristino dei dischi mirrorati
/dev/dsk/c1t1d0s1 - - swap - no - # /dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no logging /dev/md/dsk/d4 /dev/md/rdsk/d4 /usr ufs 1 no logging /dev/md/dsk/d3 /dev/md/rdsk/d3 /var ufs 1 no logging /dev/md/dsk/d6 /dev/md/rdsk/d6 /notes/data1 ufs 2 yes logging /dev/md/dsk/d5 /dev/md/rdsk/d5 /notes/trans1 ufs 2 yes loggingRiavvio in Normal mode
Reboot o init 35) Resync del Mirror
Riattivazione dei submirror e sync dei dischi
bash-2.03# metattach d3 d13 d3: submirror d13 is attached bash-2.03# metattach d4 d14 d4: submirror d14 is attached bash-2.03# metattach d5 d15 d5: submirror d15 is attached bash-2.03# metattach d6 d16 d6: submirror d16 is attachedTerminato il resync sostituzione del secondo disco
6) Sostituzione del secondo disco
Cancellazione delle repliche
metadb -d /dev/dsk/c1t1d0s7Detach dei submirror
metadetach d6 d26 metadetach d5 d25 metadetach d4 d24 metadetach d3 d23 metadetach d0 d20Copia della toc
metadb -d /dev/dsk/c1t1d0s7 prtvtoc /dev/dsk/c1t1d0s0 >/root/c1t1d0s0.toc0Sostituzione fisica del disco 1 HDD1
devfsadm -CRipristino della toc
cat /root/c1t1d0s0.toc | fmthard -s - /dev/rdsk/c1t1d0s0Installazione bootloader
installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c1t1d0s0Ricreazione delle repliche
metadb -a -f -c2 /dev/dsk/c1t1d0s7Riattivazione dei submirror e resync
bash-2.03# metattach d3 d23 d3: submirror d13 is attached bash-2.03# metattach d4 d24 d4: submirror d14 is attached bash-2.03# metattach d5 d25 d5: submirror d15 is attached bash-2.03# metattach d6 d26 d6: submirror d16 is attached bash-2.03# metattach d0 d20 d6: submirror d16 is attachedFinish
bash-2.03# iostat -En c1t0d0 Soft Errors: 0 Hard Errors: 0 Transport Errors: 0 Vendor: SEAGATE Product: ST373207LSUN72G Revision: 0354 Serial No: 2131K83K Size: 73.40GB <73400057856 bytes> Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0 Illegal Request: 0 Predictive Failure Analysis: 0 c1t1d0 Soft Errors: 1 Hard Errors: 2 Transport Errors: 0 Vendor: FUJITSU Product: MAT3073N SUN72G Revision: 0602 Serial No: 000529B0923B Size: 73.40GB <73400057856 bytes> Media Error: 0 Device Not Ready: 0 No Device: 2 Recoverable: 1 Illegal Request: 0 Predictive Failure Analysis: 0 c0t0d0 Soft Errors: 0 Hard Errors: 20 Transport Errors: 0 Vendor: TEAC Product: DV-28E-C Revision: 1.4B Serial No: Size: 18446744073.71GB <-1 bytes> Media Error: 0 Device Not Ready: 20 No Device: 0 Recoverable: 0 Illegal Request: 0 Predictive Failure Analysis: 0
Rispondi