RAID con LVM vs MDRAID: ¿pros y contras?

51

En su respuesta a la pregunta "tipos de incursiones mixtas" , HBruijn sugiere utilizar LVM para implementar RAID frente al MDRAID más estándar.

Después de una pequeña investigación, parece que LVM también es compatible con la funcionalidad RAID. En el pasado, he usado LVM sobre MDRAID, y hasta ahora no sabía que LVM también es compatible con la funcionalidad RAID. Esto parece ser un desarrollo relativamente reciente, pero no he descubierto exactamente cuándo se implementó.

Entonces, estas son formas alternativas de implementar RAID de software en Linux. ¿Cuáles son los pros y los contras de estos dos enfoques diferentes? Estoy buscando comparaciones de características entre los dos enfoques para que las personas puedan decidir cuál es mejor para ellos. Las conclusiones basadas en la experimentación (como en, esta característica no funciona tan bien como esta característica y aquí es por qué) también están bien, siempre que incluya sus datos en la respuesta.

Algunos problemas específicos para abordar:

  1. Supongamos que quiero hacer sw RAID + LVM (un escenario común). ¿Debo usar el soporte de LVM para sw RAID y, por lo tanto, usar una utilidad en lugar de dos? ¿Este enfoque más integrado tiene alguna ventaja?
  2. ¿El soporte de LVM para SW RAID tiene deficiencias significativas en comparación con el MDADM más maduro? Específicamente, ¿qué tan estable / libre de errores es el soporte LVM para sw RAID? Parece que este soporte solo se remonta a 2011 (ver más abajo), mientras que MDADM es mucho más antiguo. Además, ¿cómo se compara en términos de conjunto de características? ¿Tiene deficiencias de características significativas en comparación con MDADM? Por el contrario, ¿tiene soporte para las funciones de sw RAID que MDADM no tiene?

NOTAS

  1. Hay una discusión detallada en http://www.olearycomputers.com/ll/linux_mirrors.html pero no pude averiguar en qué fecha se escribió.

    Pregunta similar sobre Serverfault: linux LVM mirror vs. MD mirror . Sin embargo, esta pregunta se hizo en 2010, y las respuestas pueden estar desactualizadas.

  2. La entrada del registro de cambios para la versión 2.02.87 - 12 de agosto de 2011 tiene

    Agregue configure --with-raid para el nuevo 'raid' segtype para MD RAID 1/4/5/6 soporte

    Por lo tanto, parece que el soporte RAID en LVM tiene aproximadamente 3 años.

Faheem Mitha
fuente
Una ventaja que se me ocurre es usar funciones relacionadas con HA que están disponibles para LVM.
Bratchley
1
@JoelDavis ¿Puedes dar más detalles? No sé qué significan las funciones relacionadas con HA.
Faheem Mitha
Además, existe la ventaja habitual de que está trabajando con volúmenes lógicos en lugar de mdvolúmenes. Así que tiene lvextendy está pvmovedisponible para moverse entre dispositivos, mientras que con mdel proceso es mucho más manual sin un beneficio claro.
Bratchley
@JoelDavis tal vez escriba una respuesta?
Faheem Mitha
2
LVM siempre ha soportado raid1 y raid0. Fue más recientemente que abandonaron su propia implementación y en su lugar utilizaron internamente el código de personalidad de incursión de md, abriendo los otros niveles de incursión.
psusi

Respuestas:

55

¿Qué nivel de madurez y funcionalidad tiene LVM RAID?

LVM-RAID es realmente mdraid debajo de las cubiertas. Básicamente funciona creando dos volúmenes lógicos por dispositivo RAID (uno para datos, llamado "rimage"; uno para metadatos, llamado "rmeta"). Luego los pasa a los controladores mdraid existentes. Por lo tanto, cosas como el manejo de errores de lectura de disco, el equilibrio de carga de E / S, etc. deben ser bastante maduros.

Esa es la buena noticia.

Herramientas

No puede usarlo mdadm(al menos, no de una manera fácil¹) y las herramientas RAID LVM no son tan maduras. Por ejemplo, en Debian Wheezy, lvsno puedo decirte el estado de sincronización de RAID5. Dudo mucho que la reparación y la recuperación (especialmente de las situaciones "¡eso nunca debería suceder!") Sea tan buena como mdadm (y accidentalmente me topé con uno de esos en mis pruebas, y finalmente me di por vencido en recuperarlo: recuperación con mdadm hubiera sido fácil).

