#!/bin/sh # 20-persistent-mount.sh — Mount persistent data partition and bind-mount writable paths if [ "$KUBESOLO_NOPERSIST" = "1" ]; then log "Running in RAM-only mode — no persistent storage" # Create tmpfs-backed directories so KubeSolo has somewhere to write mkdir -p /var/lib/kubesolo /var/lib/containerd /etc/kubesolo /var/log /usr/local return 0 fi # Load block device drivers before waiting (modules loaded later in stage 30, # but we need virtio_blk available NOW for /dev/vda detection) modprobe virtio_blk 2>/dev/null || true # Trigger mdev to create device nodes after loading driver mdev -s 2>/dev/null || true # Fallback: create device node from sysfs if devtmpfs/mdev didn't DEV_NAME="${KUBESOLO_DATA_DEV##*/}" if [ ! -b "$KUBESOLO_DATA_DEV" ] && [ -f "/sys/class/block/$DEV_NAME/dev" ]; then MAJMIN=$(cat "/sys/class/block/$DEV_NAME/dev") mknod "$KUBESOLO_DATA_DEV" b "${MAJMIN%%:*}" "${MAJMIN##*:}" 2>/dev/null || true log "Created $KUBESOLO_DATA_DEV via mknod ($MAJMIN)" fi # Wait for device to appear (USB, slow disks, virtio) log "Waiting for data device: $KUBESOLO_DATA_DEV" WAIT_SECS=30 for i in $(seq 1 "$WAIT_SECS"); do [ -b "$KUBESOLO_DATA_DEV" ] && break mdev -s 2>/dev/null || true sleep 1 done if [ ! -b "$KUBESOLO_DATA_DEV" ]; then log_err "Data device $KUBESOLO_DATA_DEV not found after ${WAIT_SECS}s" return 1 fi # Mount data partition (format on first boot if unformatted) mkdir -p "$DATA_MOUNT" if ! mount -t ext4 -o noatime,nosuid,nodev "$KUBESOLO_DATA_DEV" "$DATA_MOUNT" 2>/dev/null; then log "Formatting $KUBESOLO_DATA_DEV as ext4 (first boot)" mkfs.ext4 -q -L KSOLODATA "$KUBESOLO_DATA_DEV" || { log_err "Failed to format $KUBESOLO_DATA_DEV" return 1 } mount -t ext4 -o noatime,nosuid,nodev "$KUBESOLO_DATA_DEV" "$DATA_MOUNT" || { log_err "Failed to mount $KUBESOLO_DATA_DEV after format" return 1 } fi log_ok "Mounted $KUBESOLO_DATA_DEV at $DATA_MOUNT" # Create persistent directory structure (first boot) for dir in kubesolo containerd etc-kubesolo log usr-local network; do mkdir -p "$DATA_MOUNT/$dir" done # Ensure target mount points exist mkdir -p /var/lib/kubesolo /var/lib/containerd /etc/kubesolo /var/log /usr/local # Bind mount persistent paths mount --bind "$DATA_MOUNT/kubesolo" /var/lib/kubesolo mount --bind "$DATA_MOUNT/containerd" /var/lib/containerd mount --bind "$DATA_MOUNT/etc-kubesolo" /etc/kubesolo mount --bind "$DATA_MOUNT/log" /var/log mount --bind "$DATA_MOUNT/usr-local" /usr/local log_ok "Persistent bind mounts configured"