
Como decíamos el otro día
En el artículo anterior, https://www.yovirtualizador.com/posts/2020/20201112 dejé pendientes muchas cosas.
Al menos el disco quedó particionado.
Revisando la configuración
Puesto que ya tenemos el disco particionado y los volúmenes creados, solo nos queda revisar.
La información que vuelca lvdisplay es extensa y solo nos interesa una parte, así que filtramos un poco por medio de lvdisplay | grep LV
Lo cual nos da una idea de que volúmenes tenemos y su tamaño.
El UUID del LV no nos interesa ni nos es útil directamente en este momento.
Lo que necesitamos es el UUID del sistema de ficheros, del disco formateado en cada volumen.
Se obtiene con blkid
Ups, me faltaba crear el filesystem del último volumen. No pasa nada puesto que el comando mkfs también devuelve el UUID.
Nos quedan:
Volumen | UUID | Destino | Tamaño |
---|---|---|---|
/dev/vg_microarm/lv_var | 8654c8a3-61ae-41e4-adaa-92a98c99a653 | /var | <306GiB |
/dev/vg_microarm/lv_var_log | d75e552e-60fa-4251-9f72-b23e21cd4a92 | /var/log | 10GiB |
/dev/vg_microarm/lv_home | 8730219a-aa01-40fc-ba8c-09beb2f39dce | /home | 150GiB |
Moviendo datos
Toca echar a todos los usuario y quedarnos solos, en modo monousuario.
Para ello se inventaron los niveles de ejecución. Son simples así que los repaso por si acaso
Existen varios modos de trabajo:
Run level 0 is matched by poweroff.target (and runlevel0.target is a symbolic link to poweroff.target).
Run level 1 is matched by rescue.target (and runlevel1.target is a symbolic link to rescue.target).
Run level 3 is emulated by multi-user.target (and runlevel3.target is a symbolic link to multi-user.target).
Run level 5 is emulated by graphical.target (and runlevel5.target is a symbolic link to graphical.target).
Run level 6 is emulated by reboot.target (and runlevel6.target is a symbolic link to reboot.target).
Emergency is matched by emergency.target.– Texto extraido de la documentación de systemd
los modos 2 y 4 no son habituales. Son como el 3 y 5 pero sin red, por lo tanto han dejado de tener la utilidad que tenían hace bastante tiempo, como cuando se usaban consolas de serie parar los terminales de usuario en lugar de conexiones de red. Recuerdo que Xenix corría en modo 2 cuando teníamos los terminales por RS232. Mi primer Unix.
Hay 2 formas de ver en que estado nos encontramos, porque habrá que volver a ese mismo estado.
A la antigua: who -r
Con systemd: systemctl get-default
Para el cambio, si usamos systemd, no deberíamos usar init, así que sabiendo que estamos en runlevel 3 porque me lo ha chivado who o en multi-user.target porque me lo ha dicho systemctl, vamos a cambiar al runlevel 1 o rescue.target
Para eso…
systemctl isolate rescue.target
Nos pedirá la contraseña de administrador. ¿Quien recuerda a qué se parece esta pantalla?
A partir de este momento, dejo la sesión por red y me paso a una consola local, en este caso putty por rs232, es mas cómodo para mi que poner una pantalla y teclado, y andar sacando fotos.
Ale, ya podemos empezar a mover cosas.
Lo primero es que vamos a mover el /home
Para ello, montamos el dispositivo en /mnt y copiamos el contenido.
Debería comprobar cada permiso, pero ya por experiencia se que el comando se lleva todo.
Los otros permisos son los de selinux, y si, trabajo con ello, así que voy a comprobarlos.
ls -alZ
contra origen y destino me vuelca datos suficientes para tener información.
Coincide, excelente.
Hay varias formas sw copiar, y en este artículo uso cp con parámetros de dos formas distintas pero són absolutamente equivalentes para lo que estamos haciendo. Necesito que sea recursivo, que conserve los permisos, y que también conservar los otros permisos.
cp -apxrf /home/* /mnt
Lo que queremos es que el directorio quede en la raíz, por lo que es importante el *.
Desmontando el FS en /mnt podemos seguir.
El siguiente va a ser el de los logs. Montar y copiar. Y luego el /var.
Para demostrar que hay más variantes que funcionan con un resultado satisfactorio, cp -rv --preserve=context /var/log/* /mnt
con la misma consideración. El * es importante.
Puntos de montaje
Con los 3 FS copiados, vamos a editar los puntos de montaje. Esto se hace en /etc/fstab.
Yo uso nano, el editor por defecto, pero podéis usar cualquier cosa, incluso echo.
Voy a añadir las líneas que corresponden a mi sistema:
UUID=8730219a-aa01-40fc-ba8c-09beb2f39dce /home ext4 defaults 0 2
UUID=8654c8a3-61ae-41e4-adaa-92a98c99a653 /var ext4 defaults 0 2
UUID=d75e552e-60fa-4251-9f72-b23e21cd4a92 /var/log ext4 defaults 0 2
El orden es importante, puesto que tenemos un FS anidado, lo que vamos a hacer es montar desde la ruta más corta a la más larga, por tema de dependencias.
Si fuera un disco ssd, además de defaults, debería llevar noatime, como lo lleva el disco eMMC y discard para hacer TRIM, pero como es un disco mecánico, la mejor opción es la opción por defecto.
Si en vez de usar el UUID queremos usar etiquetas, podemos usar e2label y el dispositivo para asignar un nombre. Personalmente no me gusta puesto que puede provocar algún problema menor con mi forma de trabajar.
Queda un tanto así:
Para establecer los nuevos puntos de montaje, y como he copiado el contenido en lugar de moverlo, vamos a renombrar tanto /home como /var y crearemos nuevos directorios para esos puntos de montaje.
Pero, aquí viene lo complicado, selinux determina que no todo directorio puede albergar un /home, o un /var, incluso llamándose así.
Tal como se ve, me lo ha dejado unconfined y default.
Si copio la raíz, solo la raíz, del /home, me dejará el directorio con los permisos correctos. Lo podemos comprobar y queda correcto de tipo system_u y home_root_t, con ls -alZ /
Lo mismo aplicamos a /var. Lo vemos en su interior puesto que es la otra cara del directorio .
y tiene los permisos correctos.
Poniendo en producción
Para volver, podría muy bien regresar a funcionamiento convencional con systemd, esto es ideal si no podemos permitirnos un reinicio.
Para ello habría que probar los montajes con mount -a
y si está todo correcto, podemos volver con systemctl isolate multi-user.target
dado que el sistema me había chivado que vengo de ahí, del runlevel 3.
Pero en mi caso, por higiene, voy a reiniciar.
Una vez reiniciado y comprobado, vemos que los discos aparecen correctamente montados, lo vemos con mount | egrep 'sd[a..z]|mmc|mapper'
y vamos a pedirle más datos, como por ejemplo el espacio disponible.
Como podemos apreciar, ya tenemos un sistema repartido entre una eMMC y un disco mecánico, con capacidad para mucho, y en un tiempo record.
Como esto lo voy a replicar en vídeo, dejo abierto para preguntas, sugerencias y modificaciones.
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