CentOS 6.7 Elimina completamente RAID. Cerrar discos y arrancar desde /dev/sda

CentOS 6.7 Elimina completamente RAID. Cerrar discos y arrancar desde /dev/sda

Soy completamente nuevo en Linux. Heredé un servidor dedicado alojado en algún lugar de Alemania. El sistema operativo es CentOS versión 6.7 (final) de 64 bits. El servidor tiene dos discos de 3 TB en configuración de software RAID-1. La situación con la que estoy lidiando es que, según SMART, el segundo disco está a punto de fallar, sin embargo, el administrador anterior tuvo algunos problemas con el RAID y eliminó por completo los componentes /dev/sda, por lo que ahora el sistema arranca desde un único disco. matriz RAID-1 de disco (degradada) con todos los archivos en /dev/sdb (el disco que está a punto de fallar). Además, borró por completo /dev/sda. Para resolver el problema necesito realizar las siguientes tareas:

  1. Vuelva a particionar /dev/sda para que sea igual que /dev/sdb.
  2. Copie (clone) todos los datos de /dev/sdb a /dev/sda.
  3. Elimine completamente la configuración RAID-1.
  4. Configure el sistema para que arranque desde /dev/sda como un disco nativo (no desde /dev/md*).
  5. Asegúrate de que todo esté funcionando bien.
  6. Borrado seguro /dev/sdb.
  7. Solicite al soporte que reemplace el disco defectuoso (/dev/sdb) por uno nuevo.
  8. Vuelva a crear y sincronizar la matriz RAID-1.

El problema es que no sé cómo realizar estas tareas en Linux. Tenga en cuenta que estoy accediendo al sistema de forma remota, por lo que no puedo permitirme ningún error que impida que el sistema pueda iniciarse. Sin embargo, tengo acceso a un sistema de rescate (un pequeño Linux que se puede iniciar desde DHCP con acceso al sistema subyacente).

Aquí hay algunos resultados de comandos (quizás útiles) y archivos de configuración:

fdisk-l

Disk /dev/sdb: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000e76a6

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1567    12582912+  83  Linux
/dev/sdb2            1567        1633      524288+  fd  Linux raid autodetect
/dev/sdb3            1633      135307  1073741824+  fd  Linux raid autodetect
/dev/sdb4          135307      364802  1843413464    f  W95 Ext'd (LBA)
/dev/sdb5          135308      364802  1843412440   fd  Linux raid autodetect

Disk /dev/sda: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00074207

Device Boot      Start         End      Blocks   Id  System

Disk /dev/md3: 1887.7 GB, 1887654199296 bytes
2 heads, 4 sectors/track, 460853076 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/md1: 536 MB, 536858624 bytes
2 heads, 4 sectors/track, 131069 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/md2: 1099.5 GB, 1099511488512 bytes
2 heads, 4 sectors/track, 268435422 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

archivo -s /dev/sdb

/dev/sdb: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3,     stage2 address 0x2000, stage2 segment 0x200, GRUB version 0.94; partition 1: ID=0x83, starthead 32, startsector 2048, 25165825 sectors; partition 2: ID=0xfd, starthead 254, startsector 25169920, 1048577 sectors; partition 3: ID=0xfd, starthead 254, startsector 26220544, 2147483649 sectors; partition 4: ID=0xf, starthead 254, startsector 2173706240, 3686826928 sectors, code offset 0x48

archivo -s /dev/sda

/dev/sda: x86 boot sector, code offset 0xb8

gato /etc/fstab

proc /proc proc defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
/dev/md0 none swap sw 0 0
/dev/md1 /boot ext3 defaults 0 0
/dev/md2 / ext4 defaults 0 0
/dev/md3 /home ext4 defaults 0 0

gato /boot/grub/grub.conf

timeout 5
default 0

title CentOS (2.6.32-573.7.1.el6.x86_64)
root (hd0,1)
kernel /vmlinuz-2.6.32-573.7.1.el6.x86_64 ro root=/dev/md2 rd_NO_LUKS rd_NO_DM nomodeset crashkernel=auto SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8 KEYTABLE=de
initrd /initramfs-2.6.32-573.7.1.el6.x86_64.img

title CentOS (2.6.32-504.1.3.el6.x86_64)
root (hd0,1)
kernel /vmlinuz-2.6.32-504.1.3.el6.x86_64 ro root=/dev/md2 rd_NO_LUKS rd_NO_DM nomodeset crashkernel=auto SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8 KEYTABLE=de
initrd /initramfs-2.6.32-504.1.3.el6.x86_64.img

gato /proc/mdstat

Personalities : [raid1]
md2 : active raid1 sdb3[1]
      1073741688 blocks super 1.0 [2/1] [_U]

md1 : active raid1 sdb2[1]
      524276 blocks super 1.0 [2/1] [_U]

