Bricolaje 2. LVM para migrar los sistemas de ficheros @ Samquejo | 2020-11-12T01:17:45+01:00 | 9 minutos de lectura | Actualizado en 2020-11-13T08:39:10+01:00

Bricolaje de YoVirtualizador

O como cierto manitas diría, Con estas manitas
Hoy voy a terminar con el aparatito ARM de BananaPi dentro de un router viejo de Tesa.
Y quien sabe, hasta podemos hacer de servidor.

Por cierto, este artículo y su procedimiento están pensados para usar la consola, y cosas más avanzadas.

Cosas que se quedaron en el tintero

El otro día olvidé mencionar, y cometí el error de suponer, que este hardware tiene mejor tarjeta de red de lo normal.

De hecho, es mejor que la montada en el Minipc que hace de servidor ESXi.

Hardware Specification Banana pi BPI-M2 Ultra
Soc Allwinner R40
CPU quad-core cortex -A7
GPU dual-core MALI-400 MP2 500MHz OpenGL ES 2.0, OpenVG, 1080p45 H.264 high-profile encode and decode.
SDRAM 2GB DDR3 with 733MHz(shared with GPU)
SATA suppoort SATA interface
GPIO 40 Pins Header, 28×GPIO, UART, I2C, SPI, PWM, I2S.
On board Network 10/100/1000Mbps Ethernet (Realtek RTL8211E/D)
Wifi Module WiFi 802.11 b/g/n (AP 6212 module on board)
Bluetooth BT4.0
On board Storage MicroSD (TF) card, eMMC 8G on board (option 16/32/64G)
Display 4-lane MIPI DSI display,or RGB panel or LVDS panel,TV-out on HDMI V1.4
Video Mpeg1/2, Mpeg4, H.263, H.264, etc H.264 decode up to 1080P60, H.264 video encoder is up to 1080P@45fps
Audio outputs HDMI, analog audio (via 3.5 mm TRRS jack), I2S audio (also potentially for audio input)
Audio input On board microphone
USB 3 USB 2.0 host, 1 USB 2.0 OTG
Buttons Reset button, Power button, U-boot button
Leds Power status Led and RJ45 Led
IR on board IR receiver

Pues eso. Tarjeta de red giga PCIe Realtek 8211E, 8 gb de eMMC 4 y módulo wifi combinado con bluetooth.

Las especificaciones las he sacado del alter-ego del fabricante linux-sunxi

Trabajando en el equipo

Bueno, como ya lo hemos subido a Fedora 33 XFCE en la BananaPi MicroPC y a máquina virtual de Hugo, pues creo que no es necesario hacer mucho más por aquí. Lo único es que trabajaré sin entorno gráfico por temas de fluidez.

Particionando el disco

Llegados a este punto lo que voy a hacer es particionar ese disco de 500 que tengo conectado, para albergar los sistemas de ficheros correspondientes a /home y /var.

¿Y por qué estos sistemas de ficheros? y no otros ¿o todo?

Pues muy simple. Esos sistemas de ficheros contienen lo que podría denominar, los datos de usuario, mientras que en /bin, /usr, /root y /etc están los datos, y binarios, del sistema.

También por la velocidad de acceso.
Por muy 7200 rpm que sea el disco, la velocidades menor que la de la eMMC.
A lo mejor con una SD me lo pienso, pero en la eMMC, no salvo falta de espacio, que como veréis, no sufrimos.

  • El directorio /usr es el que contiene todos los binarios. Eso mejor no tocarlo porque tampoco son tantos y no quiero problemas.
  • El directorio de /home o /export son los que suelen llevar el peso de los usuarios.
    Es muy importante mantener esto bajo control no sea que desborden por algún motivo. Las cuotas son útiles pero no en este entorno donde siendo mi propio administrador, no puedo ser mi propio BOFH y Luser a la vez.
  • El directorio de /var tiene la capacidad de extenderse todo lo que quiera. Es donde se almacenan los ficheros de datos de los distintos servidores levantados en el sistema. Por ejemplo docker, mysql, apache… Todo lo que tenga que ver con datos y no con configuraciones o binarios va en ese directorio.

Por mi experiencia, los filesystems de boot, root, run, incluso tmp y por extensión el resto, son pequeños, no deberían ser un problema para mantenerlos en el /.
Lo que voy a hacer es crear un volumen pequeño para el /var/log, donde además poder dejar residente un script que lo repase y lo limpie cada tanto, si algún log se desmanda.

Todo esto viene por lo siguiente

  • /var/log contiene los logs del sistema, y pueden crecer desbocadamente.
  • /var contiene los volúmenes de servicio y los “temporales” que no van a temporal. Puede ocupar una buena porción y llenar el sistema de ficheros.
  • /home Siempre es bueno separar esto puesto que es donde los usuarios tendrán sus cosas, y no es del sistema.

primera captura

En este momento, 2,5GB ocupados, 1,7GB son binarios y configuraciones, en especial /etc y /usr, y /var ocupa casi 700MB, es el principal punto de acción. En este momento, /home es despreciable, pero lo voy a mover también.
El sistema base tendrá espacio suficiente para no morir ahogado en esa eMMC limitada de 8GB.

Lo del aviso sobre la consola del principio, bueno, es que ni me planteo usar herramientas gráficas para estas labores. Que a lo mejor se puede, pero tengo mis dudas.
Aclarado eso, la estructura será así.

Por particiones: mmcblk1p3 -> / mmcblk1p2 -> /boot

Por volúmenes: vg_microarm/lv_home -> /home vg_microarm/lv_var -> /var vg_microarm/lv_var_log -> /var/log

Voy a usar LVM para este disco porque me aporta más flexibilidad de la que me dan las particiones básicas MBR o GPT y de esta forma puedo declarar que un volumen físico es físicamente un disco. Me salto la primera capa.
Ah, y muy importante. El disco está vacío. No hay nada importante o util.

Primero habrá que identificar el disco. En mi caso es fácil. Vamos a usar el único disco SCSI (SATA concretamente pero ya explicaré por qué es S y no H u otra cosa)
Si hay dudas, identificamos lsblk nos muestra todos los dispositivos de bloque en un arbolito muy util. Es mi favorito.
mount | egrep 'sd[a..z]|mmc|mapper' nos muestra que dispositivos de bloque están montados.
blkid es quizá la más enrevesada, pero también la que más información aporta.

Una vez elegidas vuestras armas, ya tendremos nuestros identificadores.

El acceso a disco es, o debería, ser multipath. No se como se traduce, pero si como se habilita.
Necesitamos al menos que el sistema vea como dispositivos multicamino todos los que sean compatibles en el sistema. En este caso, no tengo problemas con ninguno, pero no voy a habilitar nada especial, puesto que no tenemos características avanzadas.

defaults {
        user_friendly_names yes
        find_multipaths yes
        }
blacklists {
        }

Con este código en el fichero /etc/multipath.conf será suficiente para arrancar el servicio con systemctl start multipathd

segunda captura tercera captura

Disclaimer gordo

Repito, para mi, en mi caso, es /dev/sda pero solo por las características de este dispositivo. No usar en dispositivos donde /dev/sda es el dispositivo del sistema.
Volver a leer si hace falta.

Volvemos a escanear el sistema de discos. lsblk y vemos el arbolito de dispositivos.

cuarta captura

mount | egrep 'sd[a..z]|mmc|mapper' nos mostrará los dispositivos ya montados, los que no debemos tocar.

quinta captura

Para asegurar que no existan problemas, vamos a sobrescribir los 100 primeros megas, zona habitualmente ocupada por las tablas de partición y los sectores de arranque. A partir de aquí será prácticamente imposible que coincidan firmas o cosas así.

dd if=/dev/zero of=/dev/sda bs=512 count=204800 En mi caso es /dev/sda, es lo que indica la orden lsblk

sexta captura

Si no, también es posible usar fdisk, pero es que no lo necesito. Es suficiente con un dd, pero si hubiera que limpiar con fdisk…

séptima captura

Para crear el volumen físico indicamos el disco completo.
Como no será dispositivo de arranque, no necesitamos particiones de ningún tipo.
pvcreate /dev/sda

octava captura

El aviso de wipe por detectar una DOS signature lo produce el haber usado fdisk en lugar de dd. No pasa nada. El resultado será lo mismo.

Para comprobar, pvdisplay

novena captura

Lo siguiente es el grupo de volúmenes.
Un volumen físico puede pertenecer a un grupo pero no a varios. Un grupo puede contener varios volúmenes físicos.
vgcreate vg_microarm /dev/sda Para comprobar, vgdisplay y nos fijaremos en algún atributo más adelante.

décima captura

Ahora ya podemos crearlos volúmenes lógicos, lo que sería lo más parecido a una partición.
Vamos a empezar por la de home:
lvcreate -L 50G -nlv_home vg_microarm y comprobamos lvdisplay

undécima captura

Nos hemos quedado cortos. Vamos a operar con los volúmenes.
Es fantástico poder mover los tamaños y jugar con los volúmenes. ¿Pasar de 50GB a 60GB?