Especialmente si no está utilizando las versiones más recientes de todas las herramientas, empeora.

Funciones faltantes

Las versiones actuales de LVM-RAID no admiten reducir ( lvreduce) un volumen lógico RAID. Tampoco admiten cambiar el número de discos o el nivel RAID ( lvconvertmuestra un mensaje de error que dice que aún no es compatible). lvextendfunciona, e incluso puede aumentar los niveles de RAID para los que mdraid solo obtuvo soporte recientemente, como RAID10. En mi experiencia, extender los LV es mucho más común que reducirlos, por lo que en realidad es razonable.

Algunas otras características de mdraid no están presentes, y especialmente no puedes personalizar todas las opciones que puedes usar con mdadm.

En versiones anteriores (como se encuentra, por ejemplo, en Debian Wheezy), LVM RAID tampoco admite el crecimiento. Por ejemplo, en Wheezy:

root@LVM-RAID:~# lvextend -L+1g vg0/root
Extending logical volume root to 11.00 GiB
Internal error: _alloc_init called for non-virtual segment with no disk space.

En general, no desea ejecutar las versiones de Wheezy.

Lo anterior es una vez que lo tienes instalado. Ese tampoco es un proceso trivial.

Problemas de herramientas

Jugando con mi VM Jessie, desconecté (virtualmente) un disco. Eso funcionó, la máquina siguió funcionando. lvs, sin embargo, no dio ninguna indicación de que las matrices estaban degradadas. Volví a conectar el disco y eliminé un segundo. Permaneció corriendo (esto es raid6). Vuelva a adjuntar, todavía no hay indicación de lvs. Corrí lvconvert --repairen el volumen, me dijo que estaba bien. Luego saqué un tercer disco ... y la máquina murió. Vuelva a insertarlo, reinicié, y ahora no estoy seguro de cómo solucionarlo. mdadm --force --assemblesolucionaría esto; ni vgchangetampoco lvchangeparece tener esa opción (lvchange acepta --force, pero no parece hacer nada). Incluso tratando dmsetupde alimentar directamente la tabla de mapeo al kernel, no pude descubrir cómo recuperarla.

Además, mdadmes una herramienta dedicada solo para administrar RAID. LVM hace mucho más, pero se siente (y admito que esto es bastante subjetivo) que la funcionalidad RAID se ha introducido allí; No encaja del todo.

¿Cómo se instala realmente un sistema con RAID LVM?

Aquí hay un breve resumen de cómo instalarlo en Debian Jessie o Wheezy. Jessie es mucho más fácil; tenga en cuenta que si va a probar esto en Wheezy, lea todo primero ...

  1. Utilice una imagen de CD completa para instalar, no una imagen netinst.

  2. Proceda normalmente, acceda al particionamiento del disco, configure sus volúmenes físicos LVM. Usted puede poner /booten LVM-RAID (en Jessie, y en Wheezy con algo de trabajo se detalla a continuación).

  3. Crea tus grupos de volúmenes. Déjalo en el menú LVM.

  4. Primero divertido: el instalador no tiene el dm-raid.komódulo cargado, ¡ni siquiera está disponible! Entonces puedes obtenerlo del paquete linux-image que se instalará. Cambie a una consola (por ejemplo, Alt- F2) y:

    cd /tmp
    dpkg-deb --fsys-tarfile /cdrom/pool/main/l/linux/linux-image-*.deb | tar x
    depmod -a -b /tmp
    modprobe -d /tmp dm-raid
    
  5. El instalador no sabe cómo crear LVM-RAID LV, por lo que debe usar la línea de comandos para hacerlo. Tenga en cuenta que no hice ninguna evaluación comparativa; el tamaño de la franja ( -I) a continuación es una conjetura para mi configuración de VM:

    lvcreate --type raid5 -i 4 -I 256 -L 10G -n root vg0
    
  6. En Jessie, puede usar RAID10 para el intercambio. En Wheezy, RAID10 no es compatible. Por lo tanto, puede usar dos particiones de intercambio, cada RAID1. Pero debe decirle exactamente en qué volúmenes físicos colocarlos o coloca ambas mitades del espejo en el mismo disco . Si. Seriamente. De todos modos, eso se ve así:

    lvcreate --type raid1 -m1 -L 1G -n swap0 vg0 /dev/vda1 /dev/vdb1
    lvcreate --type raid1 -m1 -L 1G -n swap1 vg0 /dev/vdc1 /dev/vdd1
    
  7. Finalmente, vuelva al instalador y presione 'Finalizar' en el menú LVM. Ahora se le presentarán muchos volúmenes lógicos que se muestran. Ese es el instalador que no comprende lo que está sucediendo; ignore todo con rimageo rmetaen su nombre (vea el primer párrafo arriba para obtener una explicación de cuáles son).

  8. Continúe y cree sistemas de archivos, intercambie particiones, etc., como de costumbre. Instale el sistema base, etc., hasta llegar al indicador de grub.

  9. En Jessie, grub2 funcionará si está instalado en el MBR (o probablemente con EFI, pero no lo he probado). En Wheezy, la instalación fallará, y la única solución es hacer backport a grub2 de Jessie. Eso es bastante fácil, se compila limpiamente en Wheezy. De alguna manera, obtenga sus paquetes de grub con respaldo /target(o hágalo en un segundo, después del chroot) y luego:

    chroot /target /bin/bash
    mount /sys
    dpkg -i grub-pc_*.deb grub-pc-bin_*.deb grub-common_*.deb grub2-common_*.deb 
    grub-install /dev/vda … grub-install /dev/vdd # for each disk
    echo 'dm_raid' >> /etc/initramfs-tools/modules
    update-initramfs -kall -u
    update-grub # should work, technically not quite tested²
    umount /sys
    exit
    
  10. En realidad, en mi instalación de grub Jessie VM más reciente se colgó. Cambiando a F2 y haciendo while kill $(pidof vgs); do sleep 0.25; done, seguido de lo mismo para lvs, lo consiguió a través de grub-install. Parecía generar una configuración válida a pesar de eso, pero por si acaso hice una chroot /target /bin/bash, me aseguré /procy fui /sysmontada, e hice una update-grub. Esa vez, se completó. Luego hice una dpkg-reconfigure grub-pcselección de instalación de grub en todos los MBR de los discos virtuales.

  11. En Wheezy, después de hacer lo anterior, seleccione 'continuar sin un gestor de arranque'.

  12. Termina la instalación. Arrancará. Probablemente.

Conocimiento de la comunidad

Hay un buen número de personas que conocen mdadmy tienen mucha experiencia en la implementación. Es probable que Google responda a la mayoría de las preguntas que tiene. En general, puede esperar una pregunta al respecto aquí para obtener respuestas, probablemente dentro de un día.

No se puede decir lo mismo de LVM RAID. Es difícil encontrar guías. La mayoría de las búsquedas de Google que he realizado en cambio me encuentran cosas sobre el uso de matrices mdadm como PV. Para ser honesto, esto probablemente se deba en gran parte a que es más nuevo y se usa con menos frecuencia. De alguna manera, se siente injusto sostener esto en su contra, pero si algo sale mal, la comunidad existente mucho más grande alrededor de mdadm hace que sea más probable recuperar mis datos.

Conclusión

LVM-RAID avanza con bastante rapidez. En Wheezy, no es realmente utilizable (al menos, sin hacer backports de LVM y el kernel). Anteriormente, en 2014, en las pruebas de Debian, se sintió como una idea interesante, pero inacabada. Las pruebas actuales, básicamente lo que se convertirá en Jessie, se sienten como algo que realmente podría usar, si con frecuencia necesita crear pequeñas porciones con diferentes configuraciones RAID (algo con lo que es una pesadilla administrativa mdadm).

Si sus necesidades son atendidas adecuadamente por unos pocos arreglos RAID mdadm grandes, divididos en particiones usando LVM, sugeriría continuar usándolo. Si, en cambio, termina creando muchas matrices (o incluso matrices de volúmenes lógicos), considere cambiar a LVM-RAID. Pero mantenga buenas copias de seguridad.

Muchos de los usos de LVM RAID (e incluso mdadm RAID) están siendo asumidos por cosas como el almacenamiento de clúster / sistemas de objetos, ZFS y btrfs. Recomiendo también investigarlos, pueden satisfacer mejor sus necesidades.


Agradecimientos

Me gustaría agradecer a psusi por hacerme volver a visitar el estado de LVM-RAID y actualizar esta publicación.

