Autor Tema: Liándola parda con un USB (instalación ext4 en USB)  (Leído 2846 veces)

0 Usuarios y 1 Visitante están viendo este tema.

fflfi

  • Visitante
Liándola parda con un USB (instalación ext4 en USB)
« en: 15-01-2016, 11:03 (Viernes) »
Llevo varios días intentando instalar wifislax en un USB con ext4, pero parece que ya lo he conseguido. El tema es que estoy casi seguro de que la he liado innecesariamente, tengo algún fallo mínimo, y además me gustaría saber vuestra opinión.

Lo primero, las razones para instalarlo en ext4 en un USB:
- Cabezonería.
- Necesita menos RAM.
- Inicialmente ocupa más espacio en disco, pero luego las actualizaciones no requieren tanto espacio.
- El arranque es algo más rápido.

Los dos problemas que he encontrado son:
- El kernel no es capaz de encontrar su propio sistema de ficheros, así que falla con el típico Kernel panic: VFS: Unable to mount... La solución se basa en alterar algunos ficheros y crear una imagen initrd.
- El esquema de particiones varía de equipo a equipo. Esto se soluciona cambiando /etc/fstab a mi gusto.

La instalación que he hecho está basada en wifislax 4.12 dev (más o menos importante) usando un pendrive de 16Gb, y los pasos y modificaciones serían estos. Marco como cursiva los pasos opcionales.

0.- Arranca wifislax desde el CD.
Aprovecha para elegir tu sistema de arranque favorito. En mi caso he elegido kernel SMP, gráficos VESA y XFCE ya que voy a llevarme mi pendrive por varios equipos y no sé si todos serán compatibles con la opción "normal".

1.- Sigue la guía de instalación en HDD.
Con eso harás la instalación básica, que es la que vamos a alterar. No voy a repetir todos los pasos, ya están bien explicados.

En mi caso he introducido estas variaciones:
- He creado una partición ext4 que NO ocupa todo el disco (unos 12Gb).
- He creado una segunda partición FAT para llenar el resto del disco.
- No uso partición swap (para no quemar el USB demasiado rápido).


Al acabar la instalación, NO reinicies el equipo. El pendrive (todavía) no será capaz de arrancar.

2.- Abre una consola y monta el pendrive.
En mi caso, la instrucción es
Código: [Seleccionar]
mount /dev/sdc1 /media/floppy(por poner algún punto de montaje).

3.- Cambios al montaje de archivos.
Vete al directorio /media/floppy/mnt y borra todos los directorios que hay (son los puntos de montaje de tu equipo, que probablemente no serán válidos en otros).

Abre gparted y busca la partición donde acabas de instalar tu wifislax. Pincha con el botón derecho y elige la opción Información. Entre varios datos interesantes hay uno que vas a necesitar sí o sí: el UUID de la partición. Selecciónalo con el ratón y copialo con CTRL+C (p.ej: 6566a9af-ca33-48c2-8b2f-f2888ebc3d87)

Abre una consola y ejecuta nano /media/floppy/etc/fstab. El fichero está dividido en varias secciones: particiones de sistema, partición root, dispositivos montados y swap. En la partición root, quita la línea que hay y pon una que diga algo así:

Código: [Seleccionar]
UUID=6566a9af-ca33-48c2-8b2f-f2888ebc3d87     /     ext4     auto,noatime,nodiratime,suid,dev,exec,async    1     1
Obviamente, el UUID que hay que poner es el mismo que hayamos obtenido de la partición de wifislax. Cuando acabes, pulsa CTRL+X para salir y graba los cambios.

IMPORTANTE: Puedes pegar en la consola, pero no usando CTRL+V. Utiliza la opción del menú Editar > Pegar.

Para los interesados, los parámetros más interesantes del chorrotón de arriba son noatime, nodiratime y async. Los dos primeros evitarán que se actualicen las fechas en cada acceso (aumentando el rendimiento) y el tercero hará que las escrituras sean asíncronas (agrupándolas y aumentando algo el rendimiento). Entre los tres bajan el número de accesos en escritura al disco, evitando el desgaste prematuro.

3.1.- Más cambios al montaje de archivos (opcional).
En mi caso había creado una partición para datos (para poder intercambiar ficheros con sistemas windows). Para activarla, crea una carpeta en /media/floppy/mnt:
Código: [Seleccionar]
mkdir /media/floppy/mnt/dataDespués, obtén el UUID de la partición de datos y añádela en /media/floppy/etc/fstab:
Código: [Seleccionar]
UUID=8FE0-E51E     /mnt/data     vfat     auto,noatime,nodiratime,suid,dev,exec,async     0     0Con eso, el equipo siempre montará la partición en /mnt/data y cuando metamos el pendrive en un Windows tendremos un par de gigas para pasarnos ficheros de un lado a otro.[/i]

