
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:
- Después de construir el sistema inicial en
chroot
, cree una carpeta vacía/ram
como punto de montaje paratmpfs
albergar 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/ram
y reemplace cada uno con un enlace simbólico a/ram/$dir
. Comprime/ram
como/ram.tar.gz
y deja los puntos de montaje especiales (dev
,,,, y )sys
, así comorun
solos en . Elimine y escriba en la partición.tmp
proc
boot
rootfs
/ram/*
rootfs
- En el arranque, después de
initrd
cargar el kernel y, premonterootfs
, montetmpfs
en/ram
y luego extraiga el contenido de/ram.tar.gz
en/ram
. Esto tiene que suceder antes derootfs
reemplazarloinitramfs
como root, ya que de lo contrariorootfs
no se puede acceder a las utilidades necesarias para montar/ram
y extraer del archivo comprimido. - Montar
rootfs
y proceder con el arranque. - Al apagar, haga una copia de seguridad
/ram.tar.gz
y/ram.tar.gz.bak
luego comprima el archivo modificado/ram
en formato/ram.tar.gz
. Esto se puede lograr usandosystemd
.
Obviamente, las cosas pueden salir mal en el paso 4 y, por lo tanto, el paso 2 debe incluir la integridad /ram.tar.gz
y cargar la copia de seguridad si falla, pero estos deberían ser solo algunos comandos adicionales para incluir en el initramfs-tools
script 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/scripts
para 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 PREREQ
encabezado 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