GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo reemplazar un disco duro fallido en el software RAID de Linux

Esta guía muestra cómo eliminar un disco duro defectuoso de una matriz RAID1 de Linux (RAID de software) y cómo agregar un nuevo disco duro a la matriz RAID1 sin perder datos. Usaré gdisk para copiar el esquema de partición, por lo que también funcionará con discos duros grandes con GPT (tabla de particiones GUID).

1 nota preliminar

En este ejemplo, tengo dos discos duros, /dev/sda y /dev/sdb, con las particiones /dev/sda1 y /dev/sda2, así como /dev/sdb1 y /dev/sdb2.

/dev/sda1 y /dev/sdb1 conforman la matriz RAID1 /dev/md0.

/dev/sda2 y /dev/sdb2 conforman la matriz RAID1 /dev/md1.

/dev/sda1 + /dev/sdb1 = /dev/md0
/dev/sda2 + /dev/sdb2 = /dev/md1

/dev/sdb ha fallado y queremos reemplazarlo.

2 ¿Cómo puedo saber si un disco duro ha fallado?

Si un disco ha fallado, probablemente encontrará muchos mensajes de error en los archivos de registro, p. /var/log/messages o /var/log/syslog.

También puedes ejecutar

cat /proc/mdstat

y en lugar de la cadena [UU], verá [U_] si tiene una matriz RAID1 degradada.

3 Extracción del disco fallido

Para eliminar /dev/sdb, marcaremos /dev/sdb1 y /dev/sdb2 como fallidos y los eliminaremos de sus respectivas matrices RAID (/dev/md0 y /dev/md1).

Primero marcamos /dev/sdb1 como fallido:

mdadm --manage /dev/md0 --fail /dev/sdb1

La salida de

cat /proc/mdstat

debería verse así:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[2](F)
      24418688 blocks [2/1] [U_]

md1 : active raid1 sda2[0] sdb2[1]
      24418688 blocks [2/2] [UU]

unused devices: <none>

Luego eliminamos /dev/sdb1 de /dev/md0:

mdadm --manage /dev/md0 --remove /dev/sdb1

La salida debería ser así:

server1:~# mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1

Y

cat /proc/mdstat

debería mostrar esto:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
      24418688 blocks [2/1] [U_]

md1 : active raid1 sda2[0] sdb2[1]
      24418688 blocks [2/2] [UU]

unused devices: <none>

Ahora hacemos los mismos pasos nuevamente para /dev/sdb2 (que es parte de /dev/md1):

mdadm --manage /dev/md1 --fail /dev/sdb2
cat /proc/mdstat
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
      24418688 blocks [2/1] [U_]

md1 : active raid1 sda2[0] sdb2[2](F)
      24418688 blocks [2/1] [U_]

unused devices: <none>
mdadm --manage /dev/md1 --remove /dev/sdb2
server1:~# mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm: hot removed /dev/sdb2
cat /proc/mdstat
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
      24418688 blocks [2/1] [U_]

md1 : active raid1 sda2[0]
      24418688 blocks [2/1] [U_]

unused devices: <none>

Luego apague el sistema:

shutdown -h now

y reemplace el disco duro antiguo /dev/sdb por uno nuevo (debe tener al menos el mismo tamaño que el anterior; si solo tiene unos pocos MB menos que el anterior, la reconstrucción de las matrices fallará).

4 Agregar el nuevo disco duro

Después de haber cambiado el disco duro /dev/sdb, inicie el sistema.

Lo primero que debemos hacer ahora es crear exactamente la misma partición que en /dev/sda. Podemos hacer esto con el comando sgdisk del paquete gdisk. Si aún no ha instalado gdisk, ejecute este comando para instalarlo en Debian y Ubuntu:

apt-get install gdisk

Para distribuciones de Linux basadas en RedHat como CentOS use:

yum install gdisk

y para uso de OpenSuSE:

yast install gdisk

El siguiente paso es opcional pero recomendado. Para asegurarse de tener una copia de seguridad del esquema de partición, puede usar sgdisk para escribir los esquemas de partición de ambos discos en un archivo. Guardaré la copia de seguridad en la carpeta /root.

sgdisk --backup=/root/sda.partitiontable /dev/sda
sgdisk --backup=/root/sdb.partitiontable /dev/sdb

En caso de falla, puede restaurar las tablas de partición con la opción --load-backup del comando sgdisk.

Ahora copie el esquema de partición de /dev/sda a /dev/sdb y ejecute:

sgdisk -R /dev/sdb /dev/sda

luego, debe aleatorizar el GUID en el nuevo disco duro para asegurarse de que sean únicos

sgdisk -G /dev/sdb

Puedes correr

sgdisk -p /dev/sda
sgdisk -p /dev/sdb

para verificar si ambos discos duros tienen la misma partición ahora.

A continuación, agregamos /dev/sdb1 a /dev/md0 y /dev/sdb2 a /dev/md1:

mdadm --manage /dev/md0 --add /dev/sdb1
server1:~# mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: re-added /dev/sdb1
mdadm --manage /dev/md1 --add /dev/sdb2
server1:~# mdadm --manage /dev/md1 --add /dev/sdb2
mdadm: re-added /dev/sdb2

Ahora ambos arreglos (/dev/md0 y /dev/md1) estarán sincronizados. Ejecutar

cat /proc/mdstat

para ver cuando haya terminado.

Durante la sincronización, la salida se verá así:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
      24418688 blocks [2/1] [U_]
      [=>...................]  recovery =  9.9% (2423168/24418688) finish=2.8min speed=127535K/sec

md1 : active raid1 sda2[0] sdb2[1]
      24418688 blocks [2/1] [U_]
      [=>...................]  recovery =  6.4% (1572096/24418688) finish=1.9min speed=196512K/sec

unused devices: <none>

Cuando finalice la sincronización, la salida se verá así:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
      24418688 blocks [2/2] [UU]

md1 : active raid1 sda2[0] sdb2[1]
      24418688 blocks [2/2] [UU]

unused devices: <none>

Eso es todo, ¡has reemplazado con éxito /dev/sdb!


Linux
  1. Cómo generar una contraseña aleatoria en Linux usando /dev/random

  2. Linux:¿Diferencia entre /dev/console, /dev/tty y /dev/tty0?

  3. ¿Qué tan portátiles son /dev/stdin, /dev/stdout y /dev/stderr?

  4. ¿Cuándo usar /dev/random Vs /dev/urandom?

  5. Linux:¿Qué significa la letra 'u' en /dev/urandom?

tty (/dev/tty) vs pts (/dev/pts) en Linux

Cómo mapear dispositivos /dev/sdX y /dev/mapper/mpathY desde el dispositivo /dev/dm-Z

¿Cómo se intercambia /dev/sda con /dev/sdb?

Cómo usa Linux /dev/tty y /dev/tty0

¿Está mal vincular /dev/random a /dev/urandom en Linux?

hacer eco o imprimir /dev/stdin /dev/stdout /dev/stderr