md3 : active raid1 sdb5[1]
      1843412304 blocks super 1.0 [2/1] [_U]

unused devices: <none>

Cualquier ayuda al respecto será muy apreciada.

Gracias.

Respuesta1

En primer lugar, debe entenderse que no se trata de cambiar un disco defectuoso en una matriz RAID-1, sino de cómo eliminar completamente la matriz RAID, clonar el disco que está a punto de fallar y luego arrancar el sistema desde la configuración correcta. disco sin ninguna configuración RAID. La razón de este enfoque es porque el primer disco (sda), que es el disco bueno, está completamente vacío, no tiene particiones ni sistemas de archivos y cuando lo agrego a la matriz no se sincroniza (reconstruye) probablemente porque hay errores de lectura. en el segundo disco (sdb). Además, el segundo disco (el defectuoso) es desde donde arranca el sistema. Los pasos necesarios para completar esta tarea son bastante simples si conoce Linux y sus comandos; sin embargo, el procedimiento implica tareas de partición, clonación e instalación de MBR que destruirán sus datos si no tiene el suficiente cuidado. Finalmente, el siguiente procedimiento es específico para la configuración de los discos descritos en la pregunta, pero debería funcionar en otros sistemas si sustituye cuidadosamente los dispositivos y nombres de partición necesarios.

Aquí está el procedimiento:

1. Inicie el sistema en modo de rescate.

Como vamos a clonar datos del disco de arranque del sistema, no necesitamos preocuparnos por ningún archivo bloqueado o cosas así. La mejor manera de hacerlo es iniciar en modo de rescate. Afortunadamente, mi empresa de alojamiento de servidores lo admite de una manera muy sencilla. En un servidor al que tiene acceso directo (sin control remoto), sería algo así como iniciar desde un CD en vivo o seleccionar "Modo de rescate" en el menú de inicio.

2. Prepare el primer disco (/dev/sda) para clonar los datos.

Para preparar sda necesitamos obtener información de partición de sdb. En realidad este paso no es obligatorio porque nuestro objetivo es arrancar el sistema sin ninguna configuración RAID o sin ninguna relación con sdb, si lo prefieres, así que si el esquema de partición actual no es el que queremos esta es la oportunidad de cambiarlo. Lo único que debemos tener en cuenta es que las nuevas particiones deben tener suficiente espacio para contener los datos de sdb. Sin embargo, particionar en Linux requiere un conocimiento profundo sobre alineación y cosas así y como sdb ya está particionado correctamente, me resultó más fácil hacer lo mismo en sda. Para hacer eso primero necesitamos ver las particiones en sdb, yo usé parted para eso.

Nota:La tarea más difícil cuando investigas cómo hacer cosas con Linux es encontrar qué comando (de muchos) es mejor usar. Por ejemplo, hay bastantes comandos y utilidades de partición y decidir cuál usar requiere una cantidad significativa de tiempo leyendo y comparando información. Elegí usar parted aquí porque muestra el sistema de archivos junto con las particiones y porque tiene mejor soporte para discos grandes. (No estoy seguro).

# parted /dev/sdb
(parted) unit s
(parted) print

producción:

