#!/bin/bash set -e fail() { echo -e "$1" >&2 exit 1 } echo "Lade SquashFS-Root in den RAM..." # Prüfen, ob genügend RAM verfügbar ist RAM_FREE=$(grep MemAvailable /proc/meminfo | awk '{print $2}') if [ "$RAM_FREE" -lt 1000000 ]; then # Mindestens 1GB RAM nötig fail "Nicht genügend freier RAM!" fi # RAMFS für SquashFS-Image erstellen mount -t ramfs -o mode=0755 ramfs /mnt || fail "Fehler beim Mounten von ramfs" # SquashFS-Image nach RAM laden (600-900 MB) cp /root.sqsh /mnt/root.sqsh || fail "Fehler beim Kopieren von SquashFS-Image" # SquashFS-Image mounten (Read-Only) mkdir -p /mnt/squashfs mount -t squashfs /mnt/root.sqsh /mnt/squashfs -o loop || fail "Fehler beim Mounten von SquashFS" # OverlayFS für Schreibzugriff einrichten mkdir -p /mnt/overlay/{upper,work,newroot} mount -t overlay overlay -o lowerdir=/mnt/squashfs,upperdir=/mnt/overlay/upper,workdir=/mnt/overlay/work /mnt/overlay/newroot || fail "Fehler beim Mounten von OverlayFS" # Mountpunkte ins neue Root verschieben mkdir -p /mnt/overlay/newroot/{proc,sys,dev,run,tmp} mount --move /proc /mnt/overlay/newroot/proc mount --move /sys /mnt/overlay/newroot/sys mount --move /dev /mnt/overlay/newroot/dev mount --move /run /mnt/overlay/newroot/run # Root wechseln cd /mnt/overlay/newroot pivot_root . oldroot || fail "pivot_root fehlgeschlagen" # Altes Root unmounten umount -l /oldroot/proc || true umount -l /oldroot/sys || true umount -l /oldroot/dev || true umount -l /oldroot/run || true umount -l /oldroot || true echo "SquashFS Root erfolgreich geladen. Starte init..." exec /sbin/init