lunes, 31 de agosto de 2009

Cómo configurar el software RAID 1, en caliente (Incluyendo configuración de GRUB) (Debian Lenny)

Esta guía explica cómo configurar el software RAID 1, cuando ya está ejecutando un sistema Debian Lenny. The GRUB bootloader will be configured in such a way that the system will still be able to boot if one of the hard drives fails (no matter which one). El gestor de arranque GRUB se configurará de tal manera que el sistema todavía será capaz de arrancar si una de las unidades de disco duro falla (no importa cuál).

I do not issue any guarantee that this will work for you! 1 Preliminary Note 1 Nota preliminar

In this tutorial I'm using a Debian Lenny system with two hard drives, /dev/sda and /dev/sdb which are identical in size. /dev/sdb is currently unused, and /dev/sda has the following partitions: En este tutorial estoy usando un sistema Debian Lenny, con dos discos duros, /dev/sda y /dev /sdb, que son idénticos en tamaño. /Dev/sdb es actualmente sin uso, y /dev/sda tiene las siguientes particiones:

· /dev/sda1 : /boot partition, ext3; / dev/sda1: / boot, ext3;

· /dev/sda2 : swap; / dev/sda2: swap;

· /dev/sda3 : / partition, ext3 / dev/sda3: partición /, ext3

In the end I want to have the following situation: Al final quiero tener la siguiente situación:

· /dev/md0 (made up of /dev/sda1 and /dev/sdb1 ): /boot partition, ext3; / dev/md0 (formado por / dev/sda1 y / dev/sdb1): partición / boot, ext3;

· /dev/md1 (made up of /dev/sda2 and /dev/sdb2 ): swap; / dev/md1 (formado por / dev/sda2 y / dev/sdb2): intercambio;

· /dev/md2 (made up of /dev/sda3 and /dev/sdb3 ): / partition, ext3 / dev/md2 (formado por / dev/sda3 y / dev/sdb3): partición /, ext3

This is the current situation: Esta es la situación actual:

df -h df-h

server1:~# df -h server1: ~ # df-h
Filesystem Size Used Avail Use% Mounted on Sistema de ficheros Tamaño Used Avail Use% Montado en
/dev/sda3 5.3G 747M 4.3G 15% / / dev/sda3 5.3G 747m 4.3G 15% /
tmpfs 126M 0 126M 0% /lib/init/rw tmpfs 126m 0 126m 0% / lib / init / rw
udev 10M 84K 10M 1% /dev udev 10M 84K 10M 1% / dev
tmpfs 126M 0 126M 0% /dev/shm tmpfs 126m 0 126m 0% / dev / shm
/dev/sda1 228M 29M 188M 14% /boot / dev/sda1 228M 29M 188m 14% / boot
server1:~# server1: ~ #

fdisk -l fdisk-l

server1:~# fdisk -l server1: ~ # fdisk-l

Disk /dev/sda: 6442 MB, 6442450944 bytes Disk / dev / sda: 6442 MB, 6442450944 octetos
255 heads, 63 sectors/track, 783 cylinders 255 cabezas, 63 sectores / pista, 783 cilindros
Units = cylinders of 16065 * 512 = 8225280 bytes Unidades = cilindros de 16065 * 512 = 8225280 bytes
Disk identifier: 0x000740fc Identificador de disco: 0x000740fc

Device Boot Start End Blocks Id System Dispositivo Inicio Comienzo Fin Bloques Id. Sistema
/dev/sda1 * 1 30 240943+ 83 Linux / dev/sda1 * 1 30 240943 + 83 Linux
/dev/sda2 31 92 498015 82 Linux swap / Solaris / dev/sda2 31 92 498015 82 Linux swap / Solaris
/dev/sda3 93 783 5550457+ 83 Linux / dev/sda3 93 783 5550 457 + 83 Linux

Disk /dev/sdb: 6442 MB, 6442450944 bytes Disk / dev / sdb: 6442 MB, 6442450944 octetos
255 heads, 63 sectors/track, 783 cylinders 255 cabezas, 63 sectores / pista, 783 cilindros
Units = cylinders of 16065 * 512 = 8225280 bytes Unidades = cilindros de 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000 Identificador de disco: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table Disk / dev / sdb no contiene una tabla de particiones válida
server1:~# server1: ~ #

2 Instalar mdadm

