Freebsd raid mirror howto pallotron.txt

Da Poetry Hacklab.

FREEBSD RAID MIRROR MINIHOWTO
=============================

ultimo aggiornamento: 12 Gen 2005

http://poetry.freaknet.org/poetryminihowto/freebsd_raid_mirror_howto.txt

keywords: freebsd, vinum, raid 1, mirror, 5.3, 5.2.1

MAGGIORI INFO
=============

capitolo 13 dell'handbook di freebsd su vinum:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/vinum-vinum.html

bootstraping vinum by Robert A. Van Valzah
http://www.freebsd.org/doc/en_US.ISO8859-1/articles/vinum/index.html

PERCHE' HO DECISO DI INSTALLARE IL RAID SUL MIO SERVER
======================================================

per alcuni 2 semplici motivi:

1) i dischi si rompono + spesso di quanto pensi;
2) ho la paranoia e voglio stare tranquillo;

PREMESSA: LA CAZZO DI CORRISPONDENZA BLOCCHI <-> MEGABYTES
==========================================================

nell mia cazzo di esperienza ho avuto a che fare coi fottuti blocchi e
coi calcoli della minchia.
questo perche' freebsd usa disklabel o bsdlabel per partizionare i dischi,
e questi ultimi non usano come unita' di misura i bytes, bensi' i blocchi,
vediamo di capire meglio.

"un blocco e' 512 bytes." non dovreste sapere altro. ma siccome siete
pigri e lo so continuo...

quindi se tu hai necessita' di convertire un numero di blocchi in
megabytes potresti fare questo semplice calcolo. 
ad es. se vuoi vedere a quanti megabytes corrispondono 4096 blocchi si
fa' questo:

4096 blocchi * 512 bytes = 2097152 bytes / 1024 = 2048 kbytes / 1024 = 2MB

e' tutto. e ora ne sapete di + su blocchi e megabytes.

concludo mandando a fanculo i produttori di dischi, i coder di
bsdlabel/disklabel e chi ci si vuole mettere ci si mette. non sono certo
io ad impedirglielo ahaha

SITUAZIONE DISCHI
=================
3 dischi ide 160 GB cosi' configurati:

ad0 primary master (il disco raid 1 primario)
ad2 secondary master (il disco raid 1 secondario)

e' meglio tenere i dischi raid su canali ide separati, settati come
master.

ad1 disco per il backup di tutto il fs montato su /backup

INSTALLARE FREEBSD
==================

- BOOT

Partire con il vostro CD di boot, per questa installazione ho utilizzato
freebsd 5.2.1.

1 - scegliete "1" dal boot menu (Boot FreeBSD [default])
2 - selezionare la installazione "standard" dal menu'
3 - selezione ad0.
4 - premere il tasto 'A' della tastiera per creare una slice che utilizza
	  tutto il disco. il concetto di slice approfonditelo nell'handbook se
	  volete.
5 - premere 'Q'.
6 - selezionare "BootMgr" dal menu' per permettere di fare il boot da
	  questo disco
7 - selezionare ad2 e fare lo stesso dal punto 4 al 6.
8 - selezionare il disco ad1 e fare *SOLO* il punto 4 e 5. Alla
    richiesta del BootMgr selezionare None. Non ci importa bootare dal disco
    di backup

- PARTIZIONAMENTO DISCHI

adesso ci troviamo dentro disklabel.
create le partizioni come di vostro gradimento sul disco ad0.
nella mia configurazione io ho creato le seguenti partizioni.