Notas al pie

  1. Sospecho que podría usar el mapeador de dispositivos para pegar los metadatos y los datos de una manera que mdadm --assemblelo tome en cuenta. Por supuesto, podrías ejecutar mdadmen volúmenes lógicos bien ... y eso sería más sensato.

  2. Cuando hice la instalación de Wheezy, no pude hacerlo por primera vez, y terminé sin configuración de grub. Tuve que arrancar el sistema ingresando toda la información en el indicador de grub. Una vez arrancado, funcionó, así que creo que funcionará bien desde el instalador. Si termina en el indicador de grub, aquí están las líneas mágicas para escribir:

    linux /boot/vmlinuz-3.2.0-4-amd64 root=/dev/mapper/vg0-root
    initrd /boot/initrd.image-3.2.0-4-amd64
    boot
    

PD: Ha pasado un tiempo desde que hice los experimentos originales. He puesto a disposición mis notas originales . Tenga en cuenta que ahora he hecho más recientes, cubiertos en esta respuesta, y no en esas notas.

derobert
fuente
2
De hecho, está recibiendo ese error debido a que la versión de lvm en wheezy es extremadamente antigua y tiene errores; funciona bien para mí aquí en Ubuntu 14.04 con lvm versión 2.02.98 (creo que Jessie es al menos así de nueva). En segundo lugar, el comando que mostraste fallando es un cambio de tamaño; la remodelación es algo completamente diferente. Reformar significa cambiar de incursión1 a incursión5, o de una incursión de 3 discos5 a una incursión de 4 discos5. Eso todavía no es compatible, pero simplemente cambiar el tamaño funciona bien.
psusi
@psusi Ah, pensé que también consideraban que cambiar el tamaño era una nueva forma (ya que cambia la geometría de RAID, dado que no se acerca tanto a la cantidad cambiante de discos). Pensé que antes de tener un error al intentarlo también en Jessie, volveré a probar eso. (Debe construir una nueva VM Jessie LVM-RAID, por lo que tomará un poco). Gracias.
derobert
dpkg-debproporciona una forma más limpia de extraer archivos de los paquetes deb, sin necesidad de saltar por etapas.
muru
@muru está dpkg-debdisponible en el entorno del instalador? No solía ser ... Asegúrate de revisar a Wheezy también.
derobert
@derobert también ar -xdebería funcionar para descomprimir archivos deb, aunque es más torpe. Además, ¿qué tal actualizar su respuesta con el estado actual?
Faheem Mitha
7

Tampoco sabía que LVM podía hacer RAID. Personalmente, me quedaría con mdadm ya que es un software mucho más maduro que hace lo mismo. Si algo se rompe con LVM RAID, es probable que no pueda obtener tanta ayuda como si se hubiera ido con mdadm. Además, no confiaría en LVM RAID ya que LVM ha demostrado históricamente que no es el software más robusto.

ZFS y BTRFS son el futuro. Los beneficios que brindan van más allá de lo posible en la capa de bloques. A menos que esté buscando compatibilidad, ya no usaré LVM / mdadm. ZFS y BTRFS tienen muchas características como compresión, deduplicación y copia en escritura, pero no voy a entrar en eso aquí, ya que estaría un poco fuera de alcance.

Al final, investigue y use lo que se adapte a sus necesidades / deseos.

Balas Gratis
fuente
Gracias por la respuesta. Considere expandirlo un poco sobre por qué no confía en LVM.
Faheem Mitha
2
"ZFS y BTRFS son el futuro" No necesariamente. Que yo sepa, ZFS en Linux todavía está basado en FUSE, por lo que se usa principalmente para obtener características de ZFS sin usar Solaris o FreeBSD. BTRFS es increíble, pero no necesariamente es el futuro. Por ejemplo, Red Hat parece estar moviéndose más en la dirección de LVM+XFSBTRFS que en su dirección. Admiten BTRFS pero eso es más una cosa de Oracle / SuSE.
Bratchley
Por no decir que no me gustan los btrfs por alguna razón (en realidad me gusta mucho). Es solo que no es la dirección en la que se dirige una distribución importante como Red Hat, y no puedo pensar en nada que BTRFS pueda hacer que LVM / XFS no pueda al menos aproximarse bastante bien.
Bratchley
También diría que BTRFS será bueno, pero LVM puede hacer muchas cosas que BTRFS simplemente no puede hacer (todavía). Por ejemplo, puede hacer volúmenes híbridos e instantáneas de aprovisionamiento delgado, ninguno de los cuales BTRFS (AFAIK) puede hacer.
Bratchley
99
"Que yo sepa, ZFS en Linux todavía está basado en FUSE" esto ha sido incorrecto durante más de cinco años. ZoL es un módulo de kernel y está totalmente preparado para producción. Lo he estado usando ampliamente desde principios de 2010.
Jim Salter