[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Receta rápida para montar un RAID 1 en linux.



Hola a todos.

Esta vez, y sin que sirva de precedente, mando un mensaje a la lista dando
algo en lugar de ir pidiendo.

He estado montando un sistema RAID 1 últimamente, y como ni es algo que sea
precisamente intuitivo, he escrito unas líneas contando como lo he hecho yo.
Por supuesto, se admiten todo tipo de sugerencias, críticas, comentarios...

Espero que le sirva de ayuda a alguien.

-- 
Un Saludo

Han Solo
The Rebel Alliance

Conecto, luego existo.
Desconecto, luego insisto.
Soy usuario de infobirria+

P.D. La firma no es mía, sino de uno que trabajaba, precisamente, en M$.
Vivir para ver.

Receta rápida para montar un sistema RAID 1 en Linux.

Han Solo <hsolo@maptel.es>

1.- Descargo y licencia.

Lo habitual en estos casos, yo no garantizo nada, no me responsabilizo de lo
que pueda estropearse si haces caso de este documento, no tiene porqué
funcionar en tu sistema y lo único que pudo decir es que a mi me ha
funcionado.

Este documento se distribuye bajo licencia GLP y todas esas cosas que ya
sabéis; es decir, lo podéis copiar, manipular, traducir... pero sería un
detalle que me mandararáis una copia.

2.- Consideraciones previas.

RAID es una cosa muy delicada, NO ES PARA NOVATOS.

El hecho de tener una sistema RAID 1 no libera de hacer copias de seguridad,
sino todo lo contrario. La redundancia funciona bien contra fallos físicos
del disco duro mientras esté funcionando, pero puedes perderlo todo si se va
la luz (aunque en honor a la verdad, a mí me pasó esto el otro día y luego el
sistema se recuperó bien).

No queda muy claro la utilidad de montar un sistema RAID 1 con discos ide,
ya que no permiten una acceso simultáneo como los SCSI. En cualquier caso,
si os decidís a montar un RAID 1 con discos ide, hacedlo en canales
diferentes, con cables diferentes.

No merece la pena montar todo el sistema en RAID. Primero porque
lilo/loadlin no son capaces tal como vienen de arrancar desde un dispositivo
RAID, y hay que andar parcheándolos. Segundo porque si el RAID falla, no se
podrá acceder a las herramientas para recuperarlo. Yo tengo montado un
servidor y tengo en RAID los directorios /var y /home, que son los que
tienen más accesos en lectura (bases de datos, páginas web, ficheros
personales...) Directorios como /usr no conviene tenerlos en RAID, pero una
buena política es tenerlos duplicados. Así, si un disco duro falla, se puede
arrancar desde el otro. Si se hacen copias de un disco en el otro (como
copias, no como RAID, vía cron, por ejemplo, tendremos además una copia de
seguridad de todo el sistema.

2.- Elementos necesarios

Yo he montado mi sistema RAID bajo una Debian Potato (versión "unstable" en
el momento de describir esto), pero todo lo dicho aquí debe servir sin
mayores problemas para otras versiones de Debian o de otras distribuciones
de Linux.

Las utilidades RAID tradicionales necesitan un kernel superior al 2.1.61
(creo), así que es recomendable pasarse a la serie 2.2.x (no sólo por el
RAID). De todas formas, las raidutils están condenadas a desaparecer, en
favor de las raidutils2, mas sencillas. Yo he configurado mi sistema RAID
con estás últimas, y no tiene mayor dificultad. 

Las raidutils2 necesitan ciertos parches para en kernel. En el momento de
escribir esto  el paquete Debian que tengo instalado es
raidtools2_0.90.990824-2.deb y los parches kernel-patch_2.2.10-2.deb. Los
parches son para el kernel 2.2.10, pero he comprobado que no vienen
incluidos en el kernel 2.2.11. Supongo que con esos parches se pueden retocar
kernels superiores, pero no le he probado. La instalación de estos parches es
imprescindible, ya que durante la instalación del paquete copmproeba si están
incluidos en el kernel, y si no los encuentra no se instala. Estos parches
se pueden bajar de ftp://ftp.kernel.org/pub/linux/daemons/raid/alpha

3.- Configuración

Lo primero que tenemos que hacer es recompilar el kernel para tener "soporte"
para RAID. Acordáos de parchear las fuentes. Yo he compilado todo lo
referente al RAID dentro del kernel, pero supongo que no habrá problema en
hacerlo como módulos (lo probaré uno de estos días).

Una vez que hayamos decidido como vamos a organizar el raid, lo primero que
tenemos que hacer es crear los dispositivos RAID. Estos dispositivos reciben
el nombre de /dev/mdX, y son los que luego montaremos como si de particiones
se tratara. Para definir estos dispositivos, debemos crear un fichero de
configuración. Por defecto las utilidades buscan este fichero en
/etc/raidtab, pero puede estar en otro sitio. Yo tengo un enlace a
/etc/raid/raid1.conf, que es un fichero con el siguiente contenido:

# Sample raid-1 configuration

# Primer dispositivo RAID, en principio para /var

raiddev                 /dev/md0
raid-level              1
nr-raid-disks           2
nr-spare-disks          0
chunk-size              4

device                  /dev/sda4
raid-disk               0

device                  /dev/sdb4 
raid-disk               1


# Segundo dispositivo RAID, en principio para /home 

raiddev                 /dev/md1
raid-level              1
nr-raid-disks           2
nr-spare-disks          0
chunk-size              4

device                  /dev/sda2
raid-disk               0

device                  /dev/sdb2
raid-disk               1

# Alea jacta est...

De esta forma, quedan definidas qué particiones formarán parte de cada uno
de los dos dispositivos raid, /dev/md0 y /dev/md1. La tabla de particiones
es la siguiente:

# fdisk /dev/sda

The number of cylinders for this disk is set to 1106.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p

Disk /dev/sda: 255 heads, 63 sectors, 1106 cylinders
Units = cylinders of 16065 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1   *         1       319   2562336   83  Linux
/dev/sda2           320       638   2562367+  83  Linux
/dev/sda3           639       654    128520   82  Linux swap
/dev/sda4           655      1106   3630690   83  Linux

La del disco sdb es idéntica, salvo que sdb1 no es arrancable.

Se pueden tener distintos ficheros de configuración para distintos
dispositivos RAID, o para distintos niveles, pero esto nos obligará a
decirle en cada comando qué fichero de configuración usar. Yo prefiero
definir todos los dispositivos RAID en el mismo fichero de configuración,
pero como siempre, para gustos se inventaron los colores.

Una ver que tenemos definido el fichero de configuración, procedemos a
crear los dispositivos RAID con la orden:

# mkraid /dev/md0
# mkraid /dev/md1

o bien:

# mkraid -c /etc/raid/raid1.conf /dev/md0
# mkraid -c /etc/raid/raid1.conf /dev/md1

Las particiones que formarán parte de un dispositivo RAID deben estar
desmontadas, a ser posible vacías y mejor si ni siquiera tienen formato.
mkraid es extremadamente cuidadoso, y si encuentra datos en las particiones
que deben formar parte de un dispositivo RAID protestará lastimosamente. Si
tenemos datos en esas particiones pero no nos importa perderlos, podemos
forzarlo a que los sobreescriba con

# mkraid --force /dev/md0

Estos destruirá permanentemente todos los datos de las particiones
implicadas. 

Tras crear los dispositivos hay que activarlos. Ahora me entra la duda si la
activación la hace automáticamente al crearlos dispositivos o hay que
hacerla a mano. De todas formas la orden es:

# raidstart /dev/md0
# raidstart /dev/md1

Para ver los dispositivos que están activos:

~# cat /proc/mdstat 
Personalities : [linear] [raid0] [raid1] [raid5] [translucent] 
read_ahead 1024 sectors
md1 : active raid1 sdb2[1] sda2[0] 2562240 blocks [2/2] [UU]
md0 : active raid1 sdb4[1] sda4[0] 3630592 blocks [2/2] [UU]
unused devices: <none>

Una vez creados y activados los dispositivos, hay que formatearlos, pero
esto no tiene ningún secreto, se hace como en cualquier partición:

# mk2efs /dev/md0
# mk2efs /dev/md1

Por último, solo queda montarlos, bien a mano, bien mediante el fichero
/etc/fstab. En mi caso:

# cat /etc/fstab
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options>                  <dump> <pass>
/dev/sda1       /             ext2   defaults,errors=remount-ro 0      1
/dev/sda3       none          swap   sw                         0      0
/dev/sdb3       none          swap   sw                         0      0
proc            /proc         proc   defaults                   0      0
/dev/fd0        /floppy       auto   defaults,user,noauto       0      0
/dev/cdrom      /cdrom        iso9660  defaults,ro,user,noauto  0      0
/dev/md0        /var	      ext2    defaults    	        0       2
/dev/md1        /home         ext2   defaults                   0       2

4.- Mantenimiento

No voy a extenderme mucho aquí sobre el tema del mantenimiento de un
sistema RAID, leeos la documentación que es bastante clara en ese sentido.
Lo más importante que hay que saber es que para cualquier operación de
mantenimiento del sistema, no sólo hay que desmontar los dispositivos que
estuvieran montados, sino que además hay que desactivarlos con:

~# raidstop /dev/md0

5.- Reinicio del sistema.

Si habéis seguido lo dicho, la próxima vez que reiniciéis el sistema los
dispositivos raid se inicializarán automáticamente. El propio kernel detecta
los dispositivos RAID disponibles y los activa, y si es necesario los
chequea. Os adjunto un extracto de los mensajes que da al iniciar:

[...]

md driver 0.90.0 MAX_MD_DEVS=256, MAX_REAL=12
translucent personality registered
linear personality registered
raid0 personality registered
raid1 personality registered
raid5 personality registered
raid5: measuring checksumming speed
raid5: MMX detected, trying high-speed MMX checksum routines
   pII_mmx   :   883.158 MB/sec
   p5_mmx    :   947.928 MB/sec
   8regs     :   695.706 MB/sec
   32regs    :   400.431 MB/sec
using fastest function: p5_mmx (947.928 MB/sec)
(scsi0) <Adaptec AHA-294X Ultra2 SCSI host adapter> found at PCI 10/0
(scsi0) Wide Channel, SCSI ID=7, 32/255 SCBs
(scsi0) Downloading sequencer code... 374 instructions downloaded
scsi0 : Adaptec AHA274x/284x/294x (EISA/VLB/PCI-Fast SCSI) 5.1.17/3.2.4
       <Adaptec AHA-294X Ultra2 SCSI host adapter>
scsi : 1 host.
(scsi0:0:0:0) Synchronous at 80.0 Mbyte/sec, offset 15.
  Vendor: SEAGATE   Model: ST39175LW         Rev: 0001
  Type:   Direct-Access                      ANSI SCSI revision: 02
Detected scsi disk sda at scsi0, channel 0, id 0, lun 0
(scsi0:0:1:0) Synchronous at 80.0 Mbyte/sec, offset 15.
  Vendor: SEAGATE   Model: ST39175LW         Rev: 0001
  Type:   Direct-Access                      ANSI SCSI revision: 02
Detected scsi disk sdb at scsi0, channel 0, id 1, lun 0
(scsi0:0:3:0) Synchronous at 20.0 Mbyte/sec, offset 15.
  Vendor: PLEXTOR   Model: CD-ROM PX-40TS    Rev: 1.01
  Type:   CD-ROM                             ANSI SCSI revision: 02
scsi : detected 2 SCSI disks total.
SCSI device sda: hdwr sector= 512 bytes. Sectors= 17783240 [8683 MB] [8.7
GB]
SCSI device sdb: hdwr sector= 512 bytes. Sectors= 17783240 [8683 MB] [8.7
GB]


[...]


Partition check:
 sda: sda1 sda2 sda3 sda4
 sdb: sdb1 sdb2 sdb3 sdb4
md.c: sizeof(mdp_super_t) = 4096
autodetecting RAID arrays
autorun ...
... autorun DONE.
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 68k freed
Adding Swap: 128516k swap-space (priority -1)
Adding Swap: 128516k swap-space (priority -2)
(read) sda4's sb offset: 3630592 [events: 00000019]
(read) sdb4's sb offset: 3630592 [events: 00000019]
autorun ...
considering sdb4 ...
  adding sdb4 ...
  adding sda4 ...
created md0
bind<sda4,1>
bind<sdb4,2>
running: <sdb4><sda4>
now!
sdb4's event counter: 00000019
sda4's event counter: 00000019
md0: max total readahead window set to 128k
md0: 1 data-disks, max readahead per data-disk: 128k
raid1: device sdb4 operational as mirror 1
raid1: device sda4 operational as mirror 0
(checking disk 0)
(really checking disk 0)
(checking disk 1)
(really checking disk 1)
(checking disk 2)
(checking disk 3)
(checking disk 4)
(checking disk 5)
(checking disk 6)
(checking disk 7)
(checking disk 8)
(checking disk 9)
(checking disk 10)
(checking disk 11)
raid1: raid set md0 active with 2 out of 2 mirrors
md: updating md0 RAID superblock on device
sdb4 [events: 0000001a](write) sdb4's sb offset: 3630592
sda4 [events: 0000001a](write) sda4's sb offset: 3630592
.
... autorun DONE.
(read) sda2's sb offset: 2562240 [events: 0000001b]
(read) sdb2's sb offset: 2562240 [events: 0000001b]
autorun ...
considering sdb2 ...
  adding sdb2 ...
  adding sda2 ...
created md1
bind<sda2,1>
bind<sdb2,2>
running: <sdb2><sda2>
now!
sdb2's event counter: 0000001b
sda2's event counter: 0000001b
md1: max total readahead window set to 128k
md1: 1 data-disks, max readahead per data-disk: 128k
raid1: device sdb2 operational as mirror 1
raid1: device sda2 operational as mirror 0
(checking disk 0)
(really checking disk 0)
(checking disk 1)
(really checking disk 1)
(checking disk 2)
(checking disk 3)
(checking disk 4)
(checking disk 5)
(checking disk 6)
(checking disk 7)
(checking disk 8)
(checking disk 9)
(checking disk 10)
(checking disk 11)
raid1: raid set md1 active with 2 out of 2 mirrors
md: updating md1 RAID superblock on device
sdb2 [events: 0000001c](write) sdb2's sb offset: 2562240
sda2 [events: 0000001c](write) sda2's sb offset: 2562240
.
... autorun DONE.

Los paquetes que yo tengo instalados (por si a alguien le interesa):

# dpkg -l *raid*
Desired=Unknown/Install/Remove/Purge
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err:
uppercase=bad)
||/ Name            Version        Description
+++-===============-==============-============================================
ii  kernel-patch-2. 2.2.10-2       Drivers for 'new-style' RAID arrays
rc  raidtools       0.42-19        Utilities to support 'old-style' RAID disks
ii  raidtools2      0.90.990824-2  Utilities to support 'new-style' RAID disks

6.- Referencias

Todo lo dicho aquí es un extracto del Software-RAID HOWTO de Jakob
OEstergaard (jakob@ostenfeld.dk), que viene con el paquete raidtools2, o que
está en http://ostenfeld.dk/~jakob/Software-RAID.HOWTO/ y del artículo
de Antonio Castro (acastro@ctv.es) en Linuxfocus,
http://www.linuxfocus.org/Castellano/articles/article21.html

7.- Feedback

Como dije más arriba, a mi todo estop me funciona, lo que no me exime de
haber cometido múltiples errores tanto en el procedimiento (espero que no)
como en la redacción de estás líneas. Toda sugerencia será bienvenida, asímo
toda ampliación de lo expuesto aquí, especialmente en el tema del
mantenimiento, que ha quedado un tanto espartano.

Para montar un RAID de otro nivel, no debería haber mayores problemas, pero
si alguien se anima a explicar con más detalle como se monta un RAID 0, 4 o
5 pues mejor.

Reply to: