Pubblicato da: ziolinux | marzo 29, 2010

Solaris Mirror disks replacement

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/tempswap2

bash-2.03# swap -a /notes/tmp/tempswap1
bash-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 2097136

Disabilitazione swap partition

swap -d /dev/md/dsk/d1

Cancellata partizione di swap RAID 0

metaclear d1

Ripristino swap direttamente sulla slice del secondo disco

swap -a /dev/dsk/c1t1d0s1

Eliminazione dei due file di swap di appoggio temporanei

swap -d /notes/tmp/tempswap2
swap -d /notes/tmp/tempswap1
bash-2.03# swap -l
swapfile             dev  swaplo blocks   free
/dev/dsk/c1t1d0s1   32,9      16 3073136 2811248

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

Copia dei file di configurazione

bash-2.03# cp vfstab vfstab.org

bash-2.03# cp system system.org

Cancellazione 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/c1t1d0s7

Disattivazione  del submirror dal mirror

metadetach d4 d14
metadetach d3 d13
metadetach -f d6 d16
metadetach d5 15
metadetach d0 d10

Modifichiamo il mount del filesystem prima del riavvio. Monterà root direttamente nella slice

metaroot /dev/dsk/c1t0d0s0

Modifica 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     logging

Copia della toc del disco

prtvtoc /dev/rdsk/c1t0d0s0 >/root/c1t0d0s0.toc

cat /root/c1t0d0s0.toc  | fmthard -s - /dev/rdsk/c1t0d0s0

Inizializzazione del boot automatico dal disco 1

eeprom "boot-device=disk1:a disk0:a"

Halt del sistema

halt

4) 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 -s

Sostituzione fisica del disco 0 HDD0

devfsadm -C

Ricreazione del database delle repliche

metadb -a -f -c2 /dev/dsk/c1t1d0s7
metadb -a -f -c2 /dev/dsk/c1t0d0s7

Ricreazione dei mirror

metainit -f d10 1 1 c1t0d0s0

metainit -f d20 1 1 c1t1d0s0

metainit d0 -m d20
metaroot d0
metainit -f d13 1 1 c1t0d0s3
metainit -f d23 1 1 c1t1d0s3
metainit d3  -m d2
metainit -f d14 1 1 c1t0d0s4
metainit -f d24 1 1 c1t1d0s4
metainit d4  -m d24
metainit -f d15 1 1 c1t0d0s5
metainit -f d25 1 1 c1t1d0s5
metainit d5  -m d25
metainit -f d16 1 1 c1t0d0s6
metainit -f d26 1 1 c1t1d0s6
metainit d6  -m d26

Attivazione dello swap sulla singola slice

swap -a /dev/dsk/c1t0d0s1

Installazione del boot loader

installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c1t0d0s0

Cambio 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     logging

Riavvio in Normal mode

Reboot o init 3

5) 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 attached

Terminato il resync sostituzione del secondo disco

6) Sostituzione del secondo disco

Cancellazione delle repliche

metadb -d /dev/dsk/c1t1d0s7

Detach dei submirror

metadetach d6 d26

metadetach d5 d25

metadetach d4 d24

metadetach d3 d23

metadetach d0 d20

Copia della toc

metadb -d /dev/dsk/c1t1d0s7

prtvtoc /dev/dsk/c1t1d0s0 >/root/c1t1d0s0.toc0

Sostituzione fisica del disco 1 HDD1

devfsadm -C

Ripristino della toc

cat /root/c1t1d0s0.toc  | fmthard -s - /dev/rdsk/c1t1d0s0

Installazione bootloader

installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c1t1d0s0

Ricreazione delle repliche

metadb -a -f -c2 /dev/dsk/c1t1d0s7

Riattivazione 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 attached

Finish

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
Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Categorie

%d blogger hanno fatto clic su Mi Piace per questo: