- Identificarea corectă a discurilor și partițiilor RAID cu instrumente precum lsblk și mdadm --detail este esențială înainte de a atinge orice.
- Înlocuirea discului în mdadm se bazează pe marcarea erorilor logice, eliminarea partițiilor din matrice și adăugarea unora noi pentru reconstrucție.
- În ZFS, problemele legate de importul unui pool după o eroare de disc necesită prudență extremă și prioritizarea copierii datelor de pe discul sănătos.
- Citirea discurilor RAID Linux din Windows necesită mai întâi asamblarea matricei (de exemplu, cu WSL2 și mdadm) înainte de montarea sistemului de fișiere.
Când un hard disk începe să se defecteze în interiorul unui Configurarea RAID în LinuxE ușor să intri în panică: serverul nu mai răspunde, sistemul nu pornește sau pool-ul de stocare intră în modul „UNAVAIL”. Vestea bună este că, dacă RAID-ul este configurat corect și procedați cu atenție, puteți înlocui discul defect și recupera fără a pierde date.
În acest articol vom vedea, în detaliu și cu o abordare practică, cum să identificăm un disc rupt, cum Eliminați-l dintr-un RAID software folosind mdadmCum să gestionezi cazuri mai delicate, cum ar fi un pool ZFS care refuză să importe din cauza lipsei de replici, ce se întâmplă când încerci să citești discuri în Windows cu WSL2 și XFS și cum să gestionezi scenariile în care discurile RAID au dimensiuni diferite și apoi vrei să profiți de spațiul rămas.
Concepte de bază: RAID software în Linux (mdadm, ZFS, tipuri RAID)
Înainte de a începe să jucăm orice, este important să clarificăm câteva lucruri. concepte fundamentale despre RAID în LinuxAcest lucru va preveni surprizele și erorile ireversibile atunci când va veni momentul să înlocuiți un disc deteriorat.
Majoritatea serverelor Linux tradiționale folosesc RAID software bazat pe mdadmAcest sistem creează dispozitive virtuale /dev/mdX (de exemplu, /dev/md0, /dev/md1…) care sunt construite din partiții fizice precum /dev/sda1, /dev/sdb2 etc. Sisteme de fișiere precum ext4, XFS sau altele sunt montate pe aceste dispozitive /dev/mdX.
Un caz diferit, din ce în ce mai răspândit, este utilizarea ZFS ca sistem de fișiere și manager de volumeZFS nu se bazează pe mdadm, ci își gestionează propria redundanță folosind vdevs (mirror-uri, RAIDZ etc.). Când un disc se defectează în ZFS, procesul de înlocuire și recuperare este gestionat cu comenzi precum zpool și nu cu mdadm.
De asemenea, este important să nu confundăm RAID-ul cu copiile de rezervă: RAID oferă redundanță și continuitate a serviciuluiDar nu înlocuiește o copie de rezervă. Un RAID 1 te poate salva dacă un disc se defectează, dar nu dacă ștergi accidental date sau dacă întreaga structură logică a sistemului de fișiere se corupe.
La mulți furnizori (cum ar fi Hetzner și alți furnizori dedicați), imaginile de sistem vin deja cu un RAID1 software preconfigurat pe două discuri, împărțite în mai multe partiții: swap, /boot, root / și uneori /home, fiecare cu /dev/mdX-ul corespunzător.
Cum se inspectează starea unui RAID software cu mdadm
Când suspectați că unul dintre hard disk-uri începe să se defecteze, primul lucru de făcut este vezi exact ce se întâmplă în RAIDPentru asta, ai la dispoziție câteva instrumente de bază pe care ar trebui să le stăpânești.
O comandă foarte utilă este lsblkAceasta arată cum sunt organizate discurile, partițiile și dispozitivele RAID în sistem. Cu o singură comandă, puteți vedea ce discuri fizice sunt prezente și cum se leagă acestea de /dev/mdX:
Exemplu de ieșire a comenzii lsblk (simplificat):
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop1 7:1 0 110.6M 1 loop /snap/core/...
sda 8:0 0 3.6T 0 disk
├─sda1 8:1 0 16G 0 part └─md0 9:0 0 16G 0 raid1
├─sda2 8:2 0 512M 0 part └─md1 9:1 0 511M 0 raid1 /boot
├─sda3 8:3 0 2T 0 part └─md2 9:2 0 2T 0 raid1 /
└─sda4 8:4 0 1.7T 0 part └─md3 9:3 0 1.7T 0 raid1 /home
sdb 8:16 0 3.6T 0 disk
├─sdb1 8:17 0 16G 0 part └─md0 9:0 0 16G 0 raid1
├─sdb2 8:18 0 512M 0 part └─md1 9:1 0 511M 0 raid1 /boot
├─sdb3 8:19 0 2T 0 part └─md2 9:2 0 2T 0 raid1 /
└─sdb4 8:20 0 1.7T 0 part └─md3 9:3 0 1.7T 0 raid1 /home
Cu această structură, puteți observa că există două discuri, sda și sdb, și că fiecare partiție de pe sda are propria oglindă pe sdb, formând matricele md0, md1, md2 și md3. Într-un astfel de mediu, dacă unul dintre discuri se defectează, celălalt ar trebui să continue. care conține toate informațiile.
Pentru a aprofunda o anumită matrice, utilizați mdadm –detaliuDe exemplu, pentru a vedea starea fișierului /dev/md0:
mdadm --detail /dev/md0
Rezultatul include date precum nivelul RAID, dimensiunea, numărul de discuri active și, în final, un tabel cu dispozitivele care alcătuiesc matricea. Veți vedea ceva de genul:
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
Acea tabelă este locul unde puteți detecta dacă o partiție este marcată ca defect (defect), „îndepărtat” sau dacă lipsește un disc. Aceste informații sunt esențiale pentru a ști ce disc trebuie înlocuit sau care ar trebui îndepărtat fără a deteriora sistemul.
Scoaterea unui disc sănătos dintr-un RAID (de exemplu, în servere dedicate)
În unele cazuri nu există o defecțiune fizică a discului, ci pur și simplu Vrei să eliberezi unul dintre discurile din RAID să îl dedici unei alte utilizări: stocare independentă, copii de rezervă etc. Acest lucru este comun în serverele dedicate unde furnizorul instalează implicit un RAID1, dar ai nevoie de al doilea disc liber.
Ideea este următoarea: marcați partițiile de pe acel disc ca defecte în fiecare matrice, eliminați-le din RAID și apoi redimensionați numărul de dispozitive astfel încât mdX să nu mai aștepte acel al doilea disc. Sistemul va continua să funcționeze cu un „RAID” pe un singur disc, care este de fapt un pseudo-RAID, dar vă scutește de reinstalarea acestuia.
Procesul trebuie repetat pentru a fiecare matrice mdX implicată (swap, /boot, /, /home…). Să vedem pas cu pas pentru md0, știind că trebuie să faci același lucru și în md1, md2 etc.
1. Examinați partiția implicată în matrice
Mai întâi, verificați ce partiții fizice alcătuiesc /dev/md0:
mdadm -D /dev/md0
La capătul ieșirii veți vedea ceva de genul:
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
Dacă scopul tău este să elimini discul sdb din RAID, tabelul respectiv îți arată că Va trebui să acționați asupra /dev/sdb1 În cazul md0, /dev/sdb2 în md1 și așa mai departe.
2. Marcați partiția ca defectă
Cu mdadm nu poți pur și simplu să elimini o partiție pe care o consideră sănătoasă; mai întâi trebuie să o marchezi ca eșuată. Aceasta nu deteriorează fizic discul, ci doar îi spune matricei să nu mai utilizeze acea replică.
Exemplu pentru md0 și sdb1:
mdadm /dev/md0 --fail /dev/sdb1
Răspunsul tipic va fi ceva de genul „set /dev/sdb1 faulty in /dev/md0”. Din acel moment, matricea știe că această replică nu mai este de încredere și o pune într-o stare defectuoasă.
3. Eliminați partiția defectă din matrice
Odată marcat ca defect, puteți eliminați partiția RAID:
mdadm /dev/md0 --remove /dev/sdb1
Aceasta va face ca mdadm să „deconecteze” partiția fizică a matricei. Logic, md0 va exista în continuare, dar va fi salvată doar de /dev/sda1.
4. Ajustați numărul de dispozitive RAID
În acest moment, md0 poate rămâne într-o stare degradată dacă încă mai consideră că ar trebui să existe două dispozitive. Pentru ca sistemul să îl considere stabil, trebuie... modificați numărul așteptat de discuri în matrice:
mdadm --grow /dev/md0 --raid-devices=1 --force
Deși cuvântul „creștere” poate părea să indice expansiune, în acest context modificați de fapt configurația internă pentru a spune matricei că acum va exista un singur dispozitiv activ.
După repetarea acestui proces pe toate unitățile mdX, puteți reporni serverul. Rezultatul va fi un sistem care pornește utilizând un RAID software cu un singur disc, iar celălalt disc va rămâne neutilizat. complet liber de partiționat și formatat cum doriți.
Înlocuirea efectivă a unui disc defect în RAID-ul mdadm
Când problema nu este că vrei să eliberezi un disc, ci că unul dintre ele El a murit cu adevăratProcedura este similară, dar cu o diferență cheie: în loc să păstreze un singur disc, scopul este înlocuiți discul deteriorat cu unul nou și reconstruiți RAID-ul.
În termeni generali, ciclul ar fi:
- Identificați care disc se defectează (smartctl, mesaje kernel, mdadm –detail).
- Marcați partițiile de pe acel disc ca defecte în fiecare mdX.
- Eliminați-le din RAID cu comanda mdadm –remove.
- Înlocuiți fizic discul defect cu unul nou (evitați înșelătoriile atunci când cumpărați discuri).
- Partiționați noul disc astfel încât partițiile sale să corespundă ca dimensiune și tip cu cele ale discului sănătos.
- Adăugați noile partiții la fiecare /dev/mdX cu mdadm –add și lăsați-o să se reconstruiască.
cu mdadm –detalii /dev/md0 Puteți verifica starea reconstrucției și puteți vedea când toate discurile sunt active și sincronizate din nou. De asemenea, puteți monitoriza procesul cu watch -n1 cat /proc/mdstatcare va actualiza bara de progres a resincronizării în fiecare secundă.
În configurații mai avansate (cum ar fi RAID 5 sau RAID 6), se aplică același principiu, dar impactul pierderii mai multor discuri simultan poate fi catastrofal. De aceea, înlocuirea este esențială. rapid un disc care începe să dea erori înainte ca altul să eșueze.
Creați și gestionați o nouă matrice RAID (exemplu RAID6 cu mdadm)
Deși scopul aici este de a înlocui discurile defecte, este util să vedem cum este construită o matrice RAID de la zero pentru a înțelege ce se modifică atunci când un disc este înlocuit. Un exemplu tipic este crearea unui RAID6 cu mai multe discuri folosind mdadm.
Primul pas este să vă asigurați că mdadm este instalat pe sistem. Pe Debian/Ubuntu, acest lucru se face cu:
sudo apt-get install mdadm
În sistemele de tip Red Hat, comanda echivalentă ar fi:
sudo yum install mdadm
Înainte de a crea matricea, este recomandabil să verificați dacă discurile nu au deja superblocuri din RAID-uri vechi. Acest lucru se face prin examinarea potențialelor discuri sau partiții:
sudo mdadm -E /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
Dacă nu apare nicio semnătură anterioară, următorul pas este partiționarea fiecărui disc folosind fdisk (sau parted) prin crearea unei partiții RAID primare (cod fd). Secvența tipică în fdisk ar fi: crearea unei partiții noi (n), primară (p), alegerea numărului, acceptarea sectoarelor implicite, schimbarea tipului (t), selectarea codului fd și scrierea modificărilor (w).
După ce toate partițiile sunt pregătite, matricea este creată:
sudo mdadm --create /dev/md0 --level=6 --raid-devices=5 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
Aceasta va crea /dev/md0 ca o matrice RAID6 folosind cinci partiții. Matricea va începe reconstrucția automată, iar progresul poate fi monitorizat cu:
watch -n1 cat /proc/mdstat
Odată ce RAID-ul este gata, trebuie să creați sistemul de fișiere, de exemplu ext4:
sudo mkfs.ext4 /dev/md0
Apoi este montat pe un director, de exemplu /mnt/Raid6:
sudo mkdir -p /mnt/Raid6
sudo mount /dev/md0 /mnt/Raid6/
Pentru a se monta automat la pornire, se adaugă o intrare în /etc/fstab, ceva de genul:
/dev/md0 /mnt/raid6 ext4 defaults 0 0
Și pentru a evita pierderea configurației matricei, fișierul de configurare mdadm este generat:
sudo mdadm --detail --scan --verbose >> /etc/mdadm.conf
Testarea RAID prin provocarea unei defecțiuni a discului
Înainte de a încredința datele unei matrice RAID nou create, este recomandabil să verificați dacă Se comportă într-adevăr așa cum te-ai aștepta în cazul unei defecțiuni.Cea mai sigură metodă de a face acest lucru este să simulați defecțiunea unuia dintre discuri folosind mdadm, fără a atinge hardware-ul fizic.
Să presupunem că aveți o matrice RAID care include /dev/sdb1, /dev/sdc1 și un disc de rezervă /dev/sdg1. Puteți forța eroarea logică a /dev/sdc1 cu:
sudo mdadm --manage --fail /dev/md0 /dev/sdc1
Apoi verificați detaliile matricei:
sudo mdadm --detail /dev/md0
În timpul procesului de pornire, ar trebui să vedeți că discul marcat ca defect a fost șters și înlocuit de discul de rezervă, care va începe sincronizarea. Aceasta este cea mai bună dovadă că RAID-ul răspunde bine la un incident din lumea reală.
Cazuri speciale: probleme cu ZFS atunci când un disc din pool se defectează
În medii mai moderne, în special cu hipervizori precum Proxmox, ZFS este utilizat pentru a gestiona discurile în pool-uri cu redundanță nativăUn caz tipic: aveți un pool ZFS în oglindă (RAID1), unul dintre cele două discuri se defectează și, brusc, serverul se oprește din bootare deoarece pool-ul rădăcină nu poate fi importat.
În această situație, când încercați să importați manual pool-ul, este posibil să întâlniți mesaje precum:
zpool import -f rpool
cannot import 'rpool': no such pool or dataset
Destroy and recreate the pool from a backup source
Sau încercați alte opțiuni:
zpool import -N
Returnează starea UNAVAIL și indică „replici insuficiente” și „dispozitive sau date deteriorate”. Pe scurt, ZFS nu vede suficiente copii valide pentru a asigura integritatea bazinului și de aceea refuză să îl importe în mod standard.
În aceste cazuri, este esențial să nu improvizați prea multe comenzi aleatorii. Câteva idei de reținut:
- Dacă oglinda a fost montată corect, un singur disc sănătos ar trebui să fie suficient pentru a importa pool-ul în modul degradat. Dacă ZFS raportează oglinzi insuficiente, este posibil să existe o corupție gravă sau o detectare slabă a dispozitivului.
- Nu poți „spune” ZFS să înlocuiască direct un disc mort cu altul dacă pool-ul nu reușește să importe; nu este ca mdadm, unde lucrezi la nivel de partiție fără a monta sistemul de fișiere.
- Cel mai prudent lucru de făcut este, de obicei, să încerci un import forțat și doar pentru citire Folosind semnalizatoare avansate (de exemplu, -F, -o readonly=on), verificați care seturi de date pot fi recuperate și copiați datele, dacă este posibil.
- Dacă pool-ul nu poate fi importat în niciun fel, următorul pas sensibil este clonarea sau blocarea imaginii discului care încă funcționează, pentru a păstra acea „copie de rezervă” înainte de experimente ulterioare.
Marea problemă într-un scenariu precum cel descris (unde discul bun este și singurul loc unde se află datele) este că Nu există o plasă de siguranță suplimentarăPrin urmare, este recomandabil să întrerupeți orice încercări agresive de reparare și să vă concentrați mai întâi pe salvarea conținutului discului care încă răspunde, chiar dacă se află în afara ZFS.
Citirea unui RAID Linux (XFS, ext4) din Windows folosind WSL2
Un alt scenariu foarte comun este cel al cuiva care scoate un disc de pe un server Linux și dorește Citiți datele de pe un PC cu WindowsLa prima vedere ar putea părea simplu: conectezi unitatea prin USB, folosești un instrument precum Linux Reader și gata. Dar când unitatea respectivă face parte dintr-un RAID software, lucrurile se complică.
În cazul specific al unui disc cu o tabelă GPT unde toate partițiile apar ca „Linux RAID”, Windows și multe utilitare grafice nu știu ce să facă cu ele. De exemplu, fdisk ar putea afișa ceva de genul:
Device Start End Sectors Size Type
/dev/sdd1 1032192 5031935 3999744 1.9G Linux RAID
/dev/sdd2 5031936 9031679 3999744 1.9G Linux RAID
/dev/sdd3 30720 1032191 1001472 489M Linux RAID
/dev/sdd4 9031680 3907028991 3897997312 1.8T Linux RAID
Dacă în /dev/sdd4 există, de exemplu, un sistem de fișiere XFS aparținând unui array mdadm, încercarea de a-l monta direct are de obicei un rezultat de genul:
mount -t xfs /dev/sdd4 /mnt/tempdisk
mount: wrong fs type, bad superblock on /dev/sdd4...
Sau dacă încercați fără a specifica tipul FS:
mount /dev/sdd4 /mnt/tempdisk
mount: unknown filesystem type 'linux_raid_member'
Acele mesaje indică faptul că /dev/sdd4 nu este direct un sistem de fișiereci mai degrabă un membru al unei matrice RAID. Sistemul de fișiere „real” se află pe /dev/mdX, care nu există încă în acest context. Pentru a citi conținutul din WSL2 (de exemplu, Ubuntu), va trebui să:
- Încărcați modulele mdadm în kernelul WSL2 dacă nu sunt deja încărcate.
- Folosi mdadm –examinează pe partițiile RAID pentru a identifica matricea căreia îi aparțin.
- Recreați matricea mdX în modul „assemble” (mdadm –assemble) astfel încât să apară /dev/md0 (sau cel care ar trebui să fie).
- Odată ce /dev/md0 există, montați dispozitivul respectiv cu tipul FS corespunzător (XFS, ext4 etc.).
Fără a trece prin faza de asamblare RAID, Nu veți putea monta direct partiții marcate ca RAID Linux.Chiar dacă știi că există un fișier XFS înăuntru. Și în Windows nativ, cu excepția unor instrumente foarte specifice (de obicei plătite sau doar pentru citire), este dificil să gestionezi bine aceste cazuri.
RAID cu discuri de diferite dimensiuni și utilizarea spațiului rămas
Un caz curios, dar din ce în ce mai frecvent, este cel al cuiva care configurează un RAID1 cu două discuri de dimensiuni foarte diferiteDe exemplu, un NVMe de 1 TB și un SATA de 500 GB. În caz de urgență, acest lucru ar putea fi acceptabil, dar RAID 1 va utiliza doar dimensiunea mai mică a discului pentru oglindă.
În acest scenariu, rezultatul tipic va fi că „a doua jumătate” a discului de 1 TB rămâne neutilizată, pur și simplu pentru că RAID 1 este limitat la primii 500 GB (dimensiunea discului mai mic). Acea porțiune nu va face parte din matrice și va rămâne ca spațiu nealocat sau pe o partiție separată.
Să presupunem că acum te hotărăști să faci lucrurile bine și vrei înlocuiți discul mic cu un alt disc de 1 TB Identic cu primul. Procedura de înlocuire a discului în mdadm este similară cu cea descrisă deja: discul vechi este marcat ca defect, eliminat din matrice, se introduce noul disc, se creează partițiile echivalente și acesta este adăugat la RAID pentru a fi reconstruit.
Apare atunci întrebarea: cum profită de spațiul suplimentar Ce spațiu ai în prezent pe ambele discuri pentru a extinde, de exemplu, partiția root / cu aproximativ 500 GB în plus? În linii mari, pașii urmați de obicei sunt:
- Redimensionați partițiile RAID de pe ambele discuri pentru a ocupa spațiul suplimentar (folosind instrumente precum parted sau fdisk și întotdeauna cu mare atenție).
- Folosi mdadm –creștere despre matricea mdX pentru a-i spune că dimensiunea sa efectivă este acum mai mare.
- Odată ce dispozitivul RAID are mai multă capacitate, redimensionați sistemul de fișiere de deasupra (de exemplu, extindeți ext4 cu resize2fs; consultați Cum să eliberezi spațiu pe disc în Linux).
Aceste tipuri de operațiuni, în special pe partiția rădăcină și cu UEFI/EFI, swap și alte caracteristici, implică modificarea tabelei de partiții, a matricei RAID și a sistemelor de fișiere. Este foarte recomandat să aveți copii de rezervă recenteși să înțelegeți cum sunt configurate partițiile EFI și swap-urile astfel încât sistemul să nu poată fi bootat.
Dacă totul este făcut corect, nici partiția swap, nici cea EFI nu ar trebui să fie configurate greșit, dar orice eroare în numerele sectoarelor, ordinea partițiilor sau dispozitivele înregistrate în /etc/fstab și în bootloader poate lăsa sistemul în modul „rescue”, solicitând reparații manuale.
În concluzie, utilizarea discurilor de dimensiuni diferite în RAID1 este fezabilă pe termen scurt, dar nu este recomandată pe termen mediu și lung, deoarece Complică foarte mult gestionarea spațiului în viitor când încerci să standardizezi hardware-ul.
După toate acestea, concluzia cheie este că înlocuirea unui disc defect într-un RAID Linux nu este magică, dar necesită o abordare metodică: mai întâi, înțelegeți topologia RAID (mdadm sau ZFS); apoi, identificați definitiv ce disc sau partiție trebuie rezolvată; și, în final, executați comenzile corespunzătoare (mdadm –fail, –remove, –add, zpool import etc.) cu mintea limpede. Cu o strategie bine organizată, copii de rezervă bune și o abordare răbdătoare, puteți gestiona cu succes majoritatea situațiilor, de la eliberarea unui disc pe un server dedicat până la recuperarea unui pool ZFS necinstit sau încercarea de a recupera date din Windows prin WSL2.
Scriitor pasionat despre lumea octeților și a tehnologiei în general. Îmi place să îmi împărtășesc cunoștințele prin scriere și asta voi face în acest blog, să vă arăt toate cele mai interesante lucruri despre gadgeturi, software, hardware, tendințe tehnologice și multe altele. Scopul meu este să vă ajut să navigați în lumea digitală într-un mod simplu și distractiv.