device  mount  size
ad0s1b  swap   512MB
ad0s1a  /      1024MB
ad0s1d  /tmp   512MB
ad0s1e  /var   5000MB (non 5GB ma 5000MB!!! E'diverso!)
ad0s1f  /usr   145GB (quello che rimane)

ATTENZIONE!!!! fate *PER PRIMA* la partizione di swap! LO CAPIRETE DOPO!
ADESSO FATELO MUTI.

per fare le partizioni posizionatevi sul disco ad0 (in alto nella
interfaccia), di solito in blu, premete il tasto C e leggete lo schermo!
quando avete finito per il disco ad0, fate *PARTIZIONI UGUALI* per ad2.
UGUALI! come mount point usate /root2 /tmp2 /var2 /usr2. questa merda
vuole per forza i mount point e io gliel'ho dati. tanto dopo li
elimineremo sia da fstab che dal disco.
quando avete finito col disco ad2, fate una unica partizione per ad1
(io ci faccio i backup e la monto dentro /backup)
quando avete finito premete 'Q'.

INSTALLAZIONE DEL SISTEMA BASE
==============================

a quel punto il sistema vi presenta una lista di distribuzioni da
installare, io scelgo sempre quella minimal e da li inizio a
personalizzare. scegliete il media dal quale installare, io di solito
scelgo cd/dvd e poi dopo al limite mi aggiorno via cvsup.
confermate alla finestra di dialogo. il sistema ora formattera' i file
system ed estrarra' il sistema base.
Dopo la estrazione il sistema vi fara' alcune domande tipo
configurazione della rete e altro. voi fate quello che vi pare. io dico
A TUTTO DI NO E FACCIO DOPO.
al termine delle domande selezinate Exit Install. Il vostro sistema
reboottera'.

CONFIGURAZIONE DEL LOADER
=========================

Dopo che il vostro sistema ha fatto il boot selezionare 'F1' dal
BootMgr and poi selezionare il numero '4' (Boot FreeBSD in single user
mode).
Alla richiesta della shell accollarsi /bin/sh premendo 'Invio'.
avrete adesso una shell di root in singlu user mode.
rimontiamo il file system / in rw.

# mount -u /

vinum non e' generalmente disponibile al boot, per far si che lo sia si
puo' compilare vinum staticamente nel kernel. ma non e' tanto bello imho
ed e' per questo  che si puo' dire al loader di caricare il modulo di
vinum al boot *PRIMA* di eseguire il kernel, toccando il file
/boo/loader.conf e mettendo queste righe:

vinum_load="YES"
vinum.autostart="YES"

probabilmente avete bisogno di dare un mount -a per far vedere vi

CONFIGURARE IL DISCO AD0S1 CON VINUM
====================================

- UN RITOCCATA ALLE PARTIZIONI

Utilizziamo bsdlabel (una versione nuova di disklabel) per modificare la
tabella delle partizioni del disco ad0s1.

# bsdlabel -e ad0s1

NOTA: bsdlabel chiama vi. se c'e' qualche errore quasi sicuramente
occorrera' dare un mount -a per montare tutti i file sistem su fstab.
FATTELO E MUTI.

avrete una situazione di questo tipo:

#/dev/ad0s1:
8 partitions:
#   size      offset    fstype  [snip]
a:  2097152   1048576   4.2BSD  [snip]
b:  1048576   0         swap
c:  320159322 0         unused  [snip] # "raw" part, don't edit	
d:  1048576   3145728   4.2BSD  [snip]
e:  10240000  4194304   4.2BSD  [snip]
f:  305725018 1443404   4.2BSD  [snip]

una cosa che alcuni fanno e' quella di togliere 281 blocchi alla
dimensione della partizione di swap per evitare che, in casi di un
overlap derivante da una partizione di swap PIENA, essa possa riversarsi
sulla partizione successiva... cioe' quella di root.

basta cambiara la riga cosi':

b:  1048295  281  swap

abbiamo decrementato il size di 281 e spostato l'offset di 281

adesso bisogna creare la partizione per vinum aggiungendo questa riga:

h:  320159306  16  vinum

notate le dimensioni e l'offset. abbiamo bisogno di far partire la
partizione vinum all'offset 16 per evitare di far finire vinum nell'mbr.
di conseguenza anche la dimensione passa a

320159322 (quella di c:) - 16 = 320159306

- IL FILE DI CONFIGURAZIONE PER IL DISCO AD0S1

creare il file /etc/vinum.conf cosi':

drive DiscoUno ad0s1h
volume root
	plex org concat
		sd len 2097152s driveoffset 1048560s drive DiscoUno
volume swap
	plex org concat
		sd len 1048295s driveoffset 265s drive DiscoUno
volume tmp
	plex org concat
		sd len 1048576s driveoffset 3145712s drive DiscoUno
volume var
	plex org concat
		sd len 10240000s driveoffset 4194288s drive DiscoUno
volume usr
	plex org concat
		sd len 305725018s driveoffset 14434288s drive DiscoUno

a quel punto bastera' lanciare il comando vinum e poi lanciare il
sottocomando create -f /etc/vinum.conf.

# vinum
vinum -> create -f /etc/vinum.conf

1 drives:
D DiscoUno              State: up       /dev/ad0s1h     A: 0/156327 MB
(0%)

5 volumes:
V root                  State: up       Plexes:       1 Size:       1024 MB
V swap                  State: up       Plexes:       1 Size:        511 MB
V tmp                   State: up       Plexes:       1 Size:        512 MB
V var                   State: up       Plexes:       1 Size:       5000 MB
V usr                   State: up       Plexes:       1 Size:        145 GB

5 plexes:
P root.p0             C State: up       Subdisks:     1 Size:       1024 MB
P swap.p0             C State: up       Subdisks:     1 Size:        511 MB
P tmp.p0              C State: up       Subdisks:     1 Size:        512 MB
P var.p0              C State: up       Subdisks:     1 Size:       5000 MB
P usr.p0              C State: up       Subdisks:     1 Size:        145 GB

5 subdisks:
S root.p0.s0            State: up       D: DiscoUno     Size:       1024 MB
S swap.p0.s0            State: up       D: DiscoUno     Size:        511 MB
S tmp.p0.s0             State: up       D: DiscoUno     Size:        512 MB
S var.p0.s0             State: up       D: DiscoUno     Size:       5000 MB
S usr.p0.s0             State: up       D: DiscoUno     Size:        145 GB


se c'e' qualche errore uscite da vinum con ^D e controllate il file
vinum.conf avete sicuramente dimenticato o sbagliato qualcosa.

lanciate il comando 'vinum resetconfig' e ricreate il tutto col comando
create.

- FSCK AI NUOVI DEVICE VINUM

a questo punto vinum dovrebbe aver creato nuovi device in /dev/vinum.
per vedere che tutto e' corretto lanciamo dei fsck.

# fsck -n -t ufs /dev/vinum/root

e facciamo lo stesso con le altre (tmp, var, usr).

se ci sono degli errori e' perche' probabilmente abbiamo sbagliato gli
offset o i size.

- MODIFICHE A FSTAB

modifichiamo fstab per riflettere le nuove modifiche

prima era cosi':

# Device                Mountpoint      FStype  Options   Dump Pass#
/dev/ad0s1b            none            swap    sw              0 0
/dev/ad2s1b            none            swap    sw              0 0
/dev/ad0s1a            /               ufs     rw              1 1
/dev/ad1s1d            /backup         ufs     rw              2 2
/dev/ad2s1d            /root2          ufs     rw              2 2
/dev/ad0s1d            /tmp            ufs     rw              2 2
/dev/ad2s1e            /tmp2           ufs     rw              2 2
/dev/ad0s1f            /usr            ufs     rw              2 2
/dev/ad2s1g            /usr2           ufs     rw              2 2
/dev/ad0s1e            /var            ufs     rw              2 2
/dev/ad2s1f            /var2           ufs     rw              2 2
/dev/acd0              /cdrom          cd9660  ro,noauto     0 0

dopo sara' cosi':

/dev/vinum/swap         none            swap    sw            0 0
/dev/vinum/root         /               ufs     rw            1 1
/dev/vinum/tmp          /tmp            ufs     rw            2 2
/dev/vinum/usr          /usr            ufs     rw            2 2
/dev/vinum/var          /var            ufs     rw            2 2
/dev/acd0               /cdrom          cd9660  ro,noauto     0 0
/dev/ad1s1d             /backup         ufs     rw            2 2

CONFIGURARE IL DISCO AD2S1 CON VINUM
====================================

Rebootare il sistema in single user mode. FATELO prima di editare ad2!

# mount -u /
# mount -a 
# bsdlabel -e ad2s1

ricreate la partizione identica al primo disco

create un file /etc/vinum-discodue.conf sostituendo DiscoUno con
DiscoDue e sostituendo ad0s1h con ad2s1h.

NON SBAGLIATE! SE NO POTRETE ANNULLARE TUTTO!!

dovete ora lanciare il comando:

# vinum create -f /etc/vinum-discodue.conf

non vi preoccupate se nell'output vedete cose tipo State: faulty oppure
State: stale. dobbiamo ancora mirrorare effettivamente i due dischi!!!

# vinum
vinum -> start root.p1.s0

questo attivera' la copia di un disco sull'altro.

lanciate il comando list per vedere la percentuale dell'elaborazione.
NON LANCIATE TROPPI START IN BACKGROUND. FATE UNO ALLA VOLTA.

dopo un po' un messaggio vi informera' che il procesos e' finito.
fate lo stesso per ogni partizione.

uscite da vinum. e lanciate rm -rf /usr2 /root2 /tmp2 /var2
per cancellare gli inutili mount point.

CONGRATULAZIONI! IL TUO RAID E' PRONTO! REBOOTTA E GODITELO!

- ATTENZIONE! PER CHI USA 5.2.1 O SUPERIORI

mi sono accorto che swapon -a non va!!!
La soluzione e' passare a gvinum. Fate cosi':

editate /boot/loader.conf e lasciate solo la riga:

geom_vinum_load="YES"

editate /etc/fstab e cambiate tutti i dispositivi da /dev/vinum a
/dev/gvinum. FATELO SE NO DOVRETE FARLO A MANO PERCHE' IL SISTEMA NON
TROVA IL ROOT FILE SYSTEM!

reboottate! :) al prossimo boot la partizione di swap verra' utilizzata!

FACCIAMO DANNO COL CULO PARATO
==============================

COOMING SOON.

In questa parte proveremo a fare danno sui due dischi e a rifare l'array
raid.

- SFASCIAMO IL DISCO 1 
- SFASCIAMO IL DISCO 2

AUTORE
======
pallotron@freaknet.org
http://pallotron.freaknet.org
http://www.freaknet.org
http://poetry.freaknet.org
Strumenti personali