Miklix

Byta ut en misslyckad enhet i en mdadm-array på Ubuntu

Publicerad: 15 februari 2025 kl. 22:02:35 UTC
Senast uppdaterad: 12 januari 2026 kl. 08:50:04 UTC

Om du befinner dig i den fruktade situationen att få ett hårddiskfel i en mdadm RAID-array, förklarar den här artikeln hur du korrekt byter ut den på ett Ubuntu-system.


Denna sida har maskinöversatts från engelska för att göra den tillgänglig för så många som möjligt. Tyvärr är maskinöversättning ännu inte en fulländad teknik, så fel kan uppstå. Om du föredrar det kan du se den engelska originalversionen här:

Replacing a Failed Drive in an mdadm Array on Ubuntu

Informationen i det här inlägget är baserad på Ubuntu 18.04 och den version av mdadm som ingår i dess repositories; i skrivande stund v4.1-rc1. Den kan vara giltig för andra versioner, men kanske inte.

Jag drabbades nyligen av ett plötsligt hårddiskfel i min hemfilserver, som består av nio hårddiskar i en mdadm RAID-6-array. Det är alltid läskigt, men jag kunde som tur var snabbt hitta en ersättningshårddisk som levererades redan nästa dag så att jag kunde börja ombyggnationen.

Jag var visserligen lite för snål när jag ursprungligen installerade filservern; bara två av hårddiskarna är riktiga NAS-enheter (Seagate IronWolf), medan resten är stationära hårddiskar (Seagate Barracuda). Inte överraskande var det en av stationära hårddiskarna som hade gett upp (efter nästan tre års användning dock). Den var helt död; efter att ha flyttat den till ett USB-kabinett för stationär dator fick jag bara ut ett obehagligt klickande ljud och varken Ubuntu 20.04 eller Windows 10 kunde upptäcka den.

Nåväl, vidare till reservdelen (och ja, den nya hårddisken jag köpte var en IronWolf, läxan lärd) – hur läskigt det än är att tappa bort en hårddisk i en aktiv array, är det ännu läskigare om man inte vet rätt procedur för att byta ut den. Det är inte första gången jag har varit tvungen att byta ut en trasig hårddisk i en mdadm-array, men som tur är är det så sällsynt att jag oftast måste leta upp rätt kommandon. Den här gången bestämde jag mig för att snickra ihop min egen lilla guide för framtida referens.

Så, först och främst, när du får det fruktade felmeddelandet från mdadm, måste du identifiera vilken hårddisk som har gått sönder. Visst, den visar enhetens namn (i mitt fall /dev/sdf), men det är förmodligen inte uppenbart vilken fysisk hårddisk det faktiskt är eftersom dessa namn kan ändras när maskinen startas.

Om du inte ens är säker på vilket enhetsnamn som har misslyckats kan du använda följande kommando för att ta reda på det (ersätt /dev/md0 med din RAID-enhet):

mdadm -–query -–detail /dev/md0

Som nämnts, i mitt fall var det /dev/sdf, så låt oss fortsätta med det.

Sedan kan du försöka hitta serienumret på den trasiga hårddisken genom att köra detta kommando:

smartctl -–all /dev/sdf | grep -i 'Serial'

(om smartctl inte hittas måste du installera smartmontools-paketet på Ubuntu)

Serienumret kan sedan jämföras med serienumren på den fysiska etiketten på hårddiskarna för att ta reda på vilken som har gått sönder.

Den här gången hade jag dock inte sån tur. Hårddisken var helt död och vägrade till och med att tillhandahålla SMART eller annan data, inklusive serienumret.

Eftersom jag hade fysisk åtkomst till servern (vilket man verkligen behöver om man ska byta ut en fysisk hårddisk själv, antar jag ;-)) och servern faktiskt var igång när hårddisken gick sönder (och fortsatte att fungera felfritt tack vare RAID-6-redundansen), valde jag den riktigt primitiva, men faktiskt mycket effektiva och självklara, metoden att helt enkelt kopiera en stor fil till servern och titta på vilken hårddisklampa som inte blinkade. Inom några sekunder hade jag identifierat boven i dramat.

Innan du ryckar ut den fysiska hårddisken är det en bra idé att formellt informera mdadm om denna avsikt genom att utfärda detta kommando (ersätt enhetsnamn med dina egna efter behov):

mdadm -–manage /dev/md0 -–remove /dev/sdf1

Om det lyckas svarar mdadm med ett meddelande som säger att den har "hot removed" (borttagen hårddisken under drift), tydligen för att den virtuella RAID-enheten faktiskt körs just då.

Om det misslyckas med ett felmeddelande liknande "enhet eller resurs upptagen", kan det vara så att mdadm faktiskt inte har registrerat att hårddisken har misslyckats helt. För att få det att göra det, kör detta kommando (återigen, kom ihåg att ersätta enhetsnamn med dina egna efter behov):

mdadm --manage /dev/md0 --fail /dev/sdf

Efter det borde du kunna ta bort enheten från arrayen med föregående kommando.

