RAID en Linux
Introdución
Nesta práctica crearemos volumes RAID por software empregando un sistema operativo linux.
Software necesario
- Para a creación e administración dun RAID por software necesitaremos o paquete mdadm.
- A antiga colección de utilidades para RAID dos paquetes raidtools e raidtools2 deixouse de empregar actualmente posto que dependía dun ficheiro de configuración (/etc/raidtab) difícil de manter, e as súas funcións eran limitadas. Dende agosto de 2001, existe a ferramenta mdadm (multiple devices admin), este paquete permítenos xestionar os RAIDs por software dun xeito moito mais simple e robusto. Actualmente é o estándar.
Instalación
- Primeiramente, poñémonos como root:
$ sudo su
- Logo, actualizamos o sistema operativo:
$ apt-get update
$ apt-get upgrade
- Instalamos mdadm:
$ sudo apt-get install mdadm
Creación dun volume RAID 1 para gardar datos de xeito seguro
Crear dous discos duros virtuais que se empregarán para facer un RAID 1. Nas explicacións seguintes imos supoñer que os discos creados son sdb e sdc.
Preparar dous discos duros
Antes de crear o RAID precisamos preparar as particións a empregar polo array. Isto podería facerse cunha ferramenta gráfica tipo Gparted ou empregando unha aplicación de terminal. Para ver os discos/particións existentes neste intre:
$ sudo fdisk -l # Isto terá unha saída parecida á seguinte para cada un dos discos existentes no equipo: Disk /dev/sdb: 1500.3 GB, 1500301910016 bytes 255 heads, 63 sectors/track, 182401 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x000f1f05
Para cada un dos discos que empreguemos para o array debemos crear unha partición que se marcará como "partición RAID" (imos supoñer que os discos duros cós que faremos o RAID serán sdb e sdc):
$ fdisk /dev/sdb # Isto executará a ferramenta fdisk. # Crear unha partición en cada disco que ocupe o espacio completo de cada un deles: Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-182401, default 1): [blank] Last cylinder or +size or +sizeM or +sizeK (1-182401, default 182401): [blank] # Elixindo os valores por defecto elixirase o primeiro e o último cilindro, # así a partición ocupará todo o espazo do disco. # O seguinte será marcar a partición como parte dun array RAID: Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): fd Changed system type of partition 1 to fd (Linux raid auto) # Agora hai que escribir todos estes cambios no disco: Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
Recorda facer o mesmo no outro disco sdc, isto podes facelo con fdisk ou empregando a aplicación sfdisk do seguinte xeito:
$ sfdisk -d /dev/sdb | sfdisk /dev/sdc
- Nota: Se empregas o sistema operativo Debian 9 ou superior non é necesario realizar as particións, vale con dispositivos completos. O importante é que teñan o mesmo tamaño. Incluso podemos "misturar" particións con dispositivos.
Crear o array
- Para crear o array, empregarase mdadm. Débese especificar o nivel de RAID, así como cantos discos vai a empregar.
$ mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
- No modo verbose a aplicación dará información extra.
- No comando anterior o comando creou o array RAID 1 en /dev/md0, usando para iso 2 particións, neste caso /dev/sdb1 e /dev/sdc1.
- Mentres o array está construíndose pódese ver o seu estado no arquivo /proc/mdstat.
$ watch cat /proc/mdstat
- Este comando watch executa, por defecto cada 2 segundos, o comando seguinte que neste caso é cat /proc/mdstat, polo que imos vendo a secuencia da creación do array.
- Agora que está feito o array, precisamos editar a configración de mdadm para que se volva a montar cando se reinicie o sistema.
$ nano /etc/mdadm/mdadm.conf
# Este sería un ''mdadm.conf'' calquera, onde aparece a liña que temos que engadir.
# by default, scan all partitions (/proc/partitions) for MD superblocks.
# alternatively, specify devices to scan, using wildcards if desired.
DEVICE partitions
# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes
# automatically tag new arrays as belonging to the local system
HOMEHOST
# instruct the monitoring daemon where to send mail alerts
MAILADDR root
# definitions of existing MD arrays
ARRAY /dev/md0 level=1 num-devices=2 UUID=31283299:0c118170:8b4eb9a8:4e935bf2
- Pero ollo, para coñecer o contido exacto desta liña deberemos executar o comando que aparece a continuación.
$ mdadm --detail --scan
- Para engadir automaticamente a liña que define o array ao ficheiro /etc/mdadm/mdadm.conf, hai que executar o seguinte comando:
$ mdadm --detail --scan >> /etc/mdadm/mdadm.conf
Ollo!! - En debian 9 hai que executar o comando update-initramfs para actualizar o initial RAM disk:
$ update-initramfs -u
Crear e montar o sistema de arquivos
- Agora que o array está feito é necesario formatealo. Empregaremos o sistema de arquivos ext3.
# mkfs.ext3 /dev/md0
- Isto levaralle un tempo.
- O seguinte a facer é engadir o array ao fstab, que fará que se monte automaticamente cando o sistema arranca. Isto pode facerse editando o arquivo /etc/fstab.
$ mkdir /media/raid
$ nano /etc/fstab
# O fstab debería conter varias entradas e, ao final debemos engadir esta liña:
/dev/md0 /media/raid ext3 defaults 0 0
- Agora, móntase o array:
$ mount -a
Reparación da avaría dun disco duro do RAID 1
- Apagamos a máquina virtual e simulamos a avaría dun dos discos pertencentes ao RAID 1 desconectándoo da máquina.
- Cando iniciamos o equipo hai que activar o volume /dev/md0 que non se activa cando se lle avaría un disco. Empregarase o comando:
$ mdadm --run /dev/md0
$ mount -a
- Para ver cómo están os volumes empregamos o comando:
$ mdadm --detail --scan
$ mdadm --detail /dev/md0
- Particionamos o disco duro novo que aparece como sdc exactamente igual que o que quedou do RAID 1 que é o sdb (en Debian 9 xa non é necesario este paso, só precisamos un HD do mesmo tamaño):
$ sfdisk -d /dev/el que está bien | sfdisk /dev/sdc(repuesto)
- Podemos ver que quedou ben particionado empregando o comando:
$ fdisk -l
- Logo engádese a partición do novo disco ao array:
$ mdadm --manage /dev/md0 --add /dev/sdc1(REPUESTO)
- Unha vez engadida a reconstrución do volume comeza automáticamente, podemos ver como vai a recostrución:
$ watch cat /proc/mdstat
- Por último, hai que montar as particións do volume para poder traballar con el e ler outra vez os arquivos existentes nel:
# mount -a
Eliminar un dispositivo RAID
Para eliminar un dispositivo RAID, primeiro hai que desactivalo executando o seguinte comando como root.
$ mdadm --stop /dev/md0
Unha vez desactivado, hai que eliminalo:
$ mdadm --remove /dev/md0
Recordade eliminar:
- A liña engadida en /etc/mdadm/mdadm.conf
- A liña engadida en /etc/fstab
- A carpeta /mnt/raid
Finalmente, sobreescribir con ceros o superbloque md en todos os dispositivos asociados ao array:
$ mdadm --zero-superblock --force /dev/sdb1 /dev/sdc1
Manuais e enlaces interesantes
- Páxinas man de mdadm
- Reparar un volume RAID 1
- Manual de mke2fs
- Arquivo fstab
- Manual de mount
- Linux Raid
- Calcular velocidade lectura/escritura dun disco:
$ hdparm -tT /dev/sda