PDA

Visualizza la versione completa : [SOFTWARE RAID] Boot da RAID 1 (Mirror)


daniele_dll
12-05-2007, 15:07
Hola a tutti,

sto preparando un server per un cliente su cui deve girare un software un po particolare e, avendomi chiesto di ottimizzare le performance, ho installato su Gentoo [per i malizioni: evitate di fare commenti inutili ^^]

Il sistema l'ho installato su un software raid strutturato con due device per il raid e uno spare per sicurezza, tutti e tre dischi da 160gb e la macchina ha 2gb di memoria. Inoltre è un athlon amd 3800 x2 e sto quindi usando gentoo a 64bit

Ho seguito la normale procedura di installazione con le seguenti aggiunte:
- all'inizio ho creato 3 partizioni su un disco e le ho successivamente clonate usando il dump/import di sfdisk
- ho utilizzato mdadm con il comando create per generare i dischi in software raid sulle partizioni dei vari dischi
- poi quando ho dovuto compilare il kernel ho abilitato il supporto per il software raid (MD) e il supporto per le periferiche in mirror (RAID-1)
- Ho poi installato grub sull'mbr di ogni hd GRUB specificandogli come sorgente per la partizione di boot non quella sotto raid ma quella diretta, in modo che ogni sistema, comunque, può partire, dato che il raid, facendo partizioni separate, non comprende l'mbr

Risultato finale: al riavvio il sistema parte (il kernel), legge correttamente i dischi, attiva il raid ma NON genera i device md0, md1 e md2 [ovvero quello che ho assegnato ai vari raid, rispettivamente, boot, swap e root)!

E sinceramente non capisco il perché!!!

Pensando di aver fatto qualche grossa @@ mi sono andato a ripassare la configurazione in raid mirror ma ho fatto tutto per come deve essere fatto di conseguenza o sbaglio qualcosa e non me ne rendo conto oppure dimentico qualcosa e non riesco a trovarlo neppure online

Inoltre, giusto per completezza, avevo inizialmente provato a creare direttamente il raid software su TUTTO il disco ma senza successo, infatti dopo che facevo l'fdisk il kernel non aggiornava la tabella delle partizioni e non riuscivo ad accedere alle partizioni che posso fare, qualcuno di voi ha qualche idea o ha avuto qualche problema simile?

Un ultima cosa: voi consigliate di tenere anche la SWAP sul raid? l'ho fatto perché non vorrei che si danneggia un disco e lui, provando a scrivere su quel disco, per usare la swap, va in palla. So bene che la swap rallenta, di poco, ma rallenta, ma c'è maggiore sicurezza. Eventuali soluzioni alternative che mi possano dare sicurezze simili a quelle del raid, per la swap, c'è ne stanno?

gracias

cobra
12-05-2007, 15:39
Premessa: non conosco gentoo ma, indipendentemente dalle varie teorie sull'ottimizzazione per avere un sistema ultramegaperformante, il consiglio credo sia sempre lo stesso, usa la distribuzione che conosci meglio :fighet:

