Utilizator:Petre/Conversie la RAID
Cuprins
Problema[modificare]
Ai un sistem cu harddiscul (sa zicem, /dev/sda) partitionat si formatat "traditional" si sa adaugi unul sau mai multe discuri pentru a forma o matrice RAID cu mirroring (de tip 1, 5 sau 10) impreuna cu cel existent.
Partitionare[modificare]
Partitionezi discul sau discurile noi (N-1, unde N = nr. total de discuri care vor fi prezente in RAID, inclusiv /dev/sda deja existent). Nu e musai necesar partition type 0xFD la membrii RAID, dar e recomandat pentru a preveni confuziile. Apoi creezi partitiile RAID pastrand liber locul sda-ului. Exemplul de mai jos creaza o partitie RAID 5 care foloseste 4 discuri (inclusiv cel existent):
mdadm --create --level 5 --raid-devices 4 /dev/md0 missing /dev/sdb1 /dev/sdc1 /dev/sdd1
Inlocuieste parametrul argumentului --level cu nivelul RAID dorit (1=mirroring fara paritate sau stripping, 5=mirroring cu stripping si paritate etc.) Se lasa "missing" in locul partitiei de pe discul /dev/sda. Pentru restul de partitii (/dev/md1../dev/mdX, unde X este numarul ultimei partitii) se procedeaza similar. Daca vrei sa faci boot de pe RAID, partitia care contine directorul /boot trebuie sa fie de tip RAID1 (vezi mai jos pentru cum se face asta cu grub).
Atentie: daca discurile sau partitiile din matricea RAID nu sunt de marimi egale, o partitie RAID oarecare va folosi marimea celei mai mici partitii de pe discurile fizice prezenta in acea partitie iar restul de spatiu de pe cele mai mari nu va putea fi folosit. De exemplu, daca in /dev/md0 ai /dev/sdb1 si /dev/sdc1 de 500MB iar /dev/sdd1 de 450MB, marimea partitiei /dev/md0 va fi de 450MB si vor ramane 50MB neutilizabili pe /dev/sdb1 si /dev/sdc1. Bineinteles, partitia de pe discul existent (/dev/sda1), care va fi adaugata in RAID de abia ulterior, trebuie sa fie cel putin egala cu dimensiunea partitiei RAID(minim 450MB in cazul de mai sus), altfel /dev/sda va trebui repartitionat ca sa poata fi folosit.
Dupa crearea partitiilor in /dev/md, se formateaza partitiile RAID (mdX-urile) cu mkfs, se monteaza intr-un mountpoint si se copiaza datele de pe partitiile din /dev/sda in partiile corespondente din /dev/md (cp -ax e suficient, de incercat sa fie activitate cat mai mica pe disc ca sa pierzi cat mai putine date proaspete la mutare).
Daca e vorba de discul sistem si nu se poate demonta, se seteaza bootloader-ul sa porneasca cu md-urile ( grub de pe discurile din raid si fstab de pe md-ul care va avea rol de root).
Configurare pentru boot de pe RAID[modificare]
Pentru boot de pe o partitie RAID1 format din sdb1, sdc1 si sdd1, montata in / sau /boot, se ruleaza grub din sistemul parinte (pe care este montat /dev):
# grub --no-floppy
si se dau urmatoarele comenzi: <source lang="bash"> device (hd0) /dev/sdb # scenariul in care sdb este vazut de BIOS ca primul hard-disc root (hd0,0) # adica sdb1, prima partitie de pe primul disc din BIOS setup (hd0) # instalezi grub in MBR-ul discului respectiv device (hd0) /dev/sdc # la fel pt. discul urmator, il punem tot ca discul de boot, pentru ca daca BIOS-ul ajunge sa booteze de pe el, asta e root (hd0,0) setup (hd0) device (hd0) /dev/sdd root (hd0,0) setup (hd0) </source> Dupa care iesi din shell-ul grub cu Ctrl-C.
Atentie! nu umbla la mbr-ul lui sda pentru ca de ala stii sigur ca booteaza in caz ca ai ratat ceva Ce face toata schema de mai sus? Instruieste grubul de pe fiecare disc sa incarce 2nd stage si kernelul de pe partitia de pe _acelasi_ disc. Daca nu faci remapari de device-uri si doar setup (hd1), setup (hd2), etc, o sa te trezesti ca-si cauta 2nd stage la locatia pe care o avea pe (hd0), care in principiu e aceeasi la raid1, cu exceptia cazului de fata cand hd0 e un filesystem diferit.
De la o vreme ( si din niste motive pe care cei care nu s-au lovit de ele le injura :P ) mdadm a inceput sa ceara un fisier de configurare care sa-i spuna ce device-uri sa foloseasca. Pe Debian, asta se rezolva cu
# /usr/share/mdadm/mkconf > /etc/mdadm.conf # mkinitramfs -u -k all
(eu fac asta in chrootul de pe raid in care am montat in prealabil cu -o bind /dev si /sys). Daca ai alta distributie vezi daca ai acest mkconf si pe unde e. Se recomanda sa arunci o privire peste acest mdadm.conf generat si sa vezi daca e ce trebuie. ID-urile se obtin cu
# mdadm --detail /dev/md0
sau
# mdadm --examine /dev/sdb1
pentru a vedea informatii despre o partitie din RAID.
Reboot cu fortarea din bios sa booteze de pe unul din discurile noi (nu uita sa setezi root=/dev/md0 in configul de grub din raid si fstabul din raid sa monteze md-urile, nu sda-urile).
Adaugarea discului initial la RAID[modificare]
Dupa reboot ar trebui sa ai montate partitiile din RAID, iar /dev/sda sa fie nefolosit. Partitiile RAID sunt in acest moment degradate (cu /dev/sdaX missing din /dev/mdX), asa ca vor trebui reconstruite. Daca e cazul, monteaza sdaX-urile undeva sa mai copiezi datele care ti-au scapat (desi va fi mai dificil, ca pe md a inceput deja sa se faca scrieri si exista posibilitatea sa apara desincronizari), dupa care demonteaza partitiile din /dev/sda si repartitioneaza /dev/sda. Daca toate discurile sunt identice, se poate copia efectiv tabela de partitii cu
# sfdisk -d /dev/sdb | sfdisk /dev/sda
Apoi adauga noile partitii in raid, de exemplu:
# mdadm --manage --add /dev/md0 /dev/sda1
(imperechind md-urile cu partitiile reale asa cum e cazul). Acum ar trebui sa se vada in /proc/mdstat ca au inceput sincronizarea (dupa caz, asta va dura mult si/sau va consuma tot i/o-ul sistemului, se pot regla niste parametri de sysctl intr-o directie sau alta). Poti urmari progresul reconstructiei cu:
# watch cat /proc/mdstat
Dupa ce cel putin partitia de boot s-a sincronizat complet se poate reinstala grub si pe sda cu schema de mai sus (device (hd0) /dev/sda) si se poate reporni sistemul "normal", lasand BIOS-ul sa booteze de pe sda.