ALL SYSTEMS OPERATIONALUPTIME 99.97%FLEET 18/18IN-MUM · US-LAX · EU-FSN EST. 2003 · +91 11 4998 4038

CONOCIDOS · SERVICIOS DEDICAADOS " VPS

Gestión del software de Linux RAID (Parte II): Recuperación después de una falla de disco

Última actualización 2019-02-03

Gestión del software de Linux RAID (Parte II): Recuperación después de una falla de disco

Este artículo le muestra cómo recuperar el software de Linux RAID en caso de una falla de disco. Para los ejemplos siguientes, utilizaremos las siguientes hipótesis:

  • Usted está utilizando la versión más reciente de Linux (CentOS 5+).
  • You have two (2) HDDs (sda, sdb) connected to SAS/SATA controller, which isnot Linux Hardware RAID.
  • Usted tiene Linux Software RAID (MD).
  • Tiene dos (2) arrays RAID1, a saber:
    • md0 (sda1+sdb1): /boot
    • md1 (sda2+sdb2): LVM
  • Uno de sus arrays es degradado pero operativo (sólo fallo de un solo miembro).
  • Tienes acceso a la raíz completa.


Hacer un cheque de salud


Compruebe el estado de salud de sus discos. Usted debe ver los siguientes resultados dependiendo de sus discos llenosquo; estado:

Array saludable

cat /proc/mdstat

Personalidades : [raid1]

md0 : raid activo1 sdb1[1] sda1[0]

      511988 blocks super 1.0 [2/2] [UU]

md1 : raid activo1 sdb2[1] sda2[0]

      976247676 blocks super 1.1 [2/2] [UU]

      bitmap: 1/8 pages [4KB], 65536KB chunk

dispositivos no utilizados: <none

 

Tenga en cuenta que ambos arrays (md0, md1) son:

    1. Activo
    2. Contenga dos miembros: sdb1[1], sda1[0]
    3. Dos de cada dos miembros están arriba: [2/2] [UU]

 

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 los siguientes elementos deben ser verdaderos:

    1. Ambos discos físicos están presentes: sda, sdb
    2. Ambos de los arrays están presentes: md0, md1
    3. Ambos discos son del mismo tamaño: sda = sdb = 976762584
    4. Ambos discos se partisionan de la misma manera:
    • sda1 = sdb1 = 512000
    • sda2 = sdb2 = 976248832

 

Array degradado


Fallo de partición simple (sda1)

Personalidades : [raid1]

md0 : raid activo1 sdb1[1] sda1[0](F)

     511988 blocks super 1.0 [2/1] [_U]

md1 : raid activo1 sdb2[1] sda2[0]

     976247676 blocks super 1.1 [2/2] [UU]

     bitmap: 0/8 pages [0KB], 65536KB chunk

dispositivos no utilizados: <none

 

Nota: Uno o más arrays RAID mostrarán a los miembros desaparecidos: [2/1] [ U]


Fallo total del disco (sda)

Personalidades : [raid1]

md0 : raid activo1 sdb1[1] sda1[0](F)

      511988 blocks super 1.0 [2/1] [_U]

md1 : raid activo1 sdb2[1] sda2[0](F)

      976247676 blocks super 1.1 [2/1] [_U]

      bitmap: 1/8 pages [4KB], 65536KB chunk

dispositivos no utilizados: <none

En caso de fallo grave o si un disco no se inicializa en el reinicio del sistema, el disco en sí puede desaparecer como se muestra en los ejemplos siguientes.


Disk missing: 
/proc/mdstat

Personalidades : [raid1]

md0 : redada activa1 sdb1[1]

      511988 blocks super 1.0 [2/1] [_U]

md1 : redada activa1 sdb2[1]

      976247676 blocks super 1.1 [2/1] [_U]

      bitmap: 1/8 pages [4KB], 65536KB chunk

dispositivos no utilizados: <none

 

Disk missing: /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

 

Remoción de un disco fallido

Manually marking devices as ‘failed’

Debe marcar manualmente un dispositivo tan defectuoso sólo si uno de sus arrays está en un estado degradado debido a un tiempo de salida o leer error en una de las particiones. El disco físico en sí debe estar funcionando bien.

    • Take a look at /proc/mdstat and make sure that all of the partitions on the failed disk is set as ‘faulty.’

CAUTION: Be sure you are failing only the partitions that belong to the corresponding failed disk (i.e. sda1/sda2 for Sda and sdb1/sdb2 for sdb).

Set sda1 and sda1 as Fallo