A suo tempo, tra le altre, questa (http://guide.debianizzati.org/index.php/Software_Raid_1:_configurazione_e_verifiche) guida m'è stata molto utile per capire meglio come andava creato un RAID1 su linux, magari potrebbe tornare utile pure a te :ciauz:

dAb
12-05-2007, 15:39
Originariamente inviato da daniele_dll
...e le ho successivamente clonate usando il dump/import di sfdisk


Perche`? A costruire l'array ci deve pensare mdadm, non tu.

Per risparmiarmi tante grane ti conviene inizialmente installare tutto su un quarto hd non-raid, anche un semplice e piccolo pata per un sistema minimale. Da li` crei il raid sui 3 hd e sui vari array monti le varie partizioni del sistema finale, clonandovi tutto il sistema temporaneo. Da bios scegli poi con quale hd partire, e una volta verificato che il sistema parta regolarmente con qualunque dei 3 hd dell'array, l'hd temporaneo lo rimuovi. La swap puo` stare sul raid senza problema alcuno.

daniele_dll
12-05-2007, 16:42
@cobra:

grazie, ora gli do un occhio

@dAB:

ma, và? A parte che mdadm ci pensa perché glielo dico io ma a me serviva che staccando un disco il sistema andasse comunque, ovvero, dato che come ho detto partizionando il device MD il kernel non si aggiornava le tabelle dando errore 22, ho fatto il contrario, ovvero mi sono limitato a creare le partizioni e fare il raid sulle partizioni però questo a comportato quello che per l'appunto ha implicato su

MD scrive il SuperBlock, ergo le informazioni necessarie per la gestione del raid (come l'UUID, il tipo, l'elenco delle periferiche, il loro stato e l'eventuale mappa dei blocchi modificati), alla fine dello spazio totale dei device usati in modo da permettere il boot del sistema (ergo in modo da permettere al booloader di eseguire il kernel) dato che se viene usato un disco in read only non si danneggia il raid e il boot loader, anche non sapendo del raid, riesce a fare tutto quello che deve fare perfettamente

Il mio problema è però il kernel che non vede i vari device! tanto che avevo provato a giocare con i parametri root e real_root ma non ha gradito molto, anche se comunque non c'è motivo che non funzioni

Ho usato sfdisk ESCLUSIVAMENTE per clonare la struttura delle partizioni, mantenendo le stesse dimensioni, sui tre dischi


----

rileggendo la risposta di dAB credo di non essermi correttamente spiegato: non è che non riesco a fare il raid o grub non mi avvia il sistema, oppure ancora ho problemi a fare l'installazione, nulla di tutto ciò! Con il CD live per l'installazione di gentoo mi va tutto perfettamente, come anche da sistema se lo faccio partire usando come init busybox e specificando l'avvio in readonly come root uno dei dischi del raid, infatti da li, se voglio montare uno dei dischi del raid me lo monta perfettamente!!!

Il problema è esclusivamente che il kernel, dopo aver avvisato che MD sta cercando i raid disponibili, non li carica facendo fallire l'avvio del kernel se il parametro root è impostato su /dev/mdX

Questo lo si vede chiaramente anche da dmesg, ovvero che MD parte, si fa la sua ricerca e poi caput (usando busybox posso lanciare dmesg ^^)

dAb
12-05-2007, 17:04
Non s'e` mai visto che per creare un raid si debbano prima clonare le partizioni da un hd all'altro, eh :D Allora se ti si schianta un hd che fai, lo sostituisci con uno nuovo di trinca su cui cloni le partizioni da uno sano? Non funziona in questo modo. Se poi si aggiunge il problema di non riuscire ad avviare il sistema da un hd qualsiasi perche` mdadm non ha clonato il primo settore tra un hd e l'altro ti basta farlo a mano con dd.. se fai come ti ho scritto non avrai problemi, poi vedi tu.

dAb
12-05-2007, 17:09
Originariamente inviato da daniele_dll
Il problema è esclusivamente che il kernel, dopo aver avvisato che MD sta cercando i raid disponibili, non li carica facendo fallire l'avvio del kernel se il parametro root è impostato su /dev/mdX


Questo accade quando / esiste sugli hd fisici ma non sul raid.

edit: o quando nel kernel non e` incluso il supporto al raid.

daniele_dll
12-05-2007, 17:29
Originariamente inviato da dAb
Non s'e` mai visto che per creare un raid si debbano prima clonare le partizioni da un hd all'altro
verissimo MA quando devi creare un raid e vai a creare le partizioni di ugual dimensione tranne che vuoi farlo a mano su tutti gli dischi, clonare la tabella delle partizioni su i dischi rimanenti e una delle poche opzioni disponibili



eh :D Allora se ti si schianta un hd che fai, lo sostituisci con uno nuovo di trinca su cui cloni le partizioni da uno sano? Non funziona in questo modo. Se poi si aggiunge il problema di non riuscire ad avviare il sistema da un hd qualsiasi perche` mdadm non ha clonato il primo settore tra un hd e l'altro ti basta farlo a mano con dd.. se fai come ti ho scritto non avrai problemi, poi vedi tu.

io lo so scrivo male in italiano, me lo hanno sempre detto tutti, per questo faccio un esempio pratico

### ESEMPIO

Devi creare 3 partizioni, ovvero rispettivamente boot, swap e root, che, per motivi di sicurezza, li vuoi mettere su raid 1 con un disco in spare e dato che non puoi partizionare direttamente il meta device perché il kernel non riesce ad aggiornare la tabella delle partizioni per motivi suoi, tu cosa fai? prima crei le partizioni, uguali sui tre dischi, dopo di che crei il raid partendo dalle partizioni generate.

Se per esempio devi fare 250mb per il boot, 4gb per la memoria e il rimanente per la root, avrai quindi sda1, sda2 e sda3 per il primo disco e lo stesso numero di partizioni per i dischi rimanenti.

Ora, tranne che tu voglia usare FDISK manualmente su tutti i tre dischi o, clonare l'mbr [codice di boot + struttura delle partizioni] tramite dd, cosa che ti comporta comunque l'avvio di fdisk per forzare il reload della struttura delle tabelle dai dischi [ci sono anche altri metodi ma quello è il più comodo, veloce e soprattutto sempre disponibile dai dischi di installazione], puoi usare sfdisk che tra le varie funzionalità di permette di eseguire un DUMP della struttura della tabella, tipo


livecd ~ # sfdisk -d /dev/sda
# partition table of /dev/sda
unit: sectors

/dev/sda1 : start= 63, size= 481887, Id=83, bootable
/dev/sda2 : start= 481950, size= 8401995, Id=82
/dev/sda3 : start= 8883945, size=303676695, Id=83
/dev/sda4 : start= 0, size= 0, Id= 0

e ti permette di "reimportarlo", ovvero di ricreare la stessa struttura, con le stesse dimensioni, posizioni e fini, sugli altri dischi dove ti serve lanciando il comando


sfdisk -d /dev/sda | sfdisk /dev/sdb

e cosi via


Questo accade quando / esiste sugli hd fisici ma non sul raid.

questo accade quando il gestore del raid, compilato internamente [ovviamente], non va a creare i device mdX di conseguenza anche se il raid poi va tranquillo, riassemblandolo manualmente, non puoi fare il boot

Ora spero di averti ben chiarito a cosa mi riferivo perché l'italiano lo scrivo male, ma gli esempi sono bravo a farli :zizi:

Se non fossi stato chiaro a sufficenza o se mi sono ancora una volta spiegato male, ti pregherei comunque di non tornare a battere sempre sulla stessa cosa perché per me non è cosi [sono orione ma non del tutto]

- grazie -

@edit

Non avevo letto il tuo edit


edit: o quando nel kernel non e` incluso il supporto al raid.

Ciò mi fa pensare che oltre che scrivo male io leggi poco tu ...

Nel mio primo post, poco prima della metà, ho ben specificato che, ovviamente, avevo incluso il supporto raid

- poi quando ho dovuto compilare il kernel ho abilitato il supporto per il software raid (MD) e il supporto per le periferiche in mirror (RAID-1)

dAb
12-05-2007, 17:33
Non e` che scrivi male, e` che sei logorroico e nei tuoi post ci si perde :D

Spe` un attimo: il supporto al raid _non_ l'hai aggiunto come modulo, vero?

daniele_dll
12-05-2007, 17:37
lo sapevo che me lo avresti chiesto :adhone:


lo davo per scontato, ma dato che me lo chiedi ti rispondo: no, per motivi sadomaso e di autotortura ho preferito non mettere il raid come compilato bensì come modulo in modo da potermi infliggere, senza bisogno di problemi o aiuti esterni, il più dolore possibile

:98:


(ovviamente l'ho compilato dentro come built-in e non come modulo)

dAb
12-05-2007, 18:00
Guarda che in /etc/mdadm/mdadm.conf siano listati correttamente gli md, e che in /etc/default/mdadm la direttiva INITRDSTART indichi l'array necessario a root. Questo su debian, su gentoo la posizione dei conf potrebbe variare.

Loading