Nu är det dags att byta ut hårddisken. Om du är riktigt, riktigt – typ, riktigt – säker på att din maskin och styrenhet stöder hot swapping, kan du göra detta utan att stänga av maskinen. Det skulle vara rätt väg att gå med kritiska produktionssystem som körs på riktig, korrekt serverhårdvara som du vet med säkerhet kan hantera det. Min hemmafilserver är dock baserad på ett konsumentklassat stationärt moderkort med ett par halvt okänd SATA-styrenheter i PCIe-kortplatserna för att ge fler SATA-portar.

Även om SATA generellt sett borde stödja hot swapping, tänkte jag inte riskera något i den här installationen, så jag valde att stänga av maskinen medan jag bytte ut hårddisken.

Innan du gör det är det en bra idé att kommentera bort raid-enheten i /etc/fstab-filen så att Ubuntu inte försöker montera den automatiskt vid nästa uppstart, eftersom den kan hänga sig och tvinga dig in i återställningsläge på grund av den degraderade RAID-matrisen. Det kanske inte är ett stort problem om det är ett skrivbordssystem, men jag kör den här servern headless utan skärm eller tangentbord anslutet, så det skulle vara lite krångligt.

Efter att du startat maskinen med den nya hårddisken installerad, använd lsblk eller något annat sätt att identifiera den. Om du inte har ändrat något annat kommer den förmodligen (men inte nödvändigtvis) att få samma namn som hårddisken du bytte ut. I mitt fall fick den det, så den nya heter också /dev/sdf.

Eftersom min array är baserad på partitioner snarare än fysiska enheter, behövde jag kopiera partitionstabellen från en fungerande hårddisk till den nya hårddisken för att säkerställa att de är exakt likadana. Om du kör din array på fysiska enheter istället kan du hoppa över det här steget.

Jag använde sgdisk för detta ändamål och kopierade partitionstabellen från /dev/sdc till /dev/sdf. Se till att ersätta enhetsnamnen så att de matchar dina egna efter behov.

Lägg märke till ordningen här: du listar "till"-enheten först! Det här är lite kontraintuitivt för mig, men se bara till att du gör det rätt så att du inte får ytterligare ett enhetsfel i arrayen ;-)

sgdisk -R /dev/sdf /dev/sdc

För att undvika UUID-konflikter, generera sedan nya UUID:er för den nya hårddisken:

sgdisk -G /dev/sdf

Och nu är det äntligen dags att lägga till den nya hårddisken i disksystemet och sätta igång ombyggnadsfesten! (Okej, det är egentligen ingen fest, det är faktiskt en ganska långsam och nervös process eftersom man verkligen, verkligen inte vill att ytterligare en hårddisk ska gå sönder just nu. Öl kanske hjälper dock.)

Hur som helst, för att lägga till den nya enheten i arrayen, kör detta kommando (återigen, se till att ersätta enhetsnamn med dina egna efter behov):

mdadm -–manage /dev/md0 -–add /dev/sdf1

Om allt går bra kommer hårddisken att läggas till i arrayen utan problem. Jag tror att den faktiskt läggs till som en "hot spare" som standard, men eftersom den här arrayen saknar en disk (den som gick sönder) tas den omedelbart i bruk och återuppbyggnadsprocessen startar.

Du kan hålla koll på det så här:

watch cat /proc/mdstat

Det här kommer förmodligen ta ett tag; på min enkla server (som till stor del är baserad på konsumentklassad hårdvara och stationära hårddiskar, observera) kunde den nå strax under 100 MB/sek. Tänk på att det här är RAID-6, så det är många paritetsberäkningar inblandade i en ombyggnad; en RAID-10 hade varit mycket snabbare. Den här maskinen har en AMD A10 9700E fyrkärnig processor ("E" betyder att det är en underklockad energieffektiv modell, dvs. inte supersnabb), bara för att ge dig en uppfattning om vad du kan förvänta dig. Med de nio 8 TB-hårddiskarna i min setup tog hela ombyggnaden drygt 24 timmar.

Under ombyggnaden kan du montera filsystemet på arrayen och använda det som vanligt om du vill, men jag föredrar att låta det vara kvar tills ombyggnaden är klar. Tänk på att om en hårddisk går sönder kan en annan snart följa, så du vill att ombyggnaden ska ske så snabbt som möjligt eftersom du verkligen inte vill att en annan hårddisk ska gå sönder under den tiden. Belasta den därför inte med annan IO som inte är absolut nödvändig.

När det är klart, lägg till det tillbaka i din /etc/fstab-fil, starta om och njut av dina filer :-)

Dela på BlueskyDela på FacebookDela på LinkedInDela på TumblrDela på XDela på LinkedInFäst på Pinterest

Mikkel Christensen

Om författaren

Mikkel Christensen
Mikkel är skaparen och ägaren av miklix.com. Han har över 20 års erfarenhet som professionell datorprogrammerare/mjukvaruutvecklare och är för närvarande heltidsanställd på ett stort europeiskt IT-bolag. När han inte bloggar ägnar han sin fritid åt en mängd olika intressen, hobbies och aktiviteter, vilket i viss mån kan återspeglas i de olika ämnen som behandlas på den här webbplatsen.