The most important tool for setting up RAID is mdadm . La herramienta más importante para la creación de RAID es mdadm. Let's install it like this: Vamos a instalar así:

aptitude install initramfs-tools mdadm apt-get install initramfs-tools mdadm

You will be asked the following question: Se le pedirá la siguiente pregunta:

MD arrays needed for the root file system: <-- all MD arreglos necesarios para el sistema de archivos raíz: <- todos

Afterwards, we load a few kernel modules (to avoid a reboot): Después, una carga de unos módulos del kernel (para evitar un reinicio del sistema):

modprobe md modprobe MD
modprobe linear modprobe lineal
modprobe multipath multipath modprobe
modprobe raid0 modprobe RAID 0
modprobe raid1 modprobe raid1
modprobe raid5 modprobe RAID 5
modprobe raid6 modprobe raid6
modprobe raid10 modprobe RAID10

Now run Ahora ejecute

cat /proc/mdstat cat / proc / mdstat

The output should look as follows: La salida debe ser como sigue:

server1:~# cat /proc/mdstat server1: ~ # cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] Personalities: [linear] [multipath] [raid0] [RAID 1] [RAID 6] [RAID 5] [RAID 4] [RAID 10]
unused devices: unused devices:
server1:~# server1: ~ #

3 Preparing /dev/sdb 3 Preparación /dev/sdb

To create a RAID1 array on our already running system, we must prepare the /dev/sdb hard drive for RAID1, then copy the contents of our /dev/sda hard drive to it, and finally add /dev/sda to the RAID1 array. Para crear una matriz RAID 1, ya se está ejecutando en nuestro sistema, debemos preparar el disco /dev/sdb para RAID 1, y luego copiar el contenido de nuestro disco /dev/sda y, finalmente, añadir /dev/sda a la matriz RAID 1 .

First, we copy the partition table from /dev/sda to /dev/sdb so that both disks have exactly the same layout: En primer lugar, se copia la tabla de particiones en /dev/sda a /dev/sdb para que ambos discos tienen exactamente el mismo diseño:

sfdisk -d /dev/sda | sfdisk /dev/sdb sfdisk-d /dev/sda | sfdisk /dev/sdb

The output should be as follows: La salida debe ser como sigue:

server1:~# cat /proc/mdstat server1: ~ # cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] Personalities: [linear] [multipath] [raid0] [RAID 1] [RAID 6] [RAID 5] [RAID 4] [RAID 10]
unused devices: unused devices:
server1:~# sfdisk -d /dev/sda | sfdisk /dev/sdb server1: ~ # sfdisk-d / dev / sda | sfdisk / dev / sdb
Checking that no-one is using this disk right now ... Comprobación de que nadie está usando este disco ahora mismo ...
OK OK

Disk /dev/sdb: 783 cylinders, 255 heads, 63 sectors/track Disk / dev / sdb: 783 cilindros, 255 cabezas, 63 sectores / pista

sfdisk: ERROR: sector 0 does not have an msdos signature sfdisk: ERROR: sector 0 no tiene una firma msdos
/dev/sdb: unrecognized partition table type / dev / sdb: tabla de particiones de tipo desconocido
Old situation: Situación anterior:
No partitions found N particiones encontradas
New situation: Nueva situación:
Units = sectors of 512 bytes, counting from 0 Unidades = sectores de 512 bytes, contando desde 0

Device Boot Start End #sectors Id System Inicio Comienzo Fin de dispositivo # sectores Id Sistema
/dev/sdb1 * 63 481949 481887 83 Linux / dev/sdb1 * 63 481949 481887 83 Linux
/dev/sdb2 481950 1477979 996030 82 Linux swap / Solaris / dev/sda2 481950 1477979 996030 82 Linux swap / Solaris
/dev/sdb3 1477980 12578894 11100915 83 Linux / dev/sda3 1477980 12578894 11100915 83 Linux
/dev/sdb4 0 - 0 0 Empty / dev/sdb4 0 - 0 0 Empty
Successfully wrote the new partition table Escribió con éxito la nueva tabla de particiones

Re-reading the partition table ... La relectura de la tabla de particiones ...

