Utilizator:Petre/Conversie la RAID: Diferență între versiuni

De la Wiki.lug.ro
Salt la: navigare, căutare
(Pagină nouă: Sa zicem ca ai discul sda partitionat si formatat "traditional" si vrei sa-i mai pui unul sau mai multe discuri si sa faci raid cu toate. Pe discul sau discurile noi (N-1, lasand sda...)
 
(rz: cosmetizari etc., ar mai fi de lucru)
 
(Nu s-au afișat 2 versiuni intermediare efectuate de un alt utilizator)
Linia 1: Linia 1:
Sa zicem ca ai discul sda partitionat si formatat "traditional" si vrei sa-i mai pui unul sau mai multe discuri si sa faci raid cu toate.
+
{{Draft rpetre}}
  
Pe discul sau discurile noi (N-1, lasand sda la o parte) le partitionezi cum iti va conveni (partition type 0xFD la membrii raid nu e musai necesar, dar previne confuzii) si faci raidurile pastrand liber locul sda-ului, la modul: mdadm --create --level 5 (sau 1, sau 10, sau whatever) --raid-devices 4 (adica N, numarand si sda) /dev/md0 missing /dev/sdb1 /dev/sdc1 /dev/sdd1  (lasi "missing" in locul partitiei de pe sda). La fel si cu restul de md-uri. daca vrei sa si bootezi de pe raid, partitia pe care e /boot va trebui sa fie raid1 (o sa explic mai jos cum faci cu grub ca sa n-ai probleme), desi am auzit ca grub2 ar sti sa booteze de pe raid, n-am incercat, nu ma pronunt.
+
{{ambox|type=style}}
 +
===Problema===
 +
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.  
  
Dupa ce ai md-urile create (atentie, daca ai inegalitati de marime intre discuri sau partitii, se va considera marimea celei mai mici ca marimea tuturor iar restul de spatiu de pe cele mai mari nu va putea fi folosit), le formatezi cu mkfs (md-urile, nu partitiile), le montezi undeva si copiezi datele de pe partitiile de pe sda pe md-uri, in functie de cum o sa vrei sa le montezi (cp -ax e suficient, de incercat sa fie activitate cat mai mica pe disc ca sa pierzi cat mai putine date proaspete la mutare).
+
===Partitionare===
 +
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 <i>partition type 0xFD</i> 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 <i>--level</i> 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]]).  
  
Daca e vorba de discul sistem si nu se poate demonta, se seteaza bootloaderul sa porneasca cu md-urile ( grubul de pe discurile din raid si fstabul de pe md-ul care va avea rol de root).
+
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.
  
Grub, pt. boot de pe un / sau /boot care e un raid1 format din sdb1, sdc1 si sdd1 se seteaza asa:
+
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).
* din sistemul parinte (pe care ai montat /dev) rulezi: grub --no-floppy
 
* 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 biosul ajunge sa booteze de pe el, asta e
 
* root (hd0,0)
 
* setup (hd0)
 
* device (hd0) /dev/sdd
 
* root (hd0,0)
 
* setup (hd0)
 
* ctrl-c sa iesi din shellul grub
 
* 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 urmat de 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 --info /dev/sdb1 (sau poti tine minte doar mdadm --query ca zice ala ce e cazul sa dai mai departe).
+
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===
 +
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.
 +
 
 +
<b>Atentie!</b> 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).
 
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).
  
Daca nu mi-a scapat nimic, in principiu ar trebui ca dupa reboot sa ai montate raidurile, iar sda sa fie nefolosit. Raidurile sunt inca degradate (cu sdaX missing), asa ca ar trebui reparate repede. Daca e cazul, monteaza sda-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), dupa care demonteaza sda-urile, repartitioneaza-l (daca toate discurile sunt identice, eu copiez efectiv tabela de partitii cu sfdisk -d /dev/sdb | sfdisk /dev/sda) si adauga noile partitii in raid, in genul: 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). 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 reboota sistemul "normal", lasand biosul sa booteze de pe sda.
+
===Adaugarea discului initial la RAID===
 +
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.

Versiunea curentă din 9 ianuarie 2011 12:56

Aceasta pagina este unul din textele incepute de Petre si neterminate, sunteti invitat sa o imbunatatiti (atat dpdv continut cat si ca stil) si, cand devine prezentabila, sa-i gasiti (sau doar sugerati in pagina de discutii) un titlu potrivit unde sa fie mutata spre folosul altor cititori ai wiki-ului). Multumesc!

Format:Ambox

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.