Model: ATA ST3000DM001-1CH1 (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: msdos

Number  Start        End          Size         Type      File system  Flags
 1      2048s        25167872s    25165825s    primary
 2      25169920s    26218496s    1048577s     primary   ext3         raid
 3      26220544s    2173704192s  2147483649s  primary   ext4         raid
 4      2173706240s  5860533167s  3686826928s  extended               lba
 5      2173708288s  5860533167s  3686824880s  logical   ext4         raid

(parted) quit

Como podemos ver aquí, sdb tiene una tabla de particiones de tipo msdos, eso significa que podemos crear hasta 4 particiones primarias en el disco. En este caso tiene 3 particiones primarias (1,2,3) y una extendida (4) que contiene una partición lógica (5).

El siguiente paso es crear las mismas particiones en sda:

# parted /dev/sda
(parted) unit s
(parted) mkpart primary 2048 25167872
(parted) mkpart primary 25169920 26218496
(parted) mkpart primary 26220544 2173704192
(parted) mkpart extended 2173706240 5860533167
(parted) mkpart logical 2173708288 5860533167
(parted) quit

Como puede ver, utilicé los mismos sectores de inicio y fin de sdb; por supuesto, los discos son los mismos; de lo contrario, deberá organizar los sectores en consecuencia.

Ahora necesitamos informarle al sistema sobre los cambios de partición en sda:

# partprobe /dev/sda

Finalmente, necesitamos crear los sistemas de archivos en sda. Probablemente este paso no sea necesario en absoluto porque vamos a clonar las particiones desde sdb, por lo que el procedimiento de clonación también copiará la información del sistema de archivos, aunque no hará daño.

# mkfs -t ext3 /dev/sda2
# mkfs -t ext4 /dev/sda3
# mkfs -t ext4 /dev/sda5

Observe que no creamos un sistema de archivos en la partición 4 (sda4). Esto se debe a que es una partición extendida que contiene una partición lógica (sda5), solo tenemos que crear el sistema de archivos en la lógica.

Ahora tenemos sda particionado y listo para guardar nuestros datos.

3. Copiar los datos de sdb.

Este paso requirió mayor investigación principalmente porque hay muchas formas de copiar datos. Probablemente cp -a sería suficiente, sin embargo, no logré encontrar ninguna información sólida sobre cómo manejar archivos ocultos, enlaces, etc. para iniciar el sistema correctamente. Así que decidí utilizar una utilidad de copia (clonación) de byte a byte en lugar de un comando de copia de archivos. La utilidad que utilicé fue dd:

# dd if=/dev/md1 of=/dev/sda2 bs=512 conv=noerror,sync,notrunc
# dd if=/dev/md2 of=/dev/sda3 bs=512 conv=noerror,sync,notrunc
# dd if=/dev/md3 of=/dev/sda5 bs=512 conv=noerror,sync,notrunc

Notas: En primer lugar, observe que estamos copiando desde /dev/md* y no desde /dev/sdb*. Esto se debe a que nuestro disco sdb es en realidad parte de una matriz RAID-1. Esa fue otra parte sobre la cual no logré encontrar ninguna información sólida. Por ejemplo, el sistema 've' /dev/sdb2, /dev/sdb3 y /dev/sdb5 que son las particiones que contienen nuestros datos, pero de acuerdo con el archivo /etc/fstab monta /dev/md1, /dev/md2 y /dev/md3 así que supuse que es mejor copiar desde /dev/md*. Otra cosa que debes tener en cuenta es en qué parte del sda vas a copiar los datos. En otras palabras, dónde se debe copiar sda /dev/md1,2,3. Bueno, en este caso es fácil averiguarlo según los tamaños de partición y los sistemas de archivos, aunque en un sistema diferente.df-kpuede mostrar esto pero no desde dentro del modo de rescate; necesitas iniciar normalmente para que esto funcione.

Finalmente, con los comandos anteriores le indicamos a dd que clone cada partición por separado, byte a byte, sin detenerse en ningún error de lectura (parámetro noerror). Por supuesto, esto puede llevar a que el sistema no pueda arrancar si hay algún error de lectura de datos en sdb (que existe en este caso). Sin embargo, antes de terminar usando dd, utilicé algunas técnicas para encontrar qué archivos estaban afectados y si eran seguros. para proceder con la clonación. Esta tarea está más allá del alcance de esta respuesta, pero un buen lugar para comenzar esaquí.

Otro punto importante de atención es el parámetro de tamaño de bloque (bs). Según la documentación de dd, debe configurar bs en 512 bytes porque si hay un error de lectura, y ocurrirá, solo "destruirá" 512 bytes en el disco de destino en lugar de un área más grande; sin embargo, el proceso será más lento. Nuevamente, no logré encontrar ninguna información sólida sobre esto y probablemente un tamaño de bloque de 4096 bytes tendría los mismos resultados.

Finalmente, dd no produce ningún resultado durante su operación y tardará bastante en finalizar debido al tamaño de las particiones. Si desea ver dónde está, debe abrir una nueva sesión de consola (en mi caso, una nueva sesión remota ssh ya que lo hago de forma remota) y ejecutar el comando:

# kill -USR1 $(pidof dd)

Esto obligará a dd a imprimir su progreso actual en la primera sesión de la consola.

4. Haga que sda ​​sea de arranque.

Esto es bastante sencillo de hacer. Primero que nada necesitas montar los puntos de montaje necesarios en sda:

# mount -t ext4 /dev/sda3 /mnt
# mount -t proc proc /mnt/proc
# mount -t sysfs sys /mnt/sys
# mount -o bind /dev /mnt/dev
# mount -t ext3 /dev/sda2 /mnt/boot

Nota: el último comando no es necesario si no tiene una partición separada para /boot en su sistema.

A continuación, debe convertirse en root en el disco /dev/sda; ahora mismo es root en el sistema de rescate.

# chroot /mnt /bin/bash

A continuación necesitamos actualizar nuestro archivo etc/mtab. Realmente no sé por qué deberíamos hacer eso, lo encontré en otro tutorial de rescate sin explicación.

# grep -v rootfs /proc/mounts > /etc/mtab

Lo siguiente que necesitamos es instalar GRUB en sda.

# grub-install --recheck /dev/sda

producción:

Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.

En este momento tenemos sda listo para iniciar, sin embargo, hay algunos pasos más para que el sistema sepa dónde encontrar el archivo necesario después de iniciar desde sda.

Lo primero es editar/boot/grub/grub.conffile que es el archivo que GRUB leerá para saber cómo procederá. En mi caso tuve que reemplazar cada"raíz (hd0,0)"instancia con"raíz (hd0,1)"y cada"/dev/md2"instancia con"/dev/sda3".

grub.confPuede resultar muy confuso, especialmente para alguien que no lo ha usado antes. La parte más confusa son los parámetros raíz, en grub hay dos significados diferentes de la palabra raíz. Cuando aparece como "root (hd0,1)", le dice a grub dónde está su directorio raíz para encontrar los kernels de Linux necesarios e instrucciones sobre cómo iniciarlos. Mucha gente lo confunde con el directorio raíz "/" del sistema cuando está completamente iniciado, pero lo que grub necesita aquí es dónde está el directorio /boot. En este caso, tengo una partición separada (/dev/sda2) que contiene el directorio /boot y debido a que /dev/sda2 es la segunda partición del primer disco, necesito decirle a grub exactamente eso, pero comenzando con cero (la primera partición es 0, el segundo es 1 y así sucesivamente), por lo que el comando "root (hd0,1)" le dice a grub que encontrará los archivos que necesita en la segunda partición del primer disco.

Cuando la raíz aparece como "/dev/", le dice al kernel dónde estará la raíz del sistema de archivos, es decir, "/" cuando el sistema esté completamente iniciado. Entonces, en este caso estamos ingresando el nombre de la partición (como la ve Linux) donde está "/", en mi caso /dev/sda3.

Finalmente necesitamos editar/etc/fstabarchivo para decirle al sistema qué montar y dónde cuando se inicia.

En mi caso, tuve que reemplazar todas las entradas "/dev/md*" con las particiones "/dev/sda*" correspondientes, que eran:

/dev/md1 --> /dev/sda2 /dev/md2 --> /dev/sda3 /dev/md3 --> /dev/sda5

5. Verifique y deshabilite el inicio desde sdb.

Si eres compulsivo como yo entonces quizás quieras correr.

# file -s /dev/sda

para ver si grub está instalado en sda. Si obtienes un resultado como:

/dev/sda: sticky x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, stage2 address 0x2000, stage2 segment 0x200, GRUB version 0.94;

luego se instala grub (GRand Unified Bootloader) en sda.

Aunque no es necesario, es posible que desees eliminar grub del sdd. Lo hice porque si algo en la configuración anterior está mal, entonces el sistema arrancará desde sdb y eso puede resultar confuso. Para eliminar grub de sdb utilicé dd:

# dd if=/dev/zero of=/dev/sdb bs=446 count=1

Eso escribirá de cero a los primeros 446 bytes del disco, que es donde reside grub en los discos con tablas de particiones msdos.

$ file -s /dev/sdb

Eso comprobará que se haya eliminado el grub.

6. Salga de chroot y desmonte todo.

# exit
# umount /mnt/boot
# umount /mnt/dev
# umount /mnt/sys
# umount /mnt/proc
# umount /mnt

Si aparece algún error durante la ejecución de los comandos anteriores, significa que algo no terminó o salió mal en nuestra sesión chroot y probablemente necesitemos comenzar de nuevo.

7. Reinicie.

Ahora cruza los dedos y reinicia

# reboot

Si logra iniciar sesión en el servidor con sus credenciales raíz originales y todo parece funcionar bien (bases de datos, sitios web, etc.), entonces ha iniciado exitosamente desde sda.

8. Prepare el sdb para su reemplazo.

En mi caso, quería borrar todos los datos de sdb antes de pedirle al soporte técnico que los reemplazara. Además, necesitaba eliminar por completo la configuración RAID del sistema para poder construir uno nuevo desde cero cuando el nuevo disco esté en su lugar. Empecé ejecutando parted para eliminar las particiones:

# parted /dev/sdb
# (parted) rm 5
# (parted) rm 4
# (parted) rm 2
# (parted) rm 2
# (parted) rm 1
# (parted) quit

Luego noté que todas las configuraciones RAID también se eliminaron, por lo que supuse que la definición RAID estaba dentro de las particiones, por lo que no procedí a realizar ninguna acción adicional al respecto. Luego aseguré el sdb borrado. Hay muchas maneras de hacerlo. elegí el/dev/urandommétodo deaquí

Respuesta2

Quizás sea mejor no intentar esto y empezar de nuevo o algo así. No habría intentado esto cuando era nuevo en Linux.

Dicho esto, todo lo que necesita hacer es particionar y agregar /dev/sda nuevamente a la matriz raid y una vez reconstruido, reemplazar /dev/sdb. Asegúrese de que grub esté en ambos discos y que la BIOS probará ambos discos al iniciar.

información relacionada