[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

 

    • Confirme ambas particiones del mismo disco se etiquetan como fallidos.

In cat /proc/mdstat

Personalidades : [raid1]

md0 : raid activo1 sdb1[1] sda1[0](F)

      511988 blocks super 1.0 [2/1] [_U]

md1 : raid activo1 sdb2[1] sda2[0](F)

      976247676 blocks super 1.1 [2/1] [_U]

      bitmap: 1/8 pages [4KB], 65536KB chunk

dispositivos no utilizados: <none

 

Removing dispositivos fallidos de array

Antes de que un disco pueda ser reemplazado, los miembros fallidos deben ser eliminados de sus correspondientes arrays:

    • Eliminar los miembros fallidos:

[root@freshinstall ~]# mdadm --manage /dev/md0 --remove /dev/sda1

mdadm: caliente eliminado /dev/sda1 de /dev/md0

 

[root@freshinstall ~]# mdadm --manage /dev/md1 --remove /dev/sda2

mdadm: caliente eliminado /dev/sda2 de /dev/md1

 

[root@freshinstall ~]# cat /proc/mdstat

Personalidades : [raid1]

md0 : redada activa1 sdb1[1]

      511988 blocks super 1.0 [2/1] [_U]

md1 : redada activa1 sdb2[1]

      976247676 blocks super 1.1 [2/1] [_U]

      bitmap: 1/8 pages [4KB], 65536KB chunk

dispositivos no utilizados: <none

 

    • Asegúrese de limpiar los superblocks RAID si planea agregar las mismas particiones de nuevo al array o si desea reutilizar las particiones para algo más:

 [root@freshinstall ~]# mdadm --misc --zero-superblock /dev/sda1

[root@freshinstall ~]# mdadm --misc --zero-superblock /dev/sda2

 

    • También puede elegir borrar toda la información en el disco antes de desecharlo , suponiendo que el disco físico todavía funciona:

dd if=/dev/zero of=/dev/sda bs=1M

CAUCIÓN: Este proceso borra todos los datos del dispositivo dado el argumento "de=" (/dev/sda en el ejemplo anterior).

Nota: Este proceso puede tardar un tiempo en completarse.

 

Agregar un disco de sustitución

El disco de reemplazo debe ser exactamente el mismo tamaño o más grande que el disco fallido. Una vez que el disco de reemplazo se inserta en el sistema, el núcleo registrará algo así:

dmesg ANTE ANTE ANTE

sd 0:0:0:0: [sdc] 1953525168 512-byte bloques lógicos: (1.00 TB/931 GiB)

sd 0:0:0:0: [sdc] 4096-byte bloques físicos

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] Escriba caché: habilitado, lea el caché: activado, no soporta DPO o FUA


Confirme si el sistema ve la nueva unidad (sdc in this case):

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 resultado de la prueba de autoevaluación de la salud general: PASSED

 

Partición

Para comenzar a porcionar, confirme primero que el nuevo disco no ha sido auto-montado:

  mount | grep sdc

No debería haber salida. Si se muestra algo, las particiones correspondientes deben ser no montadas manualmente llamando:

umount <partition>

Como el sistema inicial utiliza dos unidades de espejo de exactamente el mismo tamaño, podemos utilizar la unidad operacional como una plantilla para particionar:

sfdisk -d -uS /dev/sdb | sfdisk -L -uS /dev/sdc

Comprobando que nadie está usando este disco ahora mismo ...

OK

 

Disk /dev/sdc: 121601 cilindros, 255 cabezas, 63 sectores/track

Situación antigua:

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

Escribió exitosamente la nueva tabla de partición

 

Releer la tabla de partición ...

 

Si creó o cambió una partición DOS, /dev/foo7, digamos, utilice dd(1)

to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1

(Véase fdisk(8).)

 

Después de esto, usted debe ser capaz de ver su nuevo disco 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

 

Agregar nuevos dispositivos a la matriz

 [root@freshinstall ~]# mdadm --manage /dev/md0 --add /dev/sdc1

mdadm: añadido /dev/sdc1

 

[root@freshinstall ~]# mdadm --manage /dev/md1 --add /dev/sdc2

mdadm: añadido /dev/sdc2

 

[root@freshinstall ~]# cat /proc/mdstat

Personalidades : [raid1]

md0 : redada activa1 sdc1[2] sdb1[1]

      511988 blocks super 1.0 [2/2] [UU]

md1 : incursión activa1 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

dispositivos no utilizados: <none

Nota: Ambos arrays tienen dos miembros activos en ellos y md1 está reconstruyendo activamente.

 

Reinstalación de arranque

Una vez que la unidad fallida es reemplazada, reinstalar GRUB en el MBR del nuevo disco para asegurarse de que puede arrancar de él:

grub-install /dev/sdc

La instalación terminó. No se ha informado de ningún error.

Este es el contenido del mapa del dispositivo /boot/grub/device.map.

Comprueba si esto es correcto o no. Si alguna de las líneas es incorrecta,

Arréglalo y re-corre el script `grub-install'.

 

# Este mapa de dispositivo fue generado por anaconda

(hd0)     /dev/sdc

(hd1)     /dev/sdb

 

← Todos los artículos de base de conocimientos

Díganos qué tiene que estar levantado.

A short conversation with an engineer. No quote-bot, no callback queue. We'll tell you honestly if we're not the right fit.