Hvordan gjenopprette data og gjenoppbygge mislykkede programvare-RAID-er - del 8


I de forrige artiklene i denne RAID-serien gikk du fra null til RAID-helt. Vi gjennomgikk flere programvare-RAID-konfigurasjoner og forklarte det viktigste for hver enkelt, sammen med årsakene til at du ville lene deg mot det ene eller det andre avhengig av ditt spesifikke scenario.

I denne veiledningen vil vi diskutere hvordan du gjenoppbygger en programvare-RAID-array uten tap av data når det oppstår en diskfeil. For korthets skyld vil vi bare vurdere et RAID 1-oppsett – men konseptene og kommandoene gjelder for alle tilfeller like.

Scenario for RAID-testing

Før du fortsetter, sørg for at du har satt opp en RAID 1-array ved å følge instruksjonene i del 3 av denne serien: Hvordan sette opp RAID 1 (speil) i Linux.

De eneste variasjonene i vårt nåværende tilfelle vil være:

1) en annen versjon av CentOS (v7) enn den som ble brukt i den artikkelen (v6.5), og
2) forskjellige diskstørrelser for /dev/sdb og /dev/sdc (8 GB hver).

I tillegg, hvis SELinux er aktivert i håndhevingsmodus, må du legge til de tilsvarende etikettene i katalogen der du skal montere RAID-enheten. Ellers vil du støte på denne advarselsmeldingen mens du prøver å montere den:

Du kan fikse dette ved å kjøre:


restorecon -R /mnt/raid1

Sette opp RAID-overvåking

Det er en rekke årsaker til at en lagringsenhet kan svikte (SSD-er har imidlertid redusert sjansene for at dette skjer betydelig), men uansett årsak kan du være sikker på at problemer kan oppstå når som helst, og du må være forberedt på å erstatte den mislykkede del og for å sikre tilgjengeligheten og integriteten til dataene dine.

Et råd først. Selv når du kan inspisere /proc/mdstat for å sjekke statusen til RAID-ene dine, er det en bedre og tidsbesparende metode som består av å kjøre mdadm i monitor + skanning modus, som vil sende varsler via e-post til en forhåndsdefinert mottaker.

For å sette opp dette, legg til følgende linje i /etc/mdadm.conf:


MAILADDR user@<domain or localhost>

I mitt tilfelle:


MAILADDR gacanepa@localhost

For å kjøre mdadm i monitor + skannemodus, legg til følgende crontab-oppføring som root:


@reboot /sbin/mdadm --monitor --scan --oneshot

Som standard vil mdadm sjekke RAID-arrayene hvert 60. sekund og sende et varsel hvis det finner et problem. Du kan endre denne virkemåten ved å legge til --forsinkelse-alternativet til crontab-oppføringen ovenfor sammen med antall sekunder (for eksempel, --forsinkelse 1800 betyr 30 minutter).

Til slutt, sørg for at du har en Mail User Agent (MUA) installert, for eksempel mutt eller mailx. Ellers vil du ikke motta noen varsler.

Om et minutt vil vi se hvordan et varsel sendt av mdadm ser ut.

Simulere og erstatte en mislykket RAID-lagringsenhet

For å simulere et problem med en av lagringsenhetene i RAID-arrayet, bruker vi alternativene --manage og --set-faulty som følger:


mdadm --manage --set-faulty /dev/md0 /dev/sdc1  

Dette vil føre til at /dev/sdc1 blir merket som defekt, som vi kan se i /proc/mdstat:

Enda viktigere, la oss se om vi mottok et e-postvarsel med samme advarsel:

I dette tilfellet må du fjerne enheten fra programvarens RAID-array:


mdadm /dev/md0 --remove /dev/sdc1

Deretter kan du fysisk fjerne den fra maskinen og erstatte den med en reservedel (/dev/sdd, der en partisjon av typen fd tidligere er opprettet):