lvresize -l+20%LV vg_microarm/lv_home (20%lv es el 20% del lv actual)

duodécima captura

Pasar de 60GB a un 20% menos? -20%lv del LV nuevo será llegar a 48GB

lvresize -l-20%LV vg_microarm/lv_home

Ojo, destruye datos, nos lo avisa

decimotercera captura

Lo más frecuente es añadir las cantidades directamente. Como por ejemplo 52 GB para alcanzar los 100 GB
lvresize -L+52G vg_microarm/lv_home

decimocuarta captura

También es muy frecuente añadir y redimensionar el cuando hay un filesystem en el disco. Falla si no hay FS, pero por lo menos extiende el volumen.
lvresize -r -L+50G vg_microarm/lv_home

decimoquinta captura

¿Y como se crea un sistema de ficheros?
Pues esto es el formatear de toda la vida
mkfs.ext4 /dev/mapper/vg_microarm-lv_home

decimosexta captura

Copiamos uuid 8730219a-aa01-40fc-ba8c-09beb2f39dce que nos servirá luego para hacer cosas importantes.
lvresize -r -L+50G vg_microarm/lv_home Si, se puede crecer aun cuando se ha formateado ya, y no se pierden datos al crecer, pero si al reducir.

decimoséptima captura

Seguimos creando el resto de los sistemas de ficheros.
lvcreate -L 10G -nlv_var_log vg_microarm será para un volumen de 10 GB para logs.
Formateamos y nos quedamos con el identificador: d75e552e-60fa-4251-9f72-b23e21cd4a92
mkfs.ext4 /dev/mapper/vg_microarm-lv_var_log

decimooctava captura

Para el volumen /var quiero usar el resto del disco. Esto es, buscar la cantidad exacta para que no sobre, dejar que sobre lo suficiente para poder hacer instantáneas (que no voy a hacer) o para crecer en algún otro volumen.
Con vgdisplaynos vamos a fijar en el campo Free PE / Size donde nos dirá el número de unidades de asignación y una traducción, con lo que si multiplicamos el valor de PE Size por el número de Free PE obtendríamos el espacio libre, pero al no ser un número especialmente redondo, nos va a quedar raro, por eso dice que quedan menos de 305,76GiB siendo un redondeo de los realmente 313096 MiB que quedan.

decimonovena captura

Lo mismo toca para el volumen /var, pero esta vez lo haré por el 100% libre relativo del VG, lo que acabo de comentar. lvcreate -l 100%FREE -nlv_var vg_microarm

vigésima captura

mkfs.ext4 /dev/mapper/vg_microarm-lv_var > 8654c8a3-61ae-41e4-adaa-92a98c99a653 mkfs.ext4 /dev/mapper/vg_microarm-lv_var

Hasta aquí, todo fácil, y todo listo para mover los filesystems.
Cosa que haré en el siguiente post porque esto ha quedado mucho más largo de lo que me hubiera gustado.


YoVirtualizador en formato podcast. Ahora también en Sospechosos Habituales: https://feedpress.me/sospechososhabituales
Y sin más, os dejo los enlaces:

Web: https://www.yovirtualizador.com
Grupo de telegram: https://t.me/grupovirtualizador
Podcast: https://www.ivoox.com/podcast-yovirtualizador_fg_f1563806_filtro_1.xml
Canal de youtube: https://www.youtube.com/channel/UC0R70cABSsmC6TFyXth0qPg
Enlace de afiliados de amazon: https://amzn.to/3gX3HmK
Enlace de referidos de la Asociación Podcast: https://www.asociacionpodcast.es/registrarse/socio/?coupon=SB6A70

© 2019 - 2024 YoVirtualizador

Powered by Hugo with theme Dream.

avatar

El blog de YoVirtualizadorTu podcast y blog de confianza

Acerca de YoVirtualizador

YoVirtualizador es la marca de varios proyectos

Podcast de informática profesional. Canal de Youtube sobre el blog, el podcast y de temática profesional. Blog de contenido diverso, con temática BOFH y técnica.

Gracias por la lectura.

Política de comentarios

En YoVirtualizador todos los comentarios serán bienvenidos pero moderados.

Respetos guardan respetos.

El contenido irrelevante u ofensivo será eliminado.

Galletas

Política de cookies

En YoVirtualizador no usamos cookies para nada, pero los servicios de discus y analytics recopilan datos en servidores ajenos a YoVirtualizador sin que yo pueda hacer nada.

Este aviso es sólo porque algún político tenía que justificar su existencia.

Si hace clic en un enlace de afiliado y compra un producto o servicio, es posible que ese comerciante nos pague una tarifa.