Base de conocimientos · Servidores dedicados y VPS
Administración de RAID por software en Linux (Parte II): recuperación tras el fallo de un disco
Última actualización: 2019-02-03
Administración de RAID por software en Linux (Parte II): recuperación tras el fallo de un disco
|
Este artículo le muestra cómo recuperar un RAID por software de Linux en caso de fallo de un solo disco. En los ejemplos siguientes partiremos de los siguientes supuestos:
Matriz en buen estado cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb1[1] sda1[0] 511988 blocks super 1.0 [2/2] [UU] md1 : active raid1 sdb2[1] sda2[0] 976247676 blocks super 1.1 [2/2] [UU] bitmap: 1/8 pages [4KB], 65536KB chunk unused devices: <none>
Tenga en cuenta que ambas matrices (md0, md1) están:
cat /proc/partitions major minor #blocks name 8 0 976762584 sda 8 1 512000 sda1 8 2 976248832 sda2 8 16 976762584 sdb 8 17 512000 sdb1 8 18 976248832 sdb2 9 1 976247676 md1 253 0 2097152 dm-0 253 1 2097152 dm-1 9 0 511988 md0
Tenga en cuenta que deben cumplirse los siguientes puntos:
Arreglo degradado
Personalities : [raid1] md0 : active raid1 sdb1[1] sda1[0](F) 511988 blocks super 1.0 [2/1] [_U] md1 : active raid1 sdb2[1] sda2[0] 976247676 blocks super 1.1 [2/2] [UU] bitmap: 0/8 pages [0KB], 65536KB chunk unused devices: <none>
Nota: uno o más arreglos RAID mostrarán miembros ausentes: [2/1] [_U]
Personalities : [raid1] md0 : active raid1 sdb1[1] sda1[0](F) 511988 blocks super 1.0 [2/1] [_U] md1 : active raid1 sdb2[1] sda2[0](F) 976247676 blocks super 1.1 [2/1] [_U] bitmap: 1/8 pages [4KB], 65536KB chunk unused devices: <none> En caso de un fallo grave, o si un disco no se inicializa al reiniciar el sistema, el propio disco puede desaparecer, como se muestra en los ejemplos siguientes.
Personalities : [raid1] md0 : active raid1 sdb1[1] 511988 blocks super 1.0 [2/1] [_U] md1 : active raid1 sdb2[1] 976247676 blocks super 1.1 [2/1] [_U] bitmap: 1/8 pages [4KB], 65536KB chunk unused devices: <none>
Disco ausente: /proc/partitions major minor #blocks name 8 16 976762584 sdb 8 17 512000 sdb1 8 18 976248832 sdb2 9 1 976247676 md1 253 0 2097152 dm-0 253 1 2097152 dm-1 9 0 511988 md0
Cómo eliminar un disco con fallo Cómo marcar manualmente los dispositivos como ‘con fallo’ Solo debe marcar manualmente un dispositivo como defectuoso si uno de sus arreglos se encuentra en estado degradado debido a un tiempo de espera agotado o a un error de lectura en una de las particiones. El disco físico en sí debería seguir funcionando correctamente.
PRECAUCIÓN: asegúrese de marcar como fallidas únicamente las particiones que pertenecen al disco con fallo correspondiente (es decir, sda1/sda2 para sda y sdb1/sdb2 para sdb). Establezca sda1 y sda1 como faulty [root@freshinstall ~]# mdadm --manage /dev/md0 --fail /dev/sda1 mdadm: set /dev/sda1 faulty in /dev/md0
[root@freshinstall ~]# mdadm --manage /dev/md1 --fail /dev/sda2 mdadm: set /dev/sda2 faulty in /dev/md1
En cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb1[1] sda1[0](F) 511988 blocks super 1.0 [2/1] [_U] md1 : active raid1 sdb2[1] sda2[0](F) 976247676 blocks super 1.1 [2/1] [_U] bitmap: 1/8 pages [4KB], 65536KB chunk unused devices: <none>
Cómo eliminar dispositivos con fallo del arreglo Antes de poder reemplazar un disco, los miembros que han fallado deben eliminarse de sus arrays correspondientes:
[root@freshinstall ~]# mdadm --manage /dev/md0 --remove /dev/sda1 mdadm: hot removed /dev/sda1 from /dev/md0
[root@freshinstall ~]# mdadm --manage /dev/md1 --remove /dev/sda2 mdadm: hot removed /dev/sda2 from /dev/md1
[root@freshinstall ~]# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb1[1] 511988 blocks super 1.0 [2/1] [_U] md1 : active raid1 sdb2[1] 976247676 blocks super 1.1 [2/1] [_U] bitmap: 1/8 pages [4KB], 65536KB chunk unused devices: <none>
[root@freshinstall ~]# mdadm --misc --zero-superblock /dev/sda1 [root@freshinstall ~]# mdadm --misc --zero-superblock /dev/sda2
dd if=/dev/zero of=/dev/sda bs=1M PRECAUCIÓN: Este proceso borra todos los datos del dispositivo indicado en el argumento "of=" (/dev/sda en el ejemplo anterior). Nota: Este proceso puede tardar algún tiempo en completarse.
Cómo añadir un disco de reemplazo El disco de reemplazo debe tener exactamente el mismo tamaño que el disco averiado o uno mayor. Una vez insertado el disco de reemplazo en el sistema, el kernel registrará algo similar a lo siguiente: dmesg | tail sd 0:0:0:0: [sdc] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB) sd 0:0:0:0: [sdc] 4096-byte physical blocks sd 0:0:0:0: [sdc] Write Protect is off sd 0:0:0:0: [sdc] Mode Sense: 00 3a 00 00 sd 0:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
cat /proc/partitions major minor #blocks name
8 16 976762584 sdb 8 17 512000 sdb1 8 18 976248832 sdb2 9 1 976247676 md1 253 0 2097152 dm-0 253 1 2097152 dm-1 9 0 511988 md0 8 0 976762584 sdc Compruebe el estado SMART del nuevo disco: smartctl -H /dev/sdc smartctl 5.39.1 2010-01-28 r3054 [x86_64-unknown-linux-gnu] (local build) Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED
Particionado Para comenzar con el particionado, confirme primero que el nuevo disco no se haya montado automáticamente: mount | grep sdc No debería mostrarse ninguna salida. Si aparece algún resultado, las particiones correspondientes deben desmontarse manualmente ejecutando: umount <partition> Dado que el sistema inicial utilizaba dos discos en espejo del mismo tamaño exacto, podemos usar la unidad operativa como plantilla para el particionado: sfdisk -d -uS /dev/sdb | sfdisk -L -uS /dev/sdc Checking that no-one is using this disk right now ... OK
Disk /dev/sdc: 121601 cylinders, 255 heads, 63 sectors/track Situación anterior: Unidades = sectores de 512 bytes, contando desde 0
Device Boot Start End #sectors Id System /dev/sdc1 * 2048 1026047 1024000 fd Linux raid autodetect /dev/sdc2 1026048 1953523711 1952497664 fd Linux raid autodetect /dev/sdc3 0 - 0 0 Empty /dev/sdc4 0 - 0 0 Empty Nueva situación: Unidades = sectores de 512 bytes, contando desde 0
Device Boot Start End #sectors Id System /dev/sdc1 * 2048 1026047 1024000 fd Linux raid autodetect /dev/sdc2 1026048 1953523711 1952497664 fd Linux raid autodetect /dev/sdc3 0 - 0 0 Empty /dev/sdc4 0 - 0 0 Empty Advertencia: la partición 1 no termina en un límite de cilindro Advertencia: la partición 2 no comienza en un límite de cilindro Advertencia: la partición 2 no termina en un límite de cilindro La nueva tabla de particiones se escribió correctamente
Releyendo la tabla de particiones ...
Si ha creado o modificado una partición DOS, por ejemplo /dev/foo7, utilice dd(1) para poner a cero los primeros 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1 (Consulte fdisk(8).)
Después de esto, debería poder ver su disco recién particionado: cat /proc/partitions major minor #blocks name
8 16 976762584 sdb 8 17 512000 sdb1 8 18 976248832 sdb2 9 1 976247676 md1 253 0 2097152 dm-0 253 1 2097152 dm-1 9 0 511988 md0 8 0 976762584 sdc 8 1 512000 sdc1 8 2 976248832 sdc2
Adición de nuevos dispositivos al arreglo [root@freshinstall ~]# mdadm --manage /dev/md0 --add /dev/sdc1 mdadm: added /dev/sdc1
[root@freshinstall ~]# mdadm --manage /dev/md1 --add /dev/sdc2 mdadm: added /dev/sdc2
[root@freshinstall ~]# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdc1[2] sdb1[1] 511988 blocks super 1.0 [2/2] [UU] md1 : active raid1 sdc2[2] sdb2[1] 976247676 blocks super 1.1 [2/1] [_U] [>....................] recovery = 0.1% (1618176/976247676) finish=160.6min speed=101136K/sec bitmap: 1/8 pages [4KB], 65536KB chunk unused devices: <none> Nota: Ambos arreglos tienen dos miembros activos y md1 se está reconstruyendo activamente.
Reinstalación del cargador de arranque Una vez sustituida la unidad averiada, reinstale GRUB en el MBR del nuevo disco para asegurarse de que pueda arrancar desde él: grub-install /dev/sdc Installation finished. No error reported. Este es el contenido del mapa de dispositivos /boot/grub/device.map. Compruebe si es correcto o no. Si alguna de las líneas es incorrecta, corríjala y vuelva a ejecutar el script `grub-install'.
# this device map was generated by anaconda (hd0) /dev/sdc (hd1) /dev/sdb
|
Tell us what you need
Compare available plans or describe your workload so we can discuss a suitable starting point.