mdadm --manage /dev/md0 --add /dev/sdd1

Heldigvis for oss vil systemet automatisk begynne å gjenoppbygge arrayet med den delen vi nettopp har lagt til. Vi kan teste dette ved å merke /dev/sdb1 som feil, fjerne det fra arrayet og sørge for at filen tecmint.txt fortsatt er tilgjengelig på / mnt/raid1:


mdadm --detail /dev/md0
mount | grep raid1
ls -l /mnt/raid1 | grep tecmint
cat /mnt/raid1/tecmint.txt

Bildet ovenfor viser tydelig at etter å ha lagt til /dev/sdd1 til arrayet som erstatning for /dev/sdc1, ble gjenoppbyggingen av data automatisk utført av systemet uten intervensjon fra vår side.

Selv om det ikke er strengt nødvendig, er det en god idé å ha en reserveenhet tilgjengelig slik at prosessen med å erstatte den defekte enheten med en god stasjon kan gjøres på et blunk. For å gjøre det, la oss legge til /dev/sdb1 og /dev/sdc1 på nytt:


mdadm --manage /dev/md0 --add /dev/sdb1
mdadm --manage /dev/md0 --add /dev/sdc1

Å komme seg etter et redundanstap

Som forklart tidligere, vil mdadm automatisk gjenoppbygge dataene når en disk feiler. Men hva skjer hvis 2 disker i arrayet mislykkes? La oss simulere et slikt scenario ved å merke /dev/sdb1 og /dev/sdd1 som feil:


umount /mnt/raid1
mdadm --manage --set-faulty /dev/md0 /dev/sdb1
mdadm --stop /dev/md0
mdadm --manage --set-faulty /dev/md0 /dev/sdd1

Forsøk på å gjenskape matrisen på samme måte som den ble opprettet på dette tidspunktet (eller ved å bruke --assume-clean-alternativet) kan føre til tap av data, så det bør være en siste utvei.

La oss prøve å gjenopprette dataene fra for eksempel /dev/sdb1 til en lignende diskpartisjon (/dev/sde1 – merk at dette krever at du oppretter en partisjon av skriv fd i /dev/sde før du fortsetter) ved å bruke ddrescue:


ddrescue -r 2 /dev/sdb1 /dev/sde1

Vær oppmerksom på at til dette tidspunktet har vi ikke rørt /dev/sdb eller /dev/sdd, partisjonene som var en del av RAID-arrayen.

La oss nå gjenoppbygge matrisen ved å bruke /dev/sde1 og /dev/sdf1:


mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/sd[e-f]1

Vær oppmerksom på at i en reell situasjon vil du vanligvis bruke de samme enhetsnavnene som med den opprinnelige matrisen, det vil si /dev/sdb1 og /dev/sdc1 etter mislykkede disker er erstattet med nye.

I denne artikkelen har jeg valgt å bruke ekstra enheter for å gjenskape arrayet med helt nye disker og for å unngå forvirring med de originale defekte stasjonene.

Når du blir spurt om du vil fortsette å skrive array, skriv Y og trykk Enter. Matrisen skal startes og du bør kunne se fremdriften med:


watch -n 1 cat /proc/mdstat

Når prosessen er fullført, skal du kunne få tilgang til innholdet i RAID:

Sammendrag

I denne artikkelen har vi gjennomgått hvordan du gjenoppretter fra RAID-feil og redundantstap. Du må imidlertid huske at denne teknologien er en lagringsløsning og IKKE erstatter sikkerhetskopier.

Prinsippene som er forklart i denne veiledningen gjelder for alle RAID-oppsett, så vel som konseptene som vi vil dekke i den neste og siste veiledningen i denne serien (RAID-administrasjon).

Hvis du har spørsmål om denne artikkelen, send oss gjerne et notat ved å bruke kommentarskjemaet nedenfor. Vi ser frem til å høre fra deg!