Salut,
M-am confruntat de curand cu problema instalarii unui Linux
pe un "hardware" RAID creat din BIOS-ul placii de baza (un VIA 6420 in
cazul meu). Stiam ca este un software-hardware-raid, dar am fost indus in
eroare de asa-zisul suport oferit de VIA pe site-ul lor. Din pacate,
drivere exista numai pentru Linux 2.4 si acelea intr-un stadiu jalnic.
Problema parea insurmontabila, pana cand am gasit un mesaj extrem de
informativ pe www.linuxforums.org... si uite ca pana la urma se poate,
chiar fara nici un fel de ajutor din partea VIA (care nici macar nu
amintesc de aceasta posibilitate).
Am scris un mic howto, pentru cei care se mai lovesc de aceasta
problema... sper sa va fie de ajutor!
P.S.1: Sunt curios daca functioneaza si pe alte controllere,
eventual pe Intel ICH5/6R?
P.S.2: Daca totul merge bine, nu ar trebui sa pierdeti date sau sa
fie nevoie de reinstalare/repartitionare. Dar, ca de obicei, un
backup nu strica ;)
===================================
Problema:
=========
Un sistem cu doua sau mai multe hard-disk-uri conectate la
controller-ul RAID de pe placa de baza (controller care desi pare a fi
"hardware", este de fapt 99% software, implementarea facandu-se in
driver). Se doreste ca array-ul astfel creat sa fie vizibil atat in
Linux cat si in "alt" sistem de operare.
Deoarece de cele mai multe ori nu exista un driver actualizat
pentru Linux, acest lucru poate fi destul de dificil pana la imposibil.
Solutie:
========
In absenta driver-ului de la producator, se poate utiliza suportul
Software-RAID din Linux, intr-un mod _compatibil_ cu alte sisteme de
operare, fara necesitatea repartitionarii si fara pierderea datelor!
***Nota:***
===========
Toate testele au fost realizate pe o placa de baza cu chipset VIA
K8T800Pro, controller-ul RAID "semi/hardware" fiind VIA VT6420:
00:0f.0 RAID bus controller: VIA Technologies, Inc. VIA VT6420 SATA
RAID Controller (rev 80)
Ca atare, NU se poate garanta functionarea acestei solutii pe alte
combinatii de placi de baza/controllere (ca de exemplu Intel ICH6R) --
orice informatii sau teste in aceasta privinta fiind binevenite!
De asemenea, configuratia testata a fost de RAID-0 (stripping)
folosind doua hard-disk-uri SATA identice. Instructiunile ar trebui sa
functioneze la fel pentru alte configuratii, dar nu se poate garanta
acest lucru.
Acest document are scop pur informativ, utilizarea informatiilor
prezentate aici se face pe propria responsabilitate, iar autorul
nu poate fi tras la raspundere pentru eventualele erori sau omisiuni,
sau pentru orice prejudicii, pierderi de date sau alte pagube cauzate
de urmarea acestor instructiuni.
Autor:
======
kajia76 (?) @ www.linuxforums.org
adaptare: Mihnea-Costin Grigore <mgc8 at totalnet dot ro>
Sursa de informatii:
====================
Mesajele de pe forum-ul linuxforums, din topic-ul:
http://www.linuxforums.org/forum/post-227121.html
Instructiuni pas cu pas:
========================
1. Se creaza array-ul din BIOS-ul controller-ului (apelat la boot,
de obicei imediat dupa BIOS-ul placii de baza). Se noteaza marimea
"stripe"-ului (de obicei 32k/64k).
2. Se instaleaza "celalalt" sistem de operare, lasand suficient
spatiu liber pentru Linux+swap.
3. Se boot-eaza de pe un live-CD Linux, de exemplu Knoppix
(http://www.knoppix.net).
4. Se verifica posibilitatea de accesare a tuturor discurilor care
vor forma array-ul. Pentru controllere SATA este necesara incarcarea
libata cu driver-ul corespunzator. De exemplu, in cazul testat
driverul este sata_via iar device-urile apar ca /dev/sda, /dev/sdb (se
verifica prin dmesg|less).
5. Se download-eaza in /tmp utilitarul mdadm
(http://www.cse.unsw.edu.au/~neilb/source/mdadm/), se dezarhiveaza si
se compileaza. Se compileaza de asemenea versiunea statica (make
mdadm.static).
6. Se creaza array-ul folosind mdadm. In cazul testat, comanda
este urmatoarea:
./mdadm --create /dev/md_d0 --chunk=32 --level=stripe
--raid-devices=2 --auto=mdp10 /dev/sda /dev/sdb
Desigur, trebuie facute modificarile de rigoare pentru situatii
diferite (in special dimensiunea data la --chunk trebuie sa fie
identica fata de cea specificata la "stripe" in BIOS).
Efectul comenzii ar trebui sa fie crearea device-ului /dev/md_d0
ce poate fi accesat ca un device obisnuit pentru partitionare, mountare
etc. In cazul in care apar erori, cel mai probabil sunt cauzate de
parametri gresiti sau de incompatibilitatea cu controller-ul (caz in
care inseamna ca va fi nevoie de driver-ul de la producator)...
Comanda --create trebuie data numai o data, dupa care array-ul se
porneste utilizand simplu --assemble:
./mdadm -v --assemble /dev/md_d0 --auto=mdp10 /dev/sda /dev/sdb
Atentie la ordinea specificarii hard-disk-urilor!
*** Aici se impune o atentionare suplimentara:
Undeva intre versiunile de kernel 2.6.9 si 2.6.12 a aparut o
modificare in atribuirea automata a partitiilor realizata de parametrul
--auto=mdp10 de mai sus. In versiunea 2.6.9, partitiile sunt
numerotate astfel: /dev/md_d0p1, /dev/md_d0p2 si asa mai departe, cu
major number 254. Pe de alta parte, in 2.6.12, numerotarea este de
forma /dev/md_d0_p1, /dev/md_d0_p2 etc. iar major number este 253. Nu
stiu ce anume cauzeaza aceste modificari (probabil UDEV?), dar este
important ca versiunea de kernel utilizata sa fie aceeasi atat pe live-CD
cat si ulterior la boot-area sistemului, altfel nu se va putea porni!
In ceea ce urmeaza, am utilizat conventia din 2.6.12.
7. Daca totul a functionat pana in acest moment, se poate trece la
instalarea Linux-ului:
- fdisk /dev/md_d0 -- se creaza partitiile dorite; nu este nevoie de
/boot separat, totul fiind deja pe RAID!
- mkfs.<FS> /dev/md_d0_pX ; mkswap /dev/md_d0_pY -- sistemul de
fisiere; desigur, modificati dupa preferinte.
- se mounteaza partitia: mount /dev/md_d0_pX /mnt
si se instaleaza obisnuit pe /mnt
8. Dupa instalare, se face chroot in noua partitie:
cd /mnt; chroot .
9. Se editeaza configuratia pentru GRUB (este posibil sa
functioneze si LILO, dar nu a fost testata acesta optiune iar
documentatia disponibila este inconcludenta):
### /boot/grub/menu.lst:
default=0
timeout=10
fallback=1
#hiddenmenu
title Linux
root (hd0,x)
kernel /boot/bzImage ro root=/dev/md_d0_pX
initrd /boot/initrd.gz
title Alt-OS
rootnoverify (hd0,0)
chainloader +1
makeactive
boot
###########
Se instaleaza grub in MBR:
# grub --device-map=/dev/null
device (hd0,x) /dev/md_d0_pX
device (hd0) /dev/md_d0
geometry (hd0) # pentru testare, ar trebui sa afiseze tabela de
# partitii creata anterior
root (hd0,x)
setup --stage2=/boot/grub/stage2 (hd0)
Unde (hd0,x)=partitia de pe array pe care s-a instalat linux, numarand
de la 0; md_d0_pX=partitia de pe array, numarand de la 1 (aceeasi ca mai sus).
Desigur, trebuie facute modificarile de rigoare in functie de
propriile setari.
10. Pentru a putea boota de pe partitia nou creata, este necesara
utilizarea unui initrd (initial ramdisk) care sa porneasca array-ul
(kernel-ul nu o poate face automat deoarece acesta este format din
device-uri intregi /dev/sdN iar nu din partitii cu tip special ca de
obicei).
Configurarea initrd-ului este specifica fiecarei distributii, dar
de obicei exista un script mkinitrd care creaza o imagine pornind de la
un anumit director. Consultati manualul mkinitrd, dupa care copiati in
/<director_initrd>/bin fisierul mdadm.static creat la pasul 5, apoi
device-urile necesare:
cp /dev/md_d0* /<director_initrd>/dev
(eventual, de obicei exista deja) cp /dev/sd* /<director_initrd>/dev
Adaugati in /<director_initrd>/linuxrc apelul pentru mdadm.static,
inainte de orice comanda de tip "mount":
# Initialize RAID
echo "mdadm starting /dev/md_d0..."
/bin/mdadm.static -v -v --assemble /dev/md_d0 --auto=mdp10 /dev/sda /dev/sdb
Asigurati-va ca toate modulele necesare sunt incarcate de initrd
(raid0, raid1, sata_via, etc.) apoi creati imaginea ruland mkinitrd.
Ar trebui sa fie salvata in /boot/initrd.gz -- daca nu, modificati
corespunzator fisierul grub/menu.lst.
11. Se editeaza /etc/fstab, modificand in special linia pentru /:
/dev/md_d0_pX / <sistem_de_fisiere> defaults 1 1
(eventual, urmeaza liniile pentru swap, partitiile altor sisteme
de operare, etc.)
12. In acest moment, sistemul ar trebui sa fie functional. Daca in
urma restartarii apar erori sau nu poate fi gasita partitia de boot,
reluati instructiunile pas cu pas verificand respectarea conditiilor --
de obicei problema poate fi o simpla greseala de tipar intr-un fisier
de configurare. GRUB permite editarea parametrilor direct la fiecare
restart, asa ca se pot face teste fara a necesita boot-area de pe CD
decat in ultima instanta.
Performanta:
============
# hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 2712 MB in 2.00 seconds = 1355.53 MB/sec
Timing buffered disk reads: 194 MB in 3.01 seconds = 64.53 MB/sec
# hdparm -tT /dev/md_d0
/dev/md_d0:
Timing cached reads: 2632 MB in 2.00 seconds = 1315.54 MB/sec
Timing buffered disk reads: 322 MB in 3.00 seconds = 107.17 MB/sec
==========================
Succes!
--
Mihnea-Costin Grigore [ "Tenebus Ipsilo Ibinem Catehens" ]
http://in.progress
---
Detalii despre listele noastre de mail: http://www.lug.ro/