Script initramfs-tools para montar carpetas comprimidas en tmpfs

Script initramfs-tools para montar carpetas comprimidas en tmpfs

Estoy intentando crear una pequeña partición de rescate (~800 MB de espacio libre después de todas las demás particiones del sistema y de almacenamiento) para una computadora portátil con hardware especializado que requiere un kernel y módulos de kernel especiales, de modo que las herramientas de rescate en stock como Clonezilla Live y GParted Live no funcionen. No funciona muy bien. La partición es demasiado pequeña para incluir los módulos y el software necesarios para lo que me gustaría construir, por lo que la mayor parte del sistema debe comprimirse y cargarse en la RAM en tiempo de ejecución. Además, prefiero extraer el sistema por completo en lugar de depender de squashfs, y me gustaría poder guardar los cambios realizados en el sistema tanto como lo permita la partición. Usando Ubuntu 20.04 como sistema base, ideé el siguiente esquema para este propósito:

  1. Después de construir el sistema inicial en chroot, cree una carpeta vacía /ramcomo punto de montaje para tmpfsalbergar los archivos descomprimidos del sistema y del usuario en tiempo de ejecución, mueva todas las carpetas de archivos del sistema y del usuario ( home, usr, var, opt, etc,etc.) en /ramy reemplace cada uno con un enlace simbólico a /ram/$dir. Comprime /ramcomo /ram.tar.gzy deja los puntos de montaje especiales ( dev,,,, y ) sys, así como runsolos en . Elimine y escriba en la partición.tmpprocbootrootfs/ram/*rootfs
  2. En el arranque, después de initrdcargar el kernel y, premonte rootfs, monte tmpfsen /ramy luego extraiga el contenido de /ram.tar.gzen /ram. Esto tiene que suceder antes de rootfsreemplazarlo initramfscomo root, ya que de lo contrario rootfsno se puede acceder a las utilidades necesarias para montar /ramy extraer del archivo comprimido.
  3. Montar rootfsy proceder con el arranque.
  4. Al apagar, haga una copia de seguridad /ram.tar.gzy /ram.tar.gz.bakluego comprima el archivo modificado /ramen formato /ram.tar.gz. Esto se puede lograr usando systemd.

Obviamente, las cosas pueden salir mal en el paso 4 y, por lo tanto, el paso 2 debe incluir la integridad /ram.tar.gzy cargar la copia de seguridad si falla, pero estos deberían ser solo algunos comandos adicionales para incluir en el initramfs-toolsscript y más allá del alcance de mi pregunta, que es :

Sin modificar /usr/share/initramfs-tools/init, ¿cómo creo un script /etc/initramfs-tools/scriptspara realizar el paso 2? Los comandos deberían ser bastante fáciles como

mount -t tmpfs -o $OPTIONS none /ram
tar xvzf ram.tar.gz

Pero no sé en qué carpeta incluir el script (¿init? ¿local? ¿arriba? ¿abajo? ¿premount?) y cómo trabajar con el PREREQencabezado en el propio script.

Respuesta1

Resultó ser bastante sencillo. Crear:

/etc/initramfs-tools/scripts/local-bottom/ramfiles
#!/bin/sh

set -e

PREREQ=""

prereqs()
{
        echo "${PREREQ}"
}

case "${1}" in
        prereqs)
                prereqs
                exit 0
                ;;
esac

mount -t tmpfs -o size=100% none ${rootmnt}/ram
tar xvzf ${rootmnt}/ram.tar.gz -C ${rootmnt}


entonces

sudo chmod +x /etc/initramfs-tools/scripts/local-bottom/ramfiles
sudo update-initramfs -u

información relacionada