jueves, 13 de marzo de 2008

Raid 1 en un sistema ya instalado

   En el artículo del Raid 1 en linux veíamos cómo montar un raid 1 con Debian para tener fiablidad en nuestros datos y en el caso de que fallase un disco no perderlos. De esta forma aseguramos nuestros datos, pero en caso de fallo del disco de sistema irremediablemente tendríamos que instalar de nuevo todo.

   Lo que vamos a ver en este artículo es cómo montar un raid 1 completo de todo el sistema Debian, con éste ya instalado y funcionando. De esta forma contesto a varias personas que me han pedido este artículo tanto en los comentarios del primero como por email. Para no hacer muy pesado el artículo obviaré algunas partes que están detalladas en el artículo anterior del raid 1, por lo que si algún paso no lo comprendes, por favor lee el artículo anterior para aclarar las dudas.

   Debo aclarar que este tutorial está pensado para Debian y similares por lo que en otras distribuciones no funcionará correctamente al no existir el comando update-initramfs.

Partimos de un sistema ya instalado con tres particiones distintas: /dev/sda1 para /boot, /dev/sda5 para el swap y /dev/sda6 para /.
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda6 7.4G 509M 6.5G 8% /
tmpfs 63M 0 63M 0% /lib/init/rw
udev 10M 84K 10M 1% /dev
tmpfs 63M 0 63M 0% /dev/shm
/dev/sda1 177M 11M 157M 7% /boot

  • Después de añadir el disco a la máquina utilizamos el truco que ya usamos en el artículo original para copiar la tabla de particiones de un disco a otro:
    shian:~# sfdisk -d /dev/sda | sfdisk /dev/sdb
    Checking that no-one is using this disk right now ...
    OK

    Disk /dev/sdb: 1044 cylinders, 255 heads, 63 sectors/track

    sfdisk: ERROR: sector 0 does not have an msdos signature
    /dev/sdb: unrecognized partition table type
    Old situation:
    No partitions found
    New situation:
    Units = sectors of 512 bytes, counting from 0

    Device Boot Start End #sectors Id System
    /dev/sdb1 63 385559 385497 83 Linux
    /dev/sdb2 385560 16771859 16386300 5 Extended
    /dev/sdb3 0 - 0 0 Empty
    /dev/sdb4 0 - 0 0 Empty
    /dev/sdb5 385623 1172744 787122 82 Linux swap / Solaris
    /dev/sdb6 1172808 16771859 15599052 83 Linux
  • Editamos con fdisk las particiones de /dev/sdb y cambiamos del tipo a fd de las número 1, 5 y 6. El resultado final es:
    ...
    Command (m for help): p

    Disk /dev/sdb: 8589 MB, 8589934592 bytes
    255 heads, 63 sectors/track, 1044 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System
    /dev/sdb1 1 24 192748+ fd Linux raid autodetect
    /dev/sdb2 25 1044 8193150 5 Extended
    /dev/sdb5 25 73 393561 fd Linux raid autodetect
    /dev/sdb6 74 1044 7799526 fd Linux raid autodetect
  • Ahora creamos los dispositivos raid para las particiones.
    shian:~# mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
    mdadm: array /dev/md0 started.
    shian:~# mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb5
    mdadm: array /dev/md1 started.
    shian:~# mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/sdb6
    mdadm: array /dev/md2 started.
  • Formateamos las nuevas particiones.
    shian:~# mkfs.ext2 /dev/md0
    shian:~# mkswap /dev/md1
    shian:~# mkfs.ext3 /dev/md2
  • Actualizamos el archivo mdadm.conf con los nuevos dispositivos raid.
    shian:~# cd /etc/mdadm
    shian:/etc/mdadm# cp mdadm.conf mdadm.conf.`date +%y%m%d`
    shian:/etc/mdadm# echo "DEVICE partitions" > mdadm.conf
    shian:/etc/mdadm# mdadm --detail --scan >> mdadm.conf
  • Montamos las particiones del raid.
    shian:~# mkdir /mnt/md0
    shian:~# mkdir /mnt/md2

    shian:~# mount /dev/md0 /mnt/md0
    shian:~# mount /dev/md2 /mnt/md2
  • Editamos el archivo /etc/fstab y cambiamos sda1, sda5 y sda6 por los nuevos dispositivos del raid (md0, md1 y md2 respectivamente).
    # /etc/fstab: static file system information.
    #
    #
    proc /proc proc defaults 0 0
    /dev/md2 / ext3 defaults,errors=remount-ro 0 1
    /dev/md0 /boot ext2 defaults 0 2
    /dev/md1 none swap sw 0 0
    /dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0
    /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
  • Editamos el archivo /boot/grub/menu.lst de configuración del grub para añadir las entradas a ambos discos duros. Duplicamos la línea que tenemos del arranque, cambiamos sda6 por md2 y cambiamos el disco duro del que arranca.
    # Línea original
    #title Debian GNU/Linux, kernel 2.6.18-4-686
    #root (hd0,0)
    #kernel /vmlinuz-2.6.18-4-686 root=/dev/sda6 ro
    #initrd /initrd.img-2.6.18-4-686
    #savedefault

    # Nuevas líneas
    title Debian GNU/Linux, kernel 2.6.18-4-686 (HD1)
    root (hd1,0)
    kernel /vmlinuz-2.6.18-4-686 root=/dev/md2 ro
    initrd /initrd.img-2.6.18-4-686
    savedefault

    title Debian GNU/Linux, kernel 2.6.18-4-686 (HD0)
    root (hd0,0)
    kernel /vmlinuz-2.6.18-4-686 root=/dev/md2 ro
    initrd /initrd.img-2.6.18-4-686
    savedefault
  • Ahora actualizamos el ramdisk para que se reflejen los cambios que hemos hecho.
    shian:~# update-initramfs -u
    update-initramfs: Generating /boot/initrd.img-2.6.18-4-686
  • Copiamos los datos de las particiones antiguas a las nuevas del raid. La opción 'x' es muy importante porque sino al copiar desde / copiaríamos todo de manera recursiva.
    shian:~# cp -ax / /mnt/md2

    shian:~# cd /boot/
    shian:/boot# cp -ax . /mnt/md0
  • Instalamos y reconfiguramos grub en los dos discos.
    shian:~# grub

    grub> root (hd0,0)
    Filesystem type is ext2fs, partition type 0x83

    grub> setup (hd0)
    Checking if "/boot/grub/stage1" exists... no
    Checking if "/grub/stage1" exists... yes
    Checking if "/grub/stage2" exists... yes
    Checking if "/grub/e2fs_stage1_5" exists... yes
    Running "embed /grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded.
    succeeded
    Running "install /grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/grub/stage2 /grub/menu.lst"... succeeded
    Done.

    grub> root (hd1,0)
    Filesystem type is ext2fs, partition type 0xfd

    grub> setup (hd1)
    Checking if "/boot/grub/stage1" exists... no
    Checking if "/grub/stage1" exists... yes
    Checking if "/grub/stage2" exists... yes
    Checking if "/grub/e2fs_stage1_5" exists... yes
    Running "embed /grub/e2fs_stage1_5 (hd1)"... 15 sectors are embedded.
    succeeded
    Running "install /grub/stage1 (hd1) (hd1)1+15 p (hd1,0)/grub/stage2 /grub/menu.lst"... succeeded
    Done.
  • Y ya podemos reinicar la máquina. Hay que tenemos en cuenta que la máquina sólo arrancará del segundo disco porque el primero todavía no forma parte del raid. Si todo va bien, una vez que arranque veremos algo como esto:
    shian:~# df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/md2 7.4G 509M 6.5G 8% /
    tmpfs 63M 0 63M 0% /lib/init/rw
    udev 10M 100K 10M 1% /dev
    tmpfs 63M 0 63M 0% /dev/shm
    /dev/md0 183M 13M 161M 8% /boot

    shian:~# mount
    /dev/md2 on / type ext3 (rw,errors=remount-ro)
    tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
    proc on /proc type proc (rw,noexec,nosuid,nodev)
    sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
    udev on /dev type tmpfs (rw,mode=0755)
    tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
    devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
    /dev/md0 on /boot type ext2 (rw)
  • Lo más difícil ya está hecho. Tenemos el raid funcionando en modo degradado porque sólo está disponible el disco sdb. Ahora repetimos casi el mismo proceso para el disco antiguo. Cambiamos el tipo de particiones a fd y las añadimos particiones al raid.
    shian:~# fdisk /dev/sda
    ...
    Command (m for help): p

    Disk /dev/sda: 8589 MB, 8589934592 bytes
    255 heads, 63 sectors/track, 1044 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System
    /dev/sda1 1 24 192748+ fd Linux raid autodetect
    /dev/sda2 25 1044 8193150 5 Extended
    /dev/sda5 25 73 393561 fd Linux raid autodetect
    /dev/sda6 74 1044 7799526 fd Linux raid autodetect
    ...


    shian:~# mdadm --add /dev/md0 /dev/sda1
    mdadm: added /dev/sda1
    shian:~# mdadm --add /dev/md1 /dev/sda5
    mdadm: added /dev/sda5
    shian:~# mdadm --add /dev/md2 /dev/sda6
    mdadm: added /dev/sda6
  • Empezará entonces la reconstrucción de los raid.
    shian:~# cat /proc/mdstat
    Personalities : [raid1] [raid6] [raid5] [raid4]
    md2 : active raid1 sda6[2] sdb6[1]
    7799424 blocks [2/1] [_U]
    [=====>...............] recovery = 25.2% (1967936/7799424) finish=1.1min speed=81997K/sec

    md1 : active raid1 sda5[0] sdb5[1]
    393472 blocks [2/2] [UU]

    md0 : active raid1 sda1[0] sdb1[1]
    192640 blocks [2/2] [UU]

    unused devices:

  •    Un vez terminada la reconstrucción tendremos listo el sistema. Ahora, si queremos probar que todo funciona correctamente podemos reinicar de nuevo la máquina y comprobar que es capaz de arrancar desde cualquiera de los dos discos.

       Con este tipo de configuración estamos seguros de que aunque falle un disco nuestro servidor estará disponible y no tendremos que reinstalar ni reconfigurar nada. Sólo será necesario cambiar el disco defectuoso, reconstruir el raid y reconfigurar el grub.

    53 comentarios:

    Gura dijo...

    Tengo la mala costumbre de leer las cosas por encima, y luego no encajan las piezas. Al leerlo de nuevo todo encaja, pues haz echo un cp del sistema raíz al disco del raid, y luego has añadido el otro al arrancar. La pregunta es... como detecta el sistema cual es el disco degradado? El que has añadido nuevo? siempre se comporta así? es decir, sda6? Supongo que tendrá alguna opción para añadirlo en modo no-degradado y que el nuevo disco sea el origen de la replicación del RAID1.

    Iván dijo...

    Hola Gura,

    La clave está en la creación del raid. Cuando ponemos el comando:
    # mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/sdb6

    En vez de crear el raid con las particiones sda6 y sdb6 ponemos missing en el lugar de sda6. De esta forma creamos el raid 1 degradado con sólo sdb6 disponible. Después de copiar los datos, cuando añadimos la partición sda6 al raid, lo que hace mdadm es copiar todos los datos a esta nueva partición.
    Es decir, siempre va a copiar los datos del dispositivo que esté en el raid al nuevo que añadamos. No hay posibilidad de que se copien al contrario y se puedan perder.

    La forma de crearlo "normal" (no degradado) es poner todas las particiones en la creación. En este caso no lo hacemos así porque el sistema ya está instalado.

    Espero habértelo aclarado, sino, no dudes en preguntar de nuevo.

    Saludos, Iván.

    Anónimo dijo...

    Muy buen artículo. Muy interesante. Yo sabía como montarlo, pero reinstalando todo. Así como lo planteas es mucho mejor para un raid 1, claro. :)

    Iván dijo...

    Muchas gracias Anónimo,

    me alegro de que te haya gustado. Claro, así es mejor porque una vez montado el sistema ya no tienes que reinstalar todo de cero, simplemente poner el disco nuevo y "a correr"...

    Saludos, Iván.

    Anónimo dijo...

    Hola. Yo pondría más veces la palabra "debian" repartida por el texto :-)

    O bien explicaría las posibles alternativas al comado:

    update-initramfs -u

    ya que es parte clave del proceso (puedes avabar con un sistema que no arranca si no incluyes los ficheros necesarios en el initrd).

    Saludos.

    Iván dijo...

    Gracias Anonimo,

    ya he actualizado el artículo para indicar que sólo funcionará con Debian y similares.

    Saludos, Iván.

    Super Coco dijo...

    ¡Excelente entrada!

    Te vas a convertir en el sitio de referencia en castellano para trabajar con RAID en Linux ;-)

    patata dijo...

    Hola, Ivan

    Felicidades por tu articulo. Muy, muy bueno, claro y da muchas pistas sobre utilidades de linux que yo no había usado (sfdisk, mdamd, cp -ax, etc)

    Tengo tres preguntas, a ver si me puedes ayudar:

    - Consumo de cpu tengo un servidor de ficheros samba funcional. si le pongo raid por software ¿como puedo averiguar si tengo cpu de margen para no perder rendimiento?

    - Disposicion de dispositivos ide. como es una placa antigua, solo tiene dos ide, ahora mismo tiene dos dispositivos master cada uno en su canal: hdd y lectora dvd. Si pusiera otro hdd ide ¿cómo me aconsejas que lo coloque? (secundario en canal 1, master en canal 2, secundario en canal 2,...)

    - Rendimiento lectura/escritura creo recordar que el raid1 acelera las lecturas (doble canal) si mi información es correcta ¿obtendria mayor rendimiento mi samba?

    Tranquilo, ya me callo, esto es todo. Felicidades de nuevo, te has ganado un lector. Saludos desde Malaga

    Pepe dijo...

    Muy interesante el artículo.

    Tengo una duda. En el tutorial, ejecutas

    mdadm --detail --scan >> mdadm.conf

    y bastante después haces los varios

    mdadm --add /dev/md0 /dev/sda1

    ¿No habría que volver a ejectar el "scan", una vez concluidos los "add", a fin de obtenet un "mdadm.conf" más actualizado?

    Saludos y felicidades por el artículo.

    Neo dijo...

    Quisiera comentar que he realizado todo el proceso con éxito. Es un muy buen artículo Iván.

    Comentar que en el fstab y el grub se puede substituir /dev/mdX por su UUID, como ya realiza ubuntu desde algunas versiones. En algunos sistemas, como el mio, es necesario pues mi bios en funcion de los dispositivos usb conectados me ordena de un modo u otro los discos SATA y por tanto, sin los UUID muchas veces tengo que tocar la configuracion del grub o arrancar del cd para cambiar los dispositivos del fstab... Asi que usar UUID's es bastante comodo porque te olvidas de configurar nada si cambias el orden de los discos o añades otros.

    En respuesta a Pepe, no es necesario, porque en ese fichero se indica el UUID de los miembros que forman parte del raid, si compruebas el UUID de los miembros con # vol_id /dev/miembro comprobaras que corresponde con el del mdadm.conf

    Saludos.

    Iván dijo...

    Hola!

    [Super Coco], gracias por el comentario. Le estoy cogiendo el gustillo a esto del raid...

    [Patata], me alegro de que te haya gustado!. Sobre tus preguntas:
    - Consumo de CPU: No sabría decirte porque en mi servidor no lo he mirado, pero no creo que sea mucho.
    - Para optimizar al máximo el rendimiento del raid deberías colocar los discos cada uno en un conector ide independiente.
    - En principio sí se aumentan las lecturas porque se reparten entre ambos discos. Sin embargo ten en cuenta que el tiempo de escritura será el del disco más lento.

    [Pepe], ya te ha respondido Neo. Exactamente, como él dice, en el mdadm.conf están los IDs de los dispositivos raid, y estos IDs no cambian cuando se añade un disco nuevo al raid.

    [Neo], gracias por compartir la información del UUID y por la respuesta a Pepe!.

    Muchas gracias a todos por vuestros comentarios.

    Saludos, Iván.

    dani dijo...

    Antes de nada felicitarte por tu trabajo y darte las gracias por compartirlo con los lectores de tu blog, entre los que me incluyo. Tengo una pequeña duda en uno de los pasos. Cuando se hace el update-initramfs, este comando actualiza el archivo en /boot, por lo que mi pregunta es: ¿no debería estar montado en /boot el dispositivo /dev/md0 para que la nueva imagen se aloje en el raid 1? Es que no veo este paso claro y yo entiendo que si se actualiza la ramdisk en el /boot antiguo (/dev/sda1) cuando iniciemos desde el raid 1 no tendrá en /boot, que sería /dev/md0 en este caso, la ramdisk actualizada.
    Comento mi caso particular por si le sirve a alguien. Mi caso es similar sólo que necesito que el ordenador se encienda sólo, es decir, no puedo usar un archivo de configuración para el grub común para los dos discos duros, pues requeriría que estuviese yo físicamente en el servidor para escoger la entrada correcta en el grub en caso de que fallara un disco. Debido a esto me he decidido a dejar una partición de boot en cada disco fuera del raid, en cada una de ellas pongo como entrada por defecto en la configuración del grub la que tiene como root el disco correspondiente. Así dependiendo del disco a partir del cual se arranque el grub se ejecutará una entrada de su configuración u otra y se podrá reiniciar el ordenador después del fallo del primer disco sin necesidad de escoger la segunda entrada manualmente en el grub y viceversa.
    Quizás haya echo una locura (o se pueda hacer de forma más sencilla haciendo que el grub intente con todas las entradas o algo así), si el caso por favor avisadme, gracias.

    Iván dijo...

    Hola Dani,

    sobre tu pregunta del update-initramfs, no es necesario que esté montado en el raid. Se actualiza en /boot con la nueva información del mdadm.conf cuando ejecutamos el comando y posteriormente copiamos los archivos ya modificados a /mnt/md0 para que estén disponible en el siguiente arranque.

    Tu solución para no tener que elegir desde donde quieres arrancar me parece buena. Échale un vistazo a la opción fallback de la configuración del grub porque puede que te sirva.

    Saludos y gracias por tu comentario, Iván.

    dani dijo...

    Sobre lo de update-initramfs tienes toda razón después se copia la nueva ramdisk a /dev/md0, no sé como hice cuando lo leí cambié esos pasos de orden, mil disculpas. He seguido tu recomendación y después de trastear un rato conseguí mi propósito a través de la opción fallback del grub. Se debe usar acompañada de un default saved, todas las entradas deben estar correctamente configuradas, pues si una falla sí salta a la siguiente, pero si una está mal especificada se queda clavado. A mayores se debe actualizar cada vez que se enciende correctamente la máquina la opción por defecto del grub con grub-set-default. Muchas gracias es sin duda una solución mucho más elegante, ahora sólo me queda hacer otro raid con las particiones de boot que tenía separadas, aunque como las particiones de boot apenas cambian, básicamente como lo tenía yo el efecto era el mismo; sólo que debía copiar el contendio de una boot a la otra cuando hiciera un cambio, acordándome de cambiar la configuración del grub. Un saludo y muchas gracias otra vez.

    Iván dijo...

    Hola de nuevo Dani,

    me alegro de que te hay funcionado y muchas gracias por contarnos tu experiencia. Tal y como dices, es necesario ejecutar en cada arranque el grub-set-default, pero eso se soluciona fácilmente en algún script de arranque.
    Y sobre lo del raid para el boot, pues como dices, apenas cambian, aunque estaría bien hacerlo para tener todo la configuración homogénea y que si un día cambias algo te despreocupas de actualizar.

    Saludos, Iván.

    Josep dijo...

    Hola ivan,
    buen artículo!

    En referencia a crear una imagen de aranque (initrd) en Debian se puede usar:
    update-initramfs -u
    o también:
    mkinitrd --preload='modulo1' --preload='moduloN' /boot/initrd-2.6-X.img 2.6.X

    modulo1..moduloN: deben ser los modulos raid1, dm_raid...
    los podemos buscar entre la lista "lsmod".

    Supongo que mkinitrd será más general que update-initramfs -u y servirá para más distros.

    Al menos a mi me ha funcionado.

    saludos

    Iván dijo...

    Muchas gracias Josep por compartir con todos tu experiencia y por completar el artículo.

    Saludos, Iván.

    Enrique dijo...

    Hola Iván:


    Acabo de empezar a trabajar como administrador de sistemas y me está viniendo genial tu blog, gracias por esta labor.

    Con respecto a esta entrada, me surge la duda de si en lugar de usar cp -ax para copiar las particiones podríamos usar dump.

    Muchas gracias de nuevo. Un saludo.

    Iván dijo...

    Hola Enrique,

    la verdad es que no se me había ocurrido lo del dump, no te sabría decir puesto que no lo he probado. Lo único que tienes que conseguir es que los datos estén exactamente igual que en la partición origen, el cómo lo hagas es indiferente. También podrías utilizar herramientas para clonar particiones y demás.

    Saludos, Iván.

    Enrique dijo...

    Hola de nuevo, Iván:

    Me surge otra duda. He visto que en la creación del RAID, formateas la partición de arranque con ext2...¿esto es una errata o lo haces a conciencia por alguna razón?

    Iván dijo...

    Hola Enrique,

    no es ninguna errata. La partición /boot la tengo formateada como ext2. Realmente para esa partición que apenas se modifica no necesito el journaling. De todas formas es una manía, la puedes formatear con ext3 sin problemas.

    Saludos, Iván.

    Enrique dijo...

    Y aquí vuelvo otra vez! Me surge otra duda, con la configuración del grub en esta ocasión. En menu.lst haces distinción de cada disco y así lo configuras luego en grub, pero en otros tutoriales he visto que el segundo dispositivo lo configuran así:

    #grub
    > device (hd0) /dev/sdb
    > root (hd0,0)
    > setup (hd0)

    Con esto se supone que se apuntaba hd0 al segundo disco y se configuraba el MBR del segundo. ¿Es incompatible esto con tu solución?

    De nuevo muchas gracias por tu trabajo. Un saludo.

    Iván dijo...

    Hola de nuevo Enrique,

    no conocía esa forma de configurar grub y la verdad es que no sé si funcionará. Si dices que la has visto en otros tutoriales es de suponer que sí. Me lo apunto para probarlo en algún momento.

    Saludos, Iván.

    Josué Vladimir dijo...

    Hola:

    Tengo un server ya instalado y casualmente necesitaba hacer un raid1 y nada que esto me llego como anillo al dedo...

    En si lo que quería plantear es un error que me da en el paso en el que "Instalamos y reconfiguramos grub en los dos discos", me da el siguiente error:

    ---

    grub> root (hd0,0)
    Filesystem type is ext2fs, partition type 0x83

    grub> setup (hd0)
    Checking if "/boot/grub/stage1" exists... yes
    Checking if "/boot/grub/stage2" exists... yes
    Checking if "/boot/grub/e2fs_stage1_5" exists... yes
    Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded.
    succeeded
    Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/boot/grub/stage2
    /boot/grub/menu.lst"... succeeded
    Done.

    grub> root (hd1,0)
    Filesystem type is ext2fs, partition type 0xfd

    grub> setup (hd1)
    Checking if "/boot/grub/stage1" exists... no
    Checking if "/grub/stage1" exists... no

    Error 2: Bad file or directory type

    grub>

    ---

    Lo único que varia en mi configuración es que yo tengo tres particiones, como sda1 tengo a /, como a sda2 tengo a /mnt/data que es mi partición de datos y sda3 es mi swap. Como ven no tengo partición /boot. Por supuesto que he omitido en todo el manual lo referente a /boot pues no existe como partición en mi sistema, se encuentra dentro de sda1. Pero bueno hasta este punto todo ha salido bien, estoy trabado aquí, no tengo idea que puede ser la razón... espero me puedan ayudar, por lo pronto tuve que virar todos los cambios para atrás por si hay que reiniciar el server no aya problemas.

    Gracias Josué

    Iván dijo...

    Hola Josué Vladimir,

    por la información que da parece que no has copiado los datos de un disco al otro.
    Fíjate que cuando comprueba los archivos en el segundo disco, no los encuentra:
    grub> setup (hd1)
    Checking if "/boot/grub/stage1" exists... no
    Checking if "/grub/stage1" exists... no

    Espero haberte podido ayudar.

    Saludos, Iván.

    Anónimo dijo...

    Hola,

    Ao executar el comando :
    mdadm --add /dev/md1 /dev/sda2

    Resulta :

    Aug 25 18:03:12 waikiki kernel: [ 834.435252] res 51/40:a1:9b:32:ee/40:01:01:00:00/e0 Emask 0x9 (media error)
    Aug 25 18:03:12 waikiki kernel: [ 834.490813] ata4.00: configured for UDMA/133
    Aug 25 18:03:12 waikiki kernel: [ 834.490823] ata4: EH complete
    Aug 25 18:03:16 waikiki kernel: [ 838.255788] res 51/40:a1:9b:32:ee/40:01:01:00:00/e0 Emask 0x9 (media error)
    Aug 25 18:03:16 waikiki kernel: [ 838.307689] ata4.00: configured for UDMA/133
    Aug 25 18:03:16 waikiki kernel: [ 838.307699] ata4: EH complete
    Aug 25 18:03:19 waikiki kernel: [ 842.032638] res 51/40:a1:9b:32:ee/40:01:01:00:00/e0 Emask 0x9 (media error)
    Aug 25 18:03:19 waikiki kernel: [ 842.084628] ata4.00: configured for UDMA/133
    Aug 25 18:03:19 waikiki kernel: [ 842.084641] ata4: EH complete
    Aug 25 18:03:23 waikiki kernel: [ 845.826073] res 51/40:a1:9b:32:ee/40:01:01:00:00/e0 Emask 0x9 (media error)
    Aug 25 18:03:23 waikiki kernel: [ 845.881507] ata4.00: configured for UDMA/133
    Aug 25 18:03:23 waikiki kernel: [ 845.881516] ata4: EH complete
    Aug 25 18:03:27 waikiki kernel: [ 849.636009] res 51/40:a1:9b:32:ee/40:01:01:00:00/e0 Emask 0x9 (media error)
    Aug 25 18:03:27 waikiki kernel: [ 849.688372] ata4.00: configured for UDMA/133
    Aug 25 18:03:27 waikiki kernel: [ 849.688382] ata4: EH complete
    Aug 25 18:03:31 waikiki kernel: [ 853.404169] res 51/40:a1:9b:32:ee/40:01:01:00:00/e0 Emask 0x9 (media error)
    Aug 25 18:03:31 waikiki kernel: [ 853.455278] ata4.00: configured for UDMA/133
    Aug 25 18:03:31 waikiki kernel: [ 853.455305] sd 3:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK
    Aug 25 18:03:31 waikiki kernel: [ 853.455310] sd 3:0:0:0: [sdb] Sense Key : Medium Error [current] [descriptor]
    Aug 25 18:03:31 waikiki kernel: [ 853.455317] Descriptor sense data with sense descriptors (in hex):
    Aug 25 18:03:31 waikiki kernel: [ 853.455320] 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
    Aug 25 18:03:31 waikiki kernel: [ 853.455334] 01 ee 32 9b
    Aug 25 18:03:31 waikiki kernel: [ 853.455339] sd 3:0:0:0: [sdb] Add. Sense: Unrecovered read error - auto reallocate failed
    Aug 25 18:03:31 waikiki kernel: [ 853.455347] end_request: I/O error, dev sdb, sector 32387739
    Aug 25 18:03:31 waikiki kernel: [ 853.455360] ata4: EH complete
    Aug 25 18:03:31 waikiki kernel: [ 853.473993] sd 3:0:0:0: [sdb] 234441648 512-byte hardware sectors (120034 MB)
    Aug 25 18:03:31 waikiki kernel: [ 853.483153] sd 3:0:0:0: [sdb] Write Protect is off
    Aug 25 18:03:31 waikiki kernel: [ 853.491371] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
    Aug 25 18:03:31 waikiki kernel: [ 853.511859] sd 3:0:0:0: [sdb] 234441648 512-byte hardware sectors (120034 MB)
    Aug 25 18:03:31 waikiki kernel: [ 853.533851] sd 3:0:0:0: [sdb] Write Protect is off
    Aug 25 18:03:31 waikiki kernel: [ 853.544541] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
    Aug 25 18:03:35 waikiki kernel: [ 857.324135] res 51/40:01:9b:32:ee/40:01:01:00:00/e1 Emask 0x9 (media error)
    Aug 25 18:03:35 waikiki kernel: [ 857.382069] ata4.00: configured for UDMA/133
    Aug 25 18:03:35 waikiki kernel: [ 857.382077] ata4: EH complete
    Aug 25 18:03:38 waikiki kernel: [ 861.105400] res 51/40:01:9b:32:ee/40:01:01:00:00/e1 Emask 0x9 (media error)
    Aug 25 18:03:38 waikiki kernel: [ 861.158943] ata4.00: configured for UDMA/133
    Aug 25 18:03:38 waikiki kernel: [ 861.158951] ata4: EH complete
    Aug 25 18:03:42 waikiki kernel: [ 864.885350] res 51/40:01:9b:32:ee/40:01:01:00:00/e1 Emask 0x9 (media error)
    Aug 25 18:03:42 waikiki kernel: [ 864.945870] ata4.00: configured for UDMA/133
    Aug 25 18:03:42 waikiki kernel: [ 864.945878] ata4: EH complete
    Aug 25 18:03:46 waikiki kernel: [ 868.642968] res 51/40:01:9b:32:ee/40:01:01:00:00/e1 Emask 0x9 (media error)
    Aug 25 18:03:46 waikiki kernel: [ 868.702798] ata4.00: configured for UDMA/133
    Aug 25 18:03:46 waikiki kernel: [ 868.702806] ata4: EH complete
    Aug 25 18:03:50 waikiki kernel: [ 872.381778] res 51/40:01:9b:32:ee/40:01:01:00:00/e1 Emask 0x9 (media error)
    Aug 25 18:03:50 waikiki kernel: [ 872.439748] ata4.00: configured for UDMA/133
    Aug 25 18:03:50 waikiki kernel: [ 872.439758] ata4: EH complete
    Aug 25 18:03:53 waikiki kernel: [ 876.148715] res 51/40:01:9b:32:ee/40:01:01:00:00/e1 Emask 0x9 (media error)
    Aug 25 18:03:54 waikiki kernel: [ 876.226599] ata4.00: configured for UDMA/133
    Aug 25 18:03:54 waikiki kernel: [ 876.226610] sd 3:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK
    Aug 25 18:03:54 waikiki kernel: [ 876.226615] sd 3:0:0:0: [sdb] Sense Key : Medium Error [current] [descriptor]
    Aug 25 18:03:54 waikiki kernel: [ 876.226623] Descriptor sense data with sense descriptors (in hex):
    Aug 25 18:03:54 waikiki kernel: [ 876.226626] 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
    Aug 25 18:03:54 waikiki kernel: [ 876.226639] 01 ee 32 9b
    Aug 25 18:03:54 waikiki kernel: [ 876.226645] sd 3:0:0:0: [sdb] Add. Sense: Unrecovered read error - auto reallocate failed
    Aug 25 18:03:54 waikiki kernel: [ 876.226653] end_request: I/O error, dev sdb, sector 32387739
    Aug 25 18:03:54 waikiki kernel: [ 876.226663] ata4: EH complete
    Aug 25 18:03:54 waikiki kernel: [ 876.226901] sd 3:0:0:0: [sdb] 234441648 512-byte hardware sectors (120034 MB)
    Aug 25 18:03:54 waikiki kernel: [ 876.227083] sd 3:0:0:0: [sdb] Write Protect is off
    Aug 25 18:03:54 waikiki kernel: [ 876.250482] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
    Aug 25 18:03:54 waikiki kernel: [ 876.250829] sd 3:0:0:0: [sdb] 234441648 512-byte hardware sectors (120034 MB)
    Aug 25 18:03:54 waikiki kernel: [ 876.251008] sd 3:0:0:0: [sdb] Write Protect is off
    Aug 25 18:03:54 waikiki kernel: [ 876.251312] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA

    Iván dijo...

    Hola Anónimo,

    lo que te está mostrando ese error es que el disco tiene sectores defectuosos y con error:
    Unrecovered read error - auto reallocate failed
    Aug 25 18:03:31 waikiki kernel: [ 853.455347] end_request: I/O error, dev sdb, sector 32387739
    .

    Pero te los está mostrando en el disco sdb y tú estás añadiendo el sda al raid.

    Saludos, Iván.

    juan dijo...

    Hola Iván,gracias por tu pronta respuesta por mail.He tenido aparcado el tema del servidor porque me estaba volviendo loco,como te comenté estaba montando raid1 con ubuntu 7 server,como no lo conseguía he probado con debian y por supuesto me pasaba lo mísmo,me decía que "el dispositivo está ocupado",pero por fín me he parado a pensar un poco y he arrancado el sistema eligiendo el segundo dico(sdb),era la 1ª vez que lo probaba en debian,y he probado a añadir al raid la partición(sda6) y para mi sorpresa ya lo tengo sicronizando...
    Yo juraría que con ubuntu 7 server habia arrancado con el segundo disco (sdb) pero o no me arrancaba bien o tampoco me dejaba, seguramente estaba metiendo la pata yo,de todas formas lo probaré de nuevo y ya te comentaré si me funciona y que es lo que hacía mal.
    Saludos,Juan.

    Iván dijo...

    Hola Juan,

    me alegro de que hayas solucionado tu problema y por fin hayas podido añadir el otro disco al raid.

    Para cualquier otra duda ya sabes donde estoy.

    Saludos, Iván.

    Anónimo dijo...

    hola

    he seguido los pasos al pie de la letra, pero cuando intento arrancar del disco duro 1 (hd1) el grub me indica lo siguiente:

    root (hd1,0)
    Filesystem type is ext2fs, partition type 0xfd
    kernel /vmlinuz-2.6.18-6-k7 root=/dev/md2 ro

    Error 15: File not found.

    Es una copia exacta del arranque del disco 0, salvo en vez de root (hd0,0) tiene (hd1,0).

    Pero nada, se queda ahi y no arranca, tengo que arrancar desde la otra entrada del menu, ¿alguien sabe que puede ser?. muchas gracias.

    saludos

    Iván dijo...

    Hola Anónimo,

    tiene toda la pinta de que no estás copiando todos los archivos de un disco al otro. En particular parece que no estás copiando /boot.

    Saludos, Iván.

    Anónimo dijo...

    Hola iván,

    podrías indicar como una vez instalado volveríamos a cero, es decir, al sistema anterior con un hd sin raid..
    es que he al seguir los pasos, nose algo seguro hice mal y no va bien, solo detecta 1 hd los cambios el otro no, me lie porq tengo 1 hd master con cdrom slave en ide1 y 1 hd master en ide2 y tambie mis particiones son 1 swap y otra para nada mas...

    gracias iván

    Iván dijo...

    Hola Anónimo,

    la forma más fácil de volver a como estabas... quitando un disco duro :-P. Trabajarías con un raid 1 pero con sólo un disco.

    Si te refieres a deshacer todos los pasos, sería algo como crear las particiones en el disco duro que no tengas datos, formatearlas, montarlas, copiar los datos y cambiar los archivos de arranque para que apunten a ese nuevo disco.

    Saludos, Iván.

    Anónimo dijo...

    pero es q me da errores de disco montado y demas pegas con el mdadm :( estoy pensando en empezar desde cero el linux :( q mala suerte....

    gracias ivan

    Iván dijo...

    Hola de nuevo,

    estas cosas con las que no se tiene mucha práctica (o sí) es mejor hacerlas primero en un entorno de prueba. Todos somos humanos y aunque creamos que tenemos todo controlado a veces fallamos. A mi ni se me ocurriría probar cosas directamente en mi raid 1 de "producción". Si quiero hacer cualquier cosa, primero lo pruebo en "desarrollo" y luego ya hago el PaP :-P.

    Saludos, Iván.

    Anónimo dijo...

    Excelente tutorial.
    Um dos raros disponibilizados, que realmente funcionam - trabalho de profissional.
    Parabens
    Fernando Santos
    BRASIL - Rio de janeiro

    Iván dijo...

    Hola Fernando,

    me alegro de que te haya parecido interesante y te haya gustado el tutorial.

    Saludos, Iván.

    Necman dijo...

    El raid fue montado en fedora sin problemas
    solo hubo que usar el comando mkinird por update-initramfs.

    mkinitrd -f /boot/initrd-2.6.24.7-92.fc8.img 2.6.24.7-92.fc8



    Muchas Gracias por el post
    saludos
    Nahuel

    Iván dijo...

    Hola Nahuel,

    gracias por contarnos que también funciona sin problemas en Fedora y los cambios que tenemos que hacer.

    Saludos, Iván.

    coder dijo...

    Este post me parece una auténtica maravilla. Es un must xD

    Lo único en lo que no estoy de acuerdo, aunque es un debate de esos eternos, es en no hacer RAID 1 en la swap. Hay quien opina que si se corrompe la swap puede irse al carajo algún proceso en ejecución. Yo la meto en RAID 1 también.

    coder dijo...

    Vale, no he dicho nada xDD el tipo 82 estaba asignado en el particionado original. Cojonudo el post, recalco.

    Iván dijo...

    Hola coder,

    me alegro de que te haya gustado el post y te parezca un must, muchas gracias!. Respecto a lo del swap en el raid, ya te has dado cuenta... ;-).

    Saludos, Iván.

    javier dijo...

    El artículo es muy muy útil, ahora viene la pregunta

    Si la partición sda no está como fd el mdadm no lo encuentra como parte del array , por lo que la parte del missing sobraría, ¿verdad?

    Iván dijo...

    Hola Javier,

    me alegro de que el artículo te guste y te sea útil.

    No sé si entiendo correctamente la pregunta. Si no tienes una partición como tipo fd, entonces no es de tipo raid y este tutorial no te sirve ;-).
    Si lo que quieres es crear un raid 1 de cero te sugiero que leas este otro artículo: Raid 1 en Linux.

    Anónimo dijo...

    Felicidades, Maestro, por el aniversario de tu blog.

    Precisamente, durante estas últimas semanas me he estado peleado con un Ubuntu para pasarlo a RAID-1. Tu artículo me ha venido muy, muy bien. Solo dos detalles:

    - El primero: crear los raid si los hdd están en uso por algún procesos, puede ser un peñazo. Concretamente para crear un raid de la swap conviene hacer previamente un swapoff para poder hacer raid de las swap o buscar utilidades que automontan los hdd existentes

    - El segundo: si tocas manualmente menu.lst me temo que te arriesgas a que las actualizaciones del kernel ya no funcionan. Una alternativa: cambiar la opcion kopt para que use el dispositivo raid:

    # kopt=root=/dev/md1 ro

    Felicidades de nuevo y esperamos muchos, muchas perlas de sabiduría :)

    Iván dijo...

    Hola Anónimo,

    gracias por tus apuntes. Lo cierto es que el artículo ya está un poquito desfasado (pero sólo un poco). Además está hecho para Debian que no es exactamente igual que Ubuntu.
    Hace un par de semanas he estado montando un raid 1 en mi trabajo en Ubuntu Server y me he basado en mi anterior artículo del raid 1. Hay algunas cosas que son ligeramente diferentes, pero la base sigue siendo la misma.

    Saludos y gracias, Iván.

    Anónimo dijo...

    Muy bueno,pero yo no consigo hacerlo funcionar
    Y es que estoy intentando instalarlo con UBUNTU 11
    El grub esta cambiado, no me aparecen las mismas opciones no esta menu.lst y estoy perdido, he intentado instalar el raid 1 en la instalacion y el grub da errores no deja terminar la instalacion

    Anónimo dijo...

    Ivan. Una pregunta muy tonta...pero los pasos para montar un raid 1 con solo dos discos gemelos sin tener el primer disco que vos tenes. Que paso tendria que hacer.

    Gracias!

    Iván dijo...

    Hola

    @Anónimo1: Lo siento pero no te voy a poder ayudar. Este tutorial está basado en debian y en ubuntu alguna cosa puede ser distinta, por eso no te funciona.

    @Anónimo2: Prueba a seguir este tutorial http://lopezivan.blogspot.com/2007/03/raid-1-en-linux.html

    Luis Caramadre dijo...

    Hola Iván:

    Tengo una pregunta, resulta que tengo un servidor HTTP en Debian con LVM, todo en un solo disco Físico de 500 GB y quisiera saber si el procedimiento seria el mismo para convertirlo en Raid 1. Te felicito por el post y veo que ya tiene un par de años espero me respondas... Gracias por tu tiempo.

    Iván dijo...

    Hola Luis,

    creo que debería funcionar sin problemas, aunque no sé si habrá alguna implicación adicional a que el / esté montado sobre LVM.

    Te recomiendo lo siguiente:
    1.- Lo primero y más importante y que a veces se nos olvida es que hagas un backup de todo.
    2.- En lugar de probar directamente en "producción" (tu servidor actual) es mejor que te crees una máquina virtual por ejemplo con VirtualBox y reproduzcas ahí tu configuración. Luego, haces ahí todas las pruebas, rompes, deshaces y vuelves a probar.
    3.- Finalmente, cuando estés seguro de que todo funciona haces "el paso a producción" en tu actual servidor.

    Espero que todo vaya bien.

    Saludos, Iván.

    Noobsaibot73 dijo...

    Hola Iván,

    He solucionado un problema con un RAID1 degradado en Ubuntu, pero al hacer un update-initramfs -u (no lo he hecho aún en la máquina real, sólo en una MV para comprobar que todo va bien), me cambia el nombre del raid de md0 a mdX (En la MV lo llamó md127). ¿Hay alguna manera de evitar esto? Gracias de antemano.

    Anónimo dijo...

    Estimado, tengo un problema con el boot/grub/menu.lst que no está en la version de ubuntu 12.04. En su lugar creo que tendría que modificar el grub.cfg, pero la verdad q no sé bien que modificar. Podría darme una ayuda ?

    Muchas gracias!

    Publicar un comentario