4.- Creación de una imagen initrd.
Aquí está el meollo de la cuestión. El programa de instalación de wifislax no crea esta imagen, lo que impide que pueda arrancar desde USB. Nosotros la crearemos a mano. En la consola introduciremos los siguientes comandos:
Código: [Seleccionar]
mount --bind /proc /media/floppy/proc
mount --bind /dev /media/floppy/dev
mount --bind /sys /media/floppy/sys
chroot /media/floppy
mkinitrd -c -m ext4 --no-compress
cd /boot
gunzip initrd.gz
exit

Los primeros comandos crean un entorno para construir la imagen y el mkinitrd la crea. El kernel por defecto de wifislax no soporta compresión gzip, así que necesitamos descomprimir la imagen antes de usarla. Opcionalmente la podríamos comprimir con xz, pero ganaríamos solo un par de megas. Por último, salimos del entorno chroot al entorno "normal" de wifislax.

5.- Cambios en los ficheros de arranque.
Ahora toca meterle mano al grub.cfg. Aquí lo que haremos serán dos cosas:
- Cambiar todas las referencias a /dev/sdc1 (o lo que tengáis en vuestro caso) por particiones UUID para asegurar que arranque aunque cambiemos el esquema de particiones.
- Añadir nuestra imagen initrd al arranque.

Simplemente abrimos el fichero grub.cfg con el siguiente comando:
Código: [Seleccionar]
nano /media/floppy/boot/grub/grub.cfg
Usamos CTRL+W para buscar /dev (hay tres apariciones en el fichero) y cambiamos root=/dev/sdc1 por UUID=...
Además, debajo de cada línea "linux /boot/..." debería haber otra que diga "initrd     /boot/initrd"

Las líneas de arranque deberían quedar algo así:
Código: [Seleccionar]
linux     /boot/vmlinuz-4.1.15-smp-wifislax root=6566a9af-ca33-48c2-8b2f-f2888ebc3d87 rw rootfstype=ext4 rootdelay=5
initrd     /boot/initrd
para que nuestra imagen initrd se cargue y el asunto funcione.

Por si acaso, hacemos una copia de seguridad:
Código: [Seleccionar]
cp /media/floppy/boot/grub/grub.cfg /media/floppy/boot/grub/grub.cfg.uuid
Ahora sólo queda rebotar y ver qué pasa. En caso de problemas, no necesitamos reinstalar el sistema, basta con arrancar desde el CD y comenzar las modificaciones otra vez.

Problemas:
- El procedimiento es algo coñazo. ¿Podríamos ahorrar algún paso? ¿Alguna sugerencia para hacerlo más corto? Supongo que puedo hacer el chroot mucho antes y hacer todas las modificaciones a los ficheros desde el entorno chroot, pero tampoco cambiaría mucho la cosa.
- Aunque el procedimiento es el mismo para la wifislax 4.11.1, en esta distribución han olvidado incluir mkinitrd. Hay que bajar el paquete de slackware e instalarlo con pkgtool.
- Me pregunto si no se podría modificar el instalador de wifislax para que construya un grub.cfg y un /etc/fstab basado en UUID (al menos para la partición root). Y lo que es mucho más importante, para generar/incluir una imagen initrd que nos permita arrancar desde USB.
- El instalador de wifislax no copia los ficheros originales de la distribución, sino los ficheros en memoria. La diferencia no es trivial: si tenéis alguna configuración, módulo extra o cualquier cosa en el CD o pendrive de arranque, se copiará. Incluso si habéis hecho alguna pifia y tenéis módulos que no queréis copiar.
- Durante el arranque hay una línea que indica un problema en grub, pero no puedo leer cuál es. De cualquier manera, arranca "casi" perfectamente.
- El USB a veces no arranca, indicando un error al montar /mnt. En este caso, los pasos a seguir son buscar con fdisk -l la partición de wifislax, montarla con mount /dev/sdc1 /mnt y teclear exit para que siga el arranque. A veces pasa, a veces no y no tengo ni idea de por qué. He intentado poner un UUID en el /etc/fstab pero tampoco funciona. Solucionado y corregido en el tutorial.
- Y a veces wifislax cambia el grub.cfg y lo deja inutilizable (concretamente crea uno nuevo llamado grub.cfg.new quitando los cambios que hemos hecho). Mi recomendación es tener siempre a mano una copia del grub.cfg para reinstalarlo rápidamente. Creo que solo lo hace en el primer arranque tras instalarla, pero es algo molesto.


« Última modificación: 08-02-2016, 09:31 (Lunes) por fflfi »