If you created or changed a DOS partition, /dev/foo7, say, then use dd(1) Si ha creado o modificado una partición DOS, / dev/foo7, por ejemplo, a continuación, utilizar dd (1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1 a cero los primeros 512 bytes: dd if = / dev / zero of = / dev/foo7 bs = 512 count = 1
(See fdisk(8).) (Véase fdisk (8).)
server1:~# server1: ~ #

The command El comando

fdisk -l fdisk-l

should now show that both HDDs have the same layout: Ahora debe demostrar que ambos discos duros tienen la misma composición:

server1:~# fdisk -l server1: ~ # fdisk-l

Disk /dev/sda: 6442 MB, 6442450944 bytes Disk / dev / sda: 6442 MB, 6442450944 octetos
255 heads, 63 sectors/track, 783 cylinders 255 cabezas, 63 sectores / pista, 783 cilindros
Units = cylinders of 16065 * 512 = 8225280 bytes Unidades = cilindros de 16065 * 512 = 8225280 bytes
Disk identifier: 0x000740fc Identificador de disco: 0x000740fc

Device Boot Start End Blocks Id System Dispositivo Inicio Comienzo Fin Bloques Id. Sistema
/dev/sda1 * 1 30 240943+ 83 Linux / dev/sda1 * 1 30 240943 + 83 Linux
/dev/sda2 31 92 498015 82 Linux swap / Solaris / dev/sda2 31 92 498015 82 Linux swap / Solaris
/dev/sda3 93 783 5550457+ 83 Linux / dev/sda3 93 783 5550 457 + 83 Linux

Disk /dev/sdb: 6442 MB, 6442450944 bytes Disk / dev / sdb: 6442 MB, 6442450944 octetos
255 heads, 63 sectors/track, 783 cylinders 255 cabezas, 63 sectores / pista, 783 cilindros
Units = cylinders of 16065 * 512 = 8225280 bytes Unidades = cilindros de 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000 Identificador de disco: 0x00000000

Device Boot Start End Blocks Id System Dispositivo Inicio Comienzo Fin Bloques Id. Sistema
/dev/sdb1 * 1 30 240943+ 83 Linux / dev/sdb1 * 1 30 240943 + 83 Linux
/dev/sdb2 31 92 498015 82 Linux swap / Solaris / dev/sda2 31 92 498015 82 Linux swap / Solaris
/dev/sdb3 93 783 5550457+ 83 Linux / dev/sda3 93 783 5550 457 + 83 Linux
server1:~# server1: ~ #

Next we must change the partition type of our three partitions on /dev/sdb to Linux raid autodetect : A continuación se debe cambiar el tipo de partición de los tres particiones en / dev / sdb para Linux raid autodetect:

fdisk /dev/sdb fdisk /dev/sdb

server1:~# fdisk /dev/sdb server1: ~ # fdisk /dev/sdb

Command (m for help):
<-- m Command (m for help): <- M
Command action La acción de comandos
a toggle a bootable flag
una palanca una bandera de arranque
b edit bsd disklabel
b editar etiquetas de disco BSD
c toggle the dos compatibility flag
c cambiar el indicador de compatibilidad de DOS
d delete a partition
d eliminar una partición
l list known partition types
l la conocen los tipos de partición de
m print this menu
m imprimir este menú
n add a new partition
n añadir una nueva partición
o create a new empty DOS partition table
o crear una nueva tabla de particiones DOS vacía
p print the partition table
P: Imprimir la tabla de particiones
q quit without saving changes
q salir sin guardar los cambios
s create a new empty Sun disklabel
s crear una nueva etiqueta de disco dom vacío
t change a partition's system id
No cambies de una partición del sistema de identificación
u change display/entry units
Cambiar la U / unidades de entrada
v verify the partition table
v Verifique la tabla de particiones
w write table to disk and exit
w Escribe la tabla a disco y la salida
x extra functionality (experts only)
x funcionalidad extra (sólo para expertos)

Command (m for help):
<-- t Command (m for help): <- t
Partition number (1-4): <-- 1 Partition number (1-4): <- 1
Hex code (type L to list codes): <-- L Código hexadecimal (tipo L, con los códigos de la lista): <- L

0 Empty 1e Hidden W95 FAT1 80 Old Minix be Solaris boot 0 Empty 1e Hidden W95 FAT1 80 Old Minix ser de arranque de Solaris
1 FAT12 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 24 NEC DOS 81 Minix / bf Lin antiguo Solaris
2 XENIX root 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 82 Linux swap / So c1 DRDOS / sec (FAT -
3 XENIX usr 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 83 Linux c4 DRDOS / sec (FAT -
4 FAT16 <32m>
4 FAT16 <32m>
5 Extended 41 PPC PReP Boot 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 85 Linux ampliado c7 Syrinx
6 FAT16 42 SFS 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 86 NTFS volumen establecido FS no da datos
7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
7 HPFS / NTFS 4d QNX4.x 87 volumen NTFS se db CP / M / CTOS /.
8 AIX 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2 ª parte 88 Linux plaintext de Dell Utility
9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM df BootIt
9 AIX de arranque 4F QNX4.x 3 ª parte 8e Linux LVM df BootIt
a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e1 DOS access
un OS / 2 Boot Manag 50 OnTrack DM 93 Amoeba e1 DOS acceso
b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R / O
c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP / M 9f BSD / OS e4 SpeedStor
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
f W95 Ext'd (LBA) 54 OnTrackDM6 a5 FreeBSD ee EFI GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a5 FreeBSD ee EFI GPT
10 OPUS 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16 /
11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f0 Linux / PA-RISC b
12 Compaq diagnost 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
12 diagnost Compaq 5C Príamo Edisk a8 Darwin UFS f1 SpeedStor
14 Hidden FAT16 <3>
14 Hidden FAT16 <3>
16 Hidden FAT16 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD o Sys ab Darwin boot f2 DOS secundaria
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fd Linux raid auto
17 Hidden HPFS / NTF 64 Novell Netware b7 BSDI fs fd Linux raid auto
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fe LANstep
18 AST SmartSleep 65 Novell Netware b8 Fe BSDI swap LANstep
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid ff BBT
1b Hidden W95 FAT3 70 DiskSecure Mult bb Asistente de arranque se escondió BBT ff
1c Hidden W95 FAT3 75 PC/IX
1c Hidden W95 FAT3 75 PC / IX
Hex code (type L to list codes):
<-- fd Código hexadecimal (tipo L, con los códigos de la lista): <- FD
Changed system type of partition 1 to fd (Linux raid autodetect) Tipo de cambio de sistema de la partición de 1 a fd (Linux raid autodetect)

Command (m for help):
<-- t Command (m for help): <- t
Partition number (1-4): <-- 2 Partition number (1-4): <- 2
Hex code (type L to list codes): <-- fd Código hexadecimal (tipo L, con los códigos de la lista): <- FD
Changed system type of partition 2 to fd (Linux raid autodetect) Tipo de cambio de sistema de partición de 2 a fd (Linux raid autodetect)

Command (m for help):
<-- t Command (m for help): <- t
Partition number (1-4): <-- 3 Partition number (1-4): <- 3
Hex code (type L to list codes): <-- fd Código hexadecimal (tipo L, con los códigos de la lista): <- FD
Changed system type of partition 3 to fd (Linux raid autodetect) Tipo de cambio de sistema de la partición de 3 a fd (Linux raid autodetect)

Command (m for help): <-- w Command (m for help): <- w
The partition table has been altered! La tabla de partición ha sido alterado!

Calling ioctl() to re-read partition table.
Calling ioctl () para volver a leer la tabla de particiones.
Syncing disks.
Sincronización de los discos.
server1:~#
server1: ~ #

To make sure that there are no remains from previous RAID installations on /dev/sdb , we run the following commands: Para asegurarse de que no hay restos de instalaciones anteriores de RAID en / dev / sdb, ejecutamos los siguientes comandos:

mdadm --zero-superblock /dev/sdb1 mdadm - zero-superblock / dev/sdb1
mdadm --zero-superblock /dev/sdb2 mdadm - zero-superblock / dev/sdb2
mdadm --zero-superblock /dev/sdb3 mdadm - zero-superblock / dev/sdb3

If there are no remains from previous RAID installations, each of the above commands will throw an error like this one (which is nothing to worry about): Si no hay restos de instalaciones anteriores de RAID, cada uno de los comandos anteriores generará un error como este (que es nada de que preocuparse):

server1:~# mdadm --zero-superblock /dev/sdb1 server1: ~ # mdadm - zero-superblock / dev/sdb1
mdadm: Unrecognised md component device - /dev/sdb1 mdadm: no reconocidos dispositivo componente MD - / dev/sdb1
server1:~# server1: ~ #

Otherwise the commands will not display anything at all. De lo contrario los comandos no se mostrará nada en absoluto.

fuente: http://www.howtoforge.com/how-to-set-up-software-raid1-on-a-running-system-incl-grub-configuration-debian-lenny