Linux, Raid, grow, MDADM og krasj – En fortelling om at backup er viktig!

Posted by admin at 28 October 2011

Category: Uncategorized

Situasjon: Raid5 er fullt, ønsker å bytte ut disker fra 1TB til 2TB

Kommandoer kjørt:

mdadm /dev/md0 –fail /dev/sdb1
mdadm /dev/md0 –remove /dev/sdb1
poweroff
<bytt disk, sett den opp som singledisk i bios på kontroller>
<partisjoner ny disk, 1 partisjon, fyller hele disken (så, 2TB), sett
partisjonstype til fd (Linux raid autodetect)>
# fdisk -l /dev/sdb

Disk /dev/sdb: 1999.8 GB, 1999844147200 bytes
222 heads, 32 sectors/track, 549823 cylinders
Units = cylinders of 7104 * 512 = 3637248 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x4583b0de

Device Boot      Start         End      Blocks   Id  System
dev/sdb1               1      549824  1952971776   fd  Linux raid autodetect

mdadm /dev/md0 –add /dev/sdb1

Så monitorerte jeg /proc/mdstat inntil sync er ferdig, og gjentar prosessen for neste disk

Etter bytte av disk 3 får jeg et problem; disken feiles, jeg bytter, booter opp, og får feilmelding ved automount av filsystem.

[   92.647239] EXT4-fs (md0): ext4_check_descriptors: Checksum for group 32640 failed (34014!=0)
[   92.663790] EXT4-fs (md0): group descriptors corrupted!

En fsck.ext4 -n /dev/md0 gir ca 1 GB med logg, som slutter med

Illegal block #2 (3829680662) in inode 134980.  IGNORED.
Illegal block #4 (1906682321) in inode 134980.  IGNORED.
Illegal block #6 (1840784922) in inode 134980.  IGNORED.
Illegal indirect block (4265703871) in inode 134980.  IGNORED.
Illegal double indirect block (4085013194) in inode 134980.  IGNORED.
Illegal indirect block (3727128710) in inode 134980.  IGNORED.
Error while iterating over blocks in inode 134980: Illegal indirect
block found
e2fsck: aborted

Etter flere timer med fsck, samt utvidelse av swap til 64GB (det er selvsagt HELT normalt at fsck bruker 18-20GB minne på å kjøre), så krasjet dette med segfault. Noe som tyder på at “ting ikke har det helt bra”

Litt diskusjoner på irc, stort sett innebærende “har du backup”, så kom jeg fram til at alt uansett var tapt, så nå var det bare å kjøre på med hva jeg måtte finne på internett

  • Satt alle diskene tilbake slik det var opprinnelig. Jeg hadde ikke lagt inn data etter jeg begynte med dette, så de gamle diskene skulle stort sett inneholde korrekte data, selv om datostemplinger var litt ute av synk
  • Importerte config fra disker inn på kontrolleren, slik at alt (potensiellt) var tilbake der det var før jeg begynte i det hele tatt.
  • Startet maskinen, krysset fingre og andre ekstremiteter

Maskinen startet, sutret litt over at diskene ikke var i sync. Stoppet md0

mdadm -S /dev/md0

Deretter satt jeg sammen raidsettet på ny

mdadm –assemble –force /dev/md0 /dev/sd[b-i]1

Litt knatring fra disk, litt sutring om at datostempling ikke var helt god, så startet raidsettet opp. Fremdeles ikke mulig å montere, men det begynte faktisk å synce opp den disken jeg hadde feilet ut tidligere.

fsck -C -y /dev/md0

Nope, får feilmelding om at den ikke finner superblokken sin, og at backupblokken er defekt.

http://linuxexpresso.wordpress.com/2010/03/31/repair-a-broken-ext4-superblock-in-ubuntu/

Denne viser hvordan man finner alle superblokkene til disken. Jeg fant en annen, brukte

fsck -b <blokk> -C -y /dev/md0

Da klarte den å sjekke filsystemet. Lot denne kjøre i ~1 time, masse rask den ryddet opp i, og da ville filsystemet endelig la seg montere.

Jeg ser at det er en del blokker som har mistet data, og jeg har nok mistet “en del”. Det er likevel ikke grusomt farlig (dette er tross alt “scratch”-data, og ting jeg lett kan finne på ny. Det som eksisterer torrents av, har jeg sett ligger på rundt 95-99% complete, så det er “stort sett” okei.

Hva kan man (jeg) lære av dette?

  • Backup av viktige ting (noe jeg har, bildene mine lå på denne disken, og det har jeg selvsagt backup av)
  • Aldri gi opp, det er alltid “noen” på internett som vet “noe” om slikt som dette her, som kan gi små tips på veien.
  • Om det er viktige ting på diskene, og du ikke har backup, lag image av diskene før du setter i gang, slik at du kan rulle tilbake dersom ting går virkelig galt. Ja, det tar mye plass å gjøre det på den måten, men du vil forhåpentligvis klare å gjenskape mesteparten av dataene dine.

2 Comments

  1. Francis says

    Min alternative metode: kjøp ny server med nye disker, sett opp, kopier alt over og selg den gamle serveren… ;)

    • Christian Langeland says

      Litt usikker på om den løsningen der går helt hjem hos madammen :) men, godt forslag :D