Desconectado drvalium

  • Colaborador
  • *
  • Mensajes: 17375
  • Misántropo
Re: Liándola parda con un USB (instalación ext4 en USB)
« Respuesta #1 en: 15-01-2016, 22:37 (Viernes) »
Citar
¿Podríamos ahorrar algún paso?

te los podrías saltar todos, instalar el sistema en un pendrive no tiene ningún sentido, lo único que vas a conseguir es que funcione mas lento que en modo LiveUSB.


saludos

fflfi

  • Visitante
Re: Liándola parda con un USB (instalación ext4 en USB)
« Respuesta #2 en: 16-01-2016, 11:01 (Sábado) »
...
« Última modificación: 22-01-2016, 12:38 (Viernes) por fflfi »

Desconectado drvalium

  • Colaborador
  • *
  • Mensajes: 17375
  • Misántropo
Re: Liándola parda con un USB (instalación ext4 en USB)
« Respuesta #3 en: 16-01-2016, 15:16 (Sábado) »
hi

no se a que te refieres con poner el punto de montaje manualmente, no hay que montar nada.

descomprimes la .iso con por ejemplo Winrar, copias las carpetas /boot y /wifislax dentro del pendrive. Entras en la carpeta /boot, ejecutas el archivo "Wifislax Boot Installer.exe" y ya lo tienes listo para funcionar. Solo le tienes que decir a tu ordenador que se inicie desde el pendrive en vez desde el disco duro.

si instalas cosas y quieres conservar los cambios, antes de apagar Wifislax entras en el menú KDE/Sistema seleccionas "Salvar cambios en xzm" y el modulo que te crea en el escritorio lo copias dentro de la carpeta /wifislax/modules del pendrive.


un saludo
« Última modificación: 16-01-2016, 15:17 (Sábado) por drvalium »

fflfi

  • Visitante
Re: Liándola parda con un USB (instalación ext4 en USB)
« Respuesta #4 en: 22-01-2016, 12:58 (Viernes) »
Borro mi respuesta y me disculpo porque he sido excesivamente agresivo.

No tengo problemas generando el pendrive a la manera "tradicional" (salvo por un problemilla con la BIOS de uno de mis equipos), pero como ya he explicado tengo interés en hacerlo en una partición ext4 con el sistema descomprimido.

He seguido probando alguna cosa, y creo que el problema está en el script init que se carga en initrd. Según ese script, si existe la opción root= con las opciones UUID= o LABEL= en la línea de comandos del kernel se intentará localizar dicha partición con findfs. Todo muy lógico, y supongo que el script está bien escrito.

Si ejecuto el findfs de busybox (el shell que me deja cuando se para el arranque), veo que no devuelve nada porque no logra localizar el filesystem que le digo; el findfs que se hay tras el arranque sí que localiza correctamente la partición de arranque. También he visto que findfs de busybox solo soporta las opciones UUID= y LABEL= mientras que el de linux soporta también las opciones PARTUUID= y PARTLABEL=. Es curioso que según la opción utilizada a veces funciona y a veces no (esto daría para escribir más).

¿Cambiaría algo si actualizo busybox (suponiendo que haya actualización)? ¿Alguien tiene un consejo para este tipo de arranque?

Gracias.

fflfi

  • Visitante
Re: Liándola parda con un USB (instalación ext4 en USB)
« Respuesta #5 en: 08-02-2016, 09:33 (Lunes) »
Ya he corregido lo del /mnt. Al parecer, es obligatorio incluir un rootdelay en la línea de arranque del kernel, para que le de tiempo a arrancar los USB antes de buscar las particiones.

Ahora tengo otro problemilla y es que en otro pendrive con el mismo tratamiento me da errores del sistema de ficheros root en cada arranque (y no me deja arrancar). Lo he comprobado con fsck.ext4 (tanto desde la propia wifislax como de una Debian normalita) y me dice que root está limpio. He probado a hacer el fsck forzándolo y tampoco da errores. ¿Alguna idea?
« Última modificación: 08-02-2016, 09:35 (Lunes) por fflfi »

Desconectado drvalium

  • Colaborador
  • *
  • Mensajes: 17375
  • Misántropo
Re: Liándola parda con un USB (instalación ext4 en USB)
« Respuesta #6 en: 08-02-2016, 18:36 (Lunes) »
hi

la verdad no se que contestarte, hace años hice una instalación de estas (no en ext4) y visto el pésimo rendimiento no he vuelto a hacer ninguna.

si se que hay pendrive que no se llevan bien con ext4, por problemas de velocidad de lectura/escritura, resumiendo, ext4 le pide al pendrive ir mas rápido de lo que el pen puede